Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Вопрос по использованию DrawText


Тимохов Дима ©   (05.06.17 19:48

Коллеги, приветствую!

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. Вроде как работает ну и ладно.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо