delphi4arab منتديات دلفي للعرب

نسخة كاملة : سؤال: كيف يتم حساب الطول والعرض لنص سيتم رسمه ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله ويركاتة

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

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

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

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

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

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

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

يبدو اني وجدت نصف الحل وهو من خلال إستعمال دالة 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 لكن لا اعرف ماذا يجب ان يحتوي أي هاندل يريد لم يتم ذكر ذالك .
السلام عليكم ورحمة الله وبركاتة

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

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