PDA

View Full Version : سوال: آیا راهی برای تعیین ارتفاع سطر در Memo هست؟



mbshareat
جمعه 02 آبان 1404, 19:47 عصر
سلام
باز هم یه سوال عجیب دیگه!
من با متون عربی اعراب دار کار می کنم گاهی اعرابها دیده نمیشند. مثلا یتفیأُ در بعضی قلم بدون نمایش ضمه روی ـأ دیده میشه.
در لیست باکس میشه با ItemHeight و به عهده گرفتن نوشتن متن با برنامه خودمون از کمی پایین تر، مشکل رو حل کرد. آیا برای TMemo هم راهی هست؟

Valadi
پنج شنبه 08 آبان 1404, 18:59 عصر
function CountMemoLineHeights(Memo: TMemo): Integer;
var
DC: HDC;
SaveFont: HFont;
Size: TSize;
I: Integer;

begin
DC:= GetDC(Memo.Handle);
SaveFont:= SelectObject(DC, Memo.Font.Handle);
Size.cX := 0;
Size.cY := 0;
// I have not noticed difference in actual line heights for TMemo,
// so the next line should work OK
Windows.GetTextExtentPoint32(DC, 'W', 1, Size);
// BTW next (commented) line returns Size.cY = 0 for empty line (Memo.Lines[I] = '')
// Windows.GetTextExtentPoint32(DC, Memo.Lines[I], Length(Memo.Lines[I]), Size);
Result:= Memo.Lines.Count * Size.cY;
SelectObject(DC, SaveFont);
ReleaseDC(Memo.Handle, DC);
end;