-
Коллеги, приветствую! 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] > > почему написано > а ты налей и отойди > и проверь на нил-строке
Не смотря на твою краткость, я понял, что ты говоришь.
Действительно, если написать Length(Msg), то для пустой строки DrawText не уменьшает TextRect. Это есть. Добавляя +1 к Length(Msg) разрабы говорят, что есть минимум один символ. Тогда DrawText уменьшает TextRect. При этом, правда, из недостатков - добавляет пространство справа на 1 символ и заложенные отступы в mcHorzMargin (а это ровно 2 символа) работают не верно (видно в случае однострочного текста). Это я понял.
Но почему бы -1 не написать? Работает также верно.
Плюс к этому, нигде в доке по DrawText не сказано, что можно передавать в nCount буфер, больший, чем строка.
Мутно это как-то все.
ЗЫ Может кто-то прислать сильно новый модуль dialogs.pas на timokhov сабака gmail точка com? Спасибо!
-
> Может кто-то прислать сильно новый модуль dialogs.pas
Там то же самое
-
> Игорь Шевченко © (05.06.17 21:57) [3] > > Может кто-то прислать сильно новый модуль dialogs.pas > Там то же самое
Игорь, спасибо!
Вообще грязноватый код. Такое ощущение, что много раз дописывали разные люди. В общем, остановлюсь на том, что кто-то правил фичу с пустым текстом (тогда форма очень широкая получается) и заменил Length(Msg) на Length(Msg)+1. Вроде как работает ну и ладно.
|