Форум: "WinAPI";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
ВнизНе рисует 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c