Конференция "WinAPI" » Вопрос по использованию DrawText
 
  • Тимохов Дима © (05.06.17 19:48) [0]
    Коллеги, приветствую!

    1. Пришлось разбираться, как работает модуль Dialogs.pas (надо некий свой аналог написать с доп. функционалом).

    2. Обнаружил такой код:

    DrawText(Canvas.Handle, PChar(Msg), Length(Msg)+1, TextRect,
         DT_EXPANDTABS or DT_CALCRECT or DT_WORDBREAK or
         DrawTextBiDiModeFlagsReadingOnly);



    Как вы думаете, почему написано Length(Msg)+1, а не Length(Msg) или -1?

    ЗЫ Delphi2007.
    ЗЗЫ Имхо ошибка в генофонде.
  • NoUser © (05.06.17 21:10) [1]
    >  почему написано
    а ты налей и отойди
    и проверь на нил-строке
  • Тимохов Дима © (05.06.17 21:41) [2]

    > NoUser ©   (05.06.17 21:10) [1]
    > >  почему написано
    > а ты налей и отойди
    > и проверь на нил-строке

    Не смотря на твою краткость, я понял, что ты говоришь.

    Действительно, если написать Length(Msg), то для пустой строки DrawText не уменьшает TextRect. Это есть. Добавляя +1 к Length(Msg) разрабы говорят, что есть минимум один символ. Тогда DrawText уменьшает TextRect. При этом, правда, из недостатков - добавляет пространство справа на 1 символ и заложенные отступы в mcHorzMargin (а это ровно 2 символа) работают не верно (видно в случае однострочного текста).
    Это я понял.

    Но почему бы -1 не написать? Работает также верно.

    Плюс к этому, нигде в доке по DrawText не сказано, что можно передавать в nCount буфер, больший, чем строка.

    Мутно это как-то все.

    ЗЫ Может кто-то прислать сильно новый модуль dialogs.pas на timokhov сабака gmail точка com? Спасибо!
  • Игорь Шевченко © (05.06.17 21:57) [3]

    > Может кто-то прислать сильно новый модуль dialogs.pas


    Там то же самое
  • Тимохов Дима © (05.06.17 22:05) [4]

    > Игорь Шевченко ©   (05.06.17 21:57) [3]
    > > Может кто-то прислать сильно новый модуль dialogs.pas
    > Там то же самое


    Игорь, спасибо!

    Вообще грязноватый код.
    Такое ощущение, что много раз дописывали разные люди.
    В общем, остановлюсь на том, что кто-то правил фичу с пустым текстом (тогда форма очень широкая получается) и заменил Length(Msg) на Length(Msg)+1. Вроде как работает ну и ладно.
 
Конференция "WinAPI" » Вопрос по использованию DrawText
Есть новые Нет новых   [134427   +34][b:0][p:0.001]