Я пытаюсь понять и правильно использовать windows API DrawTextEx, в DelphiXE8 в Windows 10 Pro. Моя цель - нарисовать многострочный текст на холсте внутри прямоугольника, обрезанного или не обрезанного по необходимости. Я предоставляю прямоугольник, и текст рисуется и обрезается, но кажется, что он неправильно реагирует на прямоугольник.
здесь есть функция
function MDrawPhraseEX(MyCanvas: TCanvas; MyString: String; MyRect: TRect; MyDrawText: Boolean): Integer;
var
MyPhraseRect: TRect;
MyClipRect: TRect;
MyTextHeight: Integer;
const
cLeftPhraseMargin = 0;
cWidth = 700; // width of column.
cRightPhrasemargin = 0;
cTab = 50;
begin
try
MyCanvas.Rectangle(MyRect);
//MyCanvas.TextRect(MyRect, MyString, [tfWordBreak, tfEndEllipsis] );
//MyCanvas.FrameRect(MyRect);
WinAPI.Windows.DrawText(MyCanvas.Handle, PChar(MyString), Length(MyString), MyRect, DT_WORDBREAK {OR DT_EXTERNALLEADING} {OR DT_NOCLIP});
//DrawText(MyCanvas.Handle, PChar(MyString), Length(MyString), MyPhraseRect, DT_WORDBREAK);
result := MyRect.Height;
except
//Log('****Exception: MDrawPhrase');
end;
end;
Поэтому я рисую прямоугольник на холст, чтобы показать прямоугольник, переданный функции. когда я раскомментирую DT_NOCLIPPING, печатается вся фраза. Когда я удаляю DT_NOCLIPPING, фраза обрезается, но неправильно реагирует на прямоугольник.
Вот скриншот, вырезанный и не вырезанный.
Есть мысли?