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

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

عند اضافة نصوص الى الاداة كومبوبكس مثلا تكون مثل :

طابعة ليزرية - 1500 دينار
معالج سيلرون 3000 - 800 دينار
محول كهرباء - 150 دينار

فكما تلاحظون كل جملة لها طول مختلف وغير متساوية
المطلوب جعلها بشكل متساوي مثل

طابعة ليزرية             -  1500 دينار
معالج سيلرون 3000    -  800   دينار
محول كهرباء             -  150  دينار


طبعا وجدت حل وكان طويل نوعا ما وهو بحساب طول الكلمات واضافة فراغات بحسب المسافة المطلوبة ولكني اذكر ان هناك دالة تقوم بذلك
اسمها على ما اعتقد Lcrlf او SpaceCtrl او شئ كهذا 
والشيخ قوقل يرفظ ان يعطي اي نتيجة
(16-01-2022, 09:09 PM)Delphi4Us كتب : [ -> ]السلام عليكم

عند اضافة نصوص الى الاداة كومبوبكس مثلا تكون مثل :

طابعة ليزرية - 1500 دينار
معالج سيلرون 3000 - 800 دينار
محول كهرباء - 150 دينار

فكما تلاحظون كل جملة لها طول مختلف وغير متساوية
المطلوب جعلها بشكل متساوي مثل

طابعة ليزرية             -  1500 دينار
معالج سيلرون 3000    -  800   دينار
محول كهرباء             -  150  دينار


طبعا وجدت حل وكان طويل نوعا ما وهو بحساب طول الكلمات واضافة فراغات بحسب المسافة المطلوبة ولكني اذكر ان هناك دالة تقوم بذلك
اسمها على ما اعتقد Lcrlf او SpaceCtrl او شئ كهذا 
والشيخ قوقل يرفظ ان يعطي اي نتيجة
السلا عليكم
جرب هذا لعله ينفع
كود :
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with (Control as TComboBox) do begin Canvas.FillRect(Rect); SetTextAlign(Canvas.Handle, TA_RIGHT); Canvas.TextOut(Rect.Right - 4, Rect.Top, Items[Index]); end; end;
TA_RIGHT
TA_LEFT
TA_TOP  الخ
وفقكم الله
لا انه لا يعمل
وعلى العموم هذا ينفع في حالة مثلا اذا كانت الاداة لا تدعم الكتابة من اليمين لليسار
المشكلة ليست في تغيير موضع الكتابة وانما فصل السعر عن الصنف بفراغات متساوية
- بواسطة الدلفي أستعمل StringOfChar

مثال

كود :
edit1.Text := StringOfChar('0',18-length('11111'))

- بواسطة SQL لـ   Firebird  أنا أستعمل   RPAD

[صورة: 234557631.png]

مثال من برنامج
[صورة: 766159373.png]

الكود مثال من أحد برامجي

كود :
    with DataModule1.FDQuery1 do begin             sql.clear;             sql.add('select  ID_CLIENT,  ');             sql.add('RPAD(F_Name || '' '' || L_Name ,45, '' '')  ||  COMPTE  as Name_COMPTE');             sql.add(' from  "TABLE06_CLIENT" ');             sql.add(' where  PR = ''y'' ');             sql.add('Order by  F_Name');             Open ;     end;


يوجد أيضا lpad  لكن النتيجة على اليسار ، نفرق بينهما من حرف الاول L و R  معروفة للكل


أو حمل firebird-30-language-reference.pdf  الصفحة 424 و 432

كود :
https://firebirdsql.org/file/documentation/pdf/en/refdocs/fblangref30/firebird-30-language-reference.pdf
السلام عليكم

او باستخدام الدالة Format
شكرا على هذه المعلومة

ولكن يبدو ان المشكلة اكبر من هذا فنحن العرب حياتنا معقدة اكثر من الغرب في كل شئ .
الدالة StringOfChar جيدة تذكرني بواحدة اسمها Space(Number) لا اعرف هل هي في الدلفي ام لا .
مشكلة لغتنا ان حروفنا غير متساوية العرض فكما بالشكال التالي 

[صورة: attachment.php?aid=4588]

نلاحظ ان الحرف س اعرض من الحرف ر
ولو استخدمنا المسافات فلن تكون النتيجة متساوية 
حتى في الانجليزية هناك فارق بسيط كما بتعبئة الاداة الى اليسار بعلامة -
ولكن عند التعبئة بي 0 كما بناحية اليمين كانت النتيجة متساوية ولكن لو ازلنا الحرف A وكتبنا جمل حتى بالانجليزية سيظهر السعر احيانا متقدم واحيانا متأخر
ولهذا سوف احاول مع قاعدة البيانات 
او استخدام الدالة TextWidth فهي تعود بعرض الجملة مهما كانت الحروف مختلفة
أخ Delphi4Us أين تريد إظهار النص؟ إذا كان ذلك في التقرير فالفاستريبورت يساعدك على تنسيق الكتابة, أما في الأماكن الأخرى كTLabel والمكونات المرئية فالحل في رأيي هو أن تعزل الكلمات, فقط في سبيل المثال, عندك 3 TLabel واحدة لاسم المنتج وطولها ثابت أكبر من اسم المنتج, وبعدها في مكان ثابت آخر TLabel للفاصلة "-" ثم الأخيرة للسعر وتأكد أن طول كل واحدة ثابت وبمكان ثابت.
اخ سفيان انا استخدم الامر For لتعبئة الاداة المنسدلة كما بالشكل التالي

[صورة: attachment.php?aid=4590]

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