Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Некорректная работа DrawTextEx


Автор: Alix 4.5.2005, 18:09
Вывожу текст в ListBox'e со стилем lbOwnerDrawVariable. В таком случае при отрисовке возникает два события: определение высоты элементов и собственно отрисовка...
Я храню в листбоксе многострочный текст. Нужно выводить его в прямоугольнике с переносом по словам, чтобы были и переносы строк и если не влезает в ширину, то строки переносятся... Все получается, только в некоторых случаях определение размера происходит неверно.
Такое бывает тогда, когда последняя строка очень небольшая в ширину, например, как на картинке (http://zavalenka.narod.ru/bugs.PNG на сам сайт не ходите smile).
Определение размеров происходит так:
Код
 DrawTextEx(listbox1.canvas.Handle,
                              PAnsiChar(<string here>), <length of string>,
                              rect, DT_CALCRECT    or DT_WORDBREAK or DT_NOCLIP
                              or DT_Left, nil));
//rect - это прямоугольник с нужной мне шириной.
//ф-я возвращает нужную высоту

Как можно обойти эту проблему?

Автор: Alix 4.5.2005, 18:18
Решил вставить картинку, чтобы не пришлось переходить по ссылке...
http://zavalenka.narod.ru/bugs.PNG

Автор: Alix 5.5.2005, 17:25
Все... можете закрывать тему... Я разобрался smile))) 

appended: 29.10.2008
Почему-то не описал в чем проблема, а вдруг кому пригодится. А проблема была в том, что DT_CALCRECT не может сделать высоту прямоугольника выше 255 пикселей. И если больше, то там происходило или переполнение, или высота оставалась 255.

Автор: In0stRAnez 2.12.2010, 22:34
Код

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
arect : Trect;
begin
arect := Rect(123,1,2,123)   ;
 s := 'Hello world! Hello world! Hello world! Hello world!';
 DrawText(ListBox1.Canvas.Handle,PChar(s),length(s),aRect,DT_WORDBREAK);
end;



нифига не пашет

как быть?  что не правильно делаю?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)