سؤال: كيف يتم حساب الطول والعرض لنص سيتم رسمه ؟
#1
السلام عليكم ورحمة الله ويركاتة

كيف أقوم بحساب الطول والعرض خاصة بنص متغير , عندما اعلم عدد الاحرف الموجودةفي النص وكذلك حجم الخط(حجم النص) ؟

ما استنتجته هو
اني استطيع بحساب العرض من خلال عمليات اجرية على المعطيين السابقين وهما عدد الاحرف وكذلك حجم الخط
اما الطول فهو واضح وهو حجم الخط , إن لم أكن مخطئ .

الهدف هو أني اعمل على كلاس يقوم برسم صندوق على شكل رسالة و عندما اكتب نص ان يتم إعادة ضبط حجم الصندوق
على حسب النص المكتوب ليتناسب حجم الصندوق مع النص .

بمعنى آخر أريـد أن اعمل AutoSize لصندوق الرسالة Big Grin

هذه شكل الرسالة للتوضيح :
[صورة: attachment.php?attachmentid=4694&stc=1&d=1426516997]

فكما تلاحظون الصندوق كبير بينما النص الموجود لا يحتاج هذا الحجم للصندوق , وكما قلت النص متغير

فهل من معادلة او دالة تحسب العرض والطول الخاص بالنص عندما يكون عدد حروف النص وحجمه معلوم أم ﻻ ؟


الملفات المرفقة
.png   tfifo.png (الحجم : 8.29 ك ب / التحميلات : 28)
الرد
#2
السلام علييكم ورحمة الله وبركاتة

يبدو اني وجدت نصف الحل وهو من خلال إستعمال دالة DrawText مع تمرير متغير من نوع TRect وهو بدورة يقوم بحساب الطول والعرض
لكن يبو اني لا اعرف الطريقة السليمة لإستعمال DrawText .

هذه هي بيانات الدالة :
PHP كود :
TWidgetSet.DrawText

Draws formatted text within a rectangle
.

Declaration

publick 
function TWidgetSet.DrawText ( 
DC : HDC;
Str : PChar;
Count : Integer;
var 
Rect : TRect;
Flags : Card
): Integer; virtual;

Arguments

Str             The text 
(Should be zero terminated).
Count             The number of (Wide)Chars in the text
Rect             The bounding 
(clipping) rectangle
Flags             Various flags

Function result

The height of the drawn text
, from Rect.Top to the bottom of the text. Zero on failure.

Description

Several formatting options are available 
(DT_WORDBREAK...).

DT_CALCRECT suppresses all painting, instead the extent of the formatted text is
returned in the Rect parameter
. 

أنا أعمل على لازارس وأعتقد ان الدالة موجودة في إصدارات دلفي بنفس البارمتراس ... ما ينقصني هو البارمتر DC
هو عبارة عن THandle لكن لا اعرف ماذا يجب ان يحتوي أي هاندل يريد لم يتم ذكر ذالك .
الرد
#3
السلام عليكم ورحمة الله وبركاتة

يبدو ان الحل كأن ابسط مما توقعت
وهو من خلال إستعمال دالة TextExtent والتي تعطيك الطول والعرض بمجرد تمرير النص الذي تريده :eek:Big Grin
PHP كود :
TSize := TBitmap.Canvas.TextExtent('النص المراد حساب طوله وعرضه'); 

على من يأتي بعدي يستفيد
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم