View Full Version : سوال: آیا راهی برای تعیین ارتفاع سطر در Memo هست؟
mbshareat
جمعه 02 آبان 1404, 18:47 عصر
سلام
باز هم یه سوال عجیب دیگه!
من با متون عربی اعراب دار کار می کنم گاهی اعرابها دیده نمیشند. مثلا یتفیأُ در بعضی قلم بدون نمایش ضمه روی ـأ دیده میشه.
در لیست باکس میشه با ItemHeight و به عهده گرفتن نوشتن متن با برنامه خودمون از کمی پایین تر، مشکل رو حل کرد. آیا برای TMemo هم راهی هست؟
Valadi
پنج شنبه 08 آبان 1404, 17: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;
mbshareat
چهارشنبه 05 آذر 1404, 14:35 عصر
فکر می کنم جواب بی ربط باشه. من نمیخوام تعداد سطرها رو بشمارم. میخوام ارتفاه سطر رو تنظیم کنم
هیچ پارامتری برای تعیین ارتفاع در این پروسیجر نمی بینم
دلفــي
چهارشنبه 26 آذر 1404, 08:59 صبح
سلام
باز هم یه سوال عجیب دیگه!
من با متون عربی اعراب دار کار می کنم گاهی اعرابها دیده نمیشند. مثلا یتفیأُ در بعضی قلم بدون نمایش ضمه روی ـأ دیده میشه.
در لیست باکس میشه با ItemHeight و به عهده گرفتن نوشتن متن با برنامه خودمون از کمی پایین تر، مشکل رو حل کرد. آیا برای TMemo هم راهی هست؟
TMemo در VCL بهصورت ذاتی امکان Owner Draw یا کنترل دقیق محل رسم متن را ندارد؛ بنابراین راهحلی مشابه ListBox (با ItemHeight و رسم دستی) برای Memo وجود نداره برای همین اگر امکان جایگزینی Memo را دارید، از TRichEdit استفاده کنید.
vBulletin® v4.2.5, Copyright ©2000-1405, Jelsoft Enterprises Ltd.