Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.22;
Скачать: CL | DM;

Вниз

Не рисует DrawTextEx   Найти похожие ветки 

 
TStas ©   (2008-09-27 15:56) [0]

procedure TForm1.FormPaint(Sender: TObject);
Const
 INDENT = 2;
var
 Rect1, Rect2: TRect;
 y, x, x1: Integer;
 DTParams: PDrawTextParams;
 dwDTFormat: UINT;
 S: String;
begin
 x := 50;
 y := 50;
 //x1 := ClientWidth - INDENT;
 x1 := 200;
 Rect1 := Rect(x, INDENT, x1, y);
 Rect2 := Rect(INDENT, y, x1, ClientHeight - INDENT);

 dwDTFormat := DT_WORDBREAK + DT_CHARSTREAM;

 New(DTParams);
 DTParams.cbSize := 1000;
 DTParams.iTabLength := 0;
 DTParams.iLeftMargin := 5;
 DTParams.iRightMargin := 5;
 DTParams.uiLengthDrawn := 100;

 With Canvas do
   Begin
   Rectangle(Rect1);
   Rectangle(Rect2);
   {
   DrawText(Canvas.Handle, PChar(LONG_STR), Length(LONG_STR), Rect1,
     dwDTFormat);
   }
   DrawTextEx(Canvas.Handle, PChar(LONG_STR), Length(LONG_STR), Rect1,
     dwDTFormat, DTParams);
   end;

 x := DTParams.uiLengthDrawn;
 ShowMessage("x = "+IntToStr(x));// вывод переменной x
 Dispose(DTParams);
end;
Мне нужно, чтобы нарисовался текст, и посчиталось, сколько символов вывелось, чтобы вывести оставшиеся в другом прямоугольнике. Если выводить через DrawText, то всё чудесно выводится, а через DrawTextEx - не выводится. :(
Всё делаю точно, как в статье написано.


 
TStas ©   (2008-09-27 16:46) [1]

Я нашёл ответ. Нужно было в структуре указать размер в байтах её же самой(!!! Уму не растяжимо!)
 DTParams.cbSize := 20;
 DTParams.iTabLength := 10;
 DTParams.iLeftMargin := 5;
 DTParams.iRightMargin := 5;
 DTParams.uiLengthDrawn := 0;

И всё стало работать


 
KSergey ©   (2008-09-29 11:46) [2]

> TStas ©   (27.09.08 16:46) [1]
> Я нашёл ответ. Нужно было в структуре указать размер в байтах её же самой(!!! Уму не растяжимо!)

http://msdn.microsoft.com/en-us/library/ms534012(VS.85).aspx
"cbSize
Specifies the structure size, in bytes. "

Не понятно зачем ум растягивать, если есть явное описание.

А размер MS просит прописывать правильно: если размер чего передано не совпадает с чего ожидалось - значит структура не та (не той версии) и т.п.
Понятно, это не "защита" от злонамерений, но защита от того, что на ОС, где прогу запустят, может быть другая (возмжно боле новая) версия данной функции API.


 
Dmitry S ©   (2008-10-02 15:34) [3]


>  DTParams.cbSize := 20;

Лучше так пиши
DTParams.cbSize := SizeOf(DTParams);



Страницы: 1 вся ветка

Текущий архив: 2009.11.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
2-1254184080
Drowsy
2009-09-29 04:28
2009.11.22
Странно работает TOpenDialog ..


2-1255147550
NGPOL
2009-10-10 08:05
2009.11.22
Виснет прога во время ExecSQL


1-1225211215
leonidus
2008-10-28 19:26
2009.11.22
Кодирование кириллицы для использования в URL


2-1254990514
Маркабес
2009-10-08 12:28
2009.11.22
where fld <> --- Что это ?


1-1225795558
harisma
2008-11-04 13:45
2009.11.22
Как реализовать?