الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية عرض الرقم وامامه الأسم العربي وتحته الأجنبي لقطعه فيdbgrid

بدأه shalwan في 3 فبراير 2010 · 25 رد · 3,503 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي ملف مخزون به الرقم والإسم وموصفات اخرى

رغبتي عند عرض القطع على الشاشه بإستخدام الديبيقرد dbgrid ان يكون عرض الإسم العربي والأجنبي تحت بعض كالتالي

تسلسل الرقم اسمـــــــــه سعره

01 123 قاموس انجليزي عربي 120$

dictionary english / arabic

02 ,,,,,,وهكذا

تم تعديل هذه المشاركة بواسطة shalwan في 3 فبراير 2010 في 16:51

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#2

سألت ولا اجابه

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#3

اخي لم افهم سؤالك هل تريد عرض صفين من البيانات في خلية واحدة داخل القريد ؟؟

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

إن تخطئ فأنت إنسان ... أما أن تلوم جهازك الكمبيوتر على خطأك فهذا أكثر إنسانية.

#4
prof_1982 كتب:

اخي لم افهم سؤالك هل تريد عرض صفين من البيانات في خلية واحدة داخل القريد ؟؟

اخي بروف نعم هذا ما اريده

اي ان لدي صنف له اسمين ابي اسمه الأجنبي تحت الرئيسي بخليه وحده علما بأنه في حقلين مختلفين بالملف

تم تعديل هذه المشاركة بواسطة shalwan في 12 مايو 2010 في 22:17

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#5

السلام عليكم

أخي الكريم

يمكنك ذلك من خلال التالي

1. عير خاصية Dbgrid /DefaultDrawing الى False

2. قم ببرمجة الحدث

OnDrawColumnCell لــ Dbgrid

حبث ياتي هذا الحدث بالمتغيرات التالية

Sender: TObject; // المرسل وهو الشيكة Dbgrid

const Rect: TRect; //الخلبة او المربع المراد رسمه

DataCol: Integer; // رقم الخانة المراد رسمها افقيا

Column: TColumn; //

State: TGridDrawState// حالة الخانة

var
  Text1, Text2: string;
begin
  if DataCol = 0 then //الخلية الأولى 
  begin
    DBGrid1.Brush.Color := Clwhite; // خلفية بيضاء
    Canvas.FillRect(Rect); // ملئ الخلفية
    Text1 :=
      Dbgrid1.DataSource.DataSet.fieldbyname('field1').asstring;
    Text2 :=
      Dbgrid1.DataSource.DataSet.fieldbyname('field2').asstring;
    //كتابة على السطر الأول
    Dbgrid1.Canvas.TextRect(Rect, Rect.Left + 10, Rect.Top, Text1);
    // كتابة على السطر الثاني
    Dbgrid1.Canvas.TextRect(Rect, Rect.Left + 10, Rect.Top + 17,Text2)
  end
  else
    Dbgrid1.DefaultDrawColumnCell(rect, DataCol, Column, State);
end;

للتحكم في ارتفاع سطر Dbgrid استعمل الامر

TStringGrid(DBGrid1).DefaultRowHeight:=40

اثناء FormCreation

#6
KhelifaAdm كتب:

السلام عليكم

للتحكم في ارتفاع سطر Dbgrid استعمل الامر

TStringGrid(DBGrid1).DefaultRowHeight:=40

اثناء FormCreation

السلام عليكم ورحمة الله

اخي خليفه

استفدت منك ردك ولك الشكر لكن بقي لي جزيء لم تكتمل بشكل جيد وهي ارتفاع السطر طبقت ما وردني منك في formcreation لكن يحدث مايلي

01 قبل فتح قاعدة البيانات يكبر ارتفاع السطر والعنوان (العنوان لا اريده ان يكبر)

02 بعد فتح قاعدة البيانات يظهر الإسمان في الخليه لكن ارتفاع السطر يعود الى السابق صغير ولا تقرا الخليه المطلوبه اما باقي الخلايا فواضحه

ارجوا ان تحاول تجربته لتتأكد من ذلك ولك الشكر(انتظر ردك)

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#7

السلام عليكم

post-169518-12755899462569_thumb.png

01 لتتحكم في ارتفاع سطر معين استعمل

TStringGrid(DBGrid1).RowHeights[رقم السطر]

02 بعد فتح او غلق المعطيات يتم احتساب ارتفاع الخلايا داخليا في المكون dbgrid وبالتالي الأمر الذي استعملته يلغى..لحل المشكل قم باعادة فرض القيمة المرادة

 TStringGrid(DBGrid1).DefaultRowHeight := ارتفاع الأسطر الاقتراضي;
  TStringGrid(DBGrid1).RowHeights[0] := ارتفاع السطر الأول;

مثال مرفق

ArabTeam.rar

تم تعديل هذه المشاركة بواسطة KhelifaAdm في 3 يونيو 2010 في 21:33

#8

شكرا اخي خليفه

KhelifaAdm كتب:

01 لتتحكم في ارتفاع سطر معين استعمل

TStringGrid(DBGrid1).RowHeights[رقم السطر]

02 بعد فتح او غلق المعطيات يتم احتساب ارتفاع الخلايا داخليا في المكون dbgrid وبالتالي الأمر الذي استعملته يلغى..لحل المشكل قم باعادة فرض القيمة المرادة

 TStringGrid(DBGrid1).DefaultRowHeight := ارتفاع الأسطر الاقتراضي;
  TStringGrid(DBGrid1).RowHeights[0] := ارتفاع السطر الأول;

مثال مرفق

سأحاول تطبيقه عندي علما بان اللغه هي دولفي6 وسأعود اليك بالنتائج التي وصلت اليها

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#9

حاولت تطبيق البرنامج ولكن اظهر لي text2 اما text1 فلم نظهر

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#10

السلام عليكم

لم يظهر النص الثاني لان الامر

Dbgrid1.Canvas.TextRect(Rect, Rect.Left + 10, Rect.Top + 17,Text2)

يقوم بالكتابة في كامل Rect وبالتالي يمحو النض الاول

قم بازاحة rect الى الاسفل مثلا

TextRect := Rect;
OffsetRect(TextRect, 0, 17);
ازاحة الى الاسفل بمقدار 17

IntersectRect(TextRect, rect, TextRect);
مقاطعة TextRect مع rect الاصلي حتى لايتم الخروج من الحيز

 Dbgrid1.Canvas.TextRect(TextRect, Rect.Left + 10, Rect.Top + 17, Text2)

ملاحظة

المرفق السابق دلفي 7

#11
KhelifaAdm كتب:

السلام عليكم

لم يظهر النص الثاني لان الامر

Dbgrid1.Canvas.TextRect(Rect, Rect.Left + 10, Rect.Top + 17,Text2)

يقوم بالكتابة في كامل Rect وبالتالي يمحو النض الاول

قم بازاحة rect الى الاسفل مثلا

TextRect := Rect;
OffsetRect(TextRect, 0, 17);
ازاحة الى الاسفل بمقدار 17

IntersectRect(TextRect, rect, TextRect);
مقاطعة TextRect مع rect الاصلي حتى لايتم الخروج من الحيز

 Dbgrid1.Canvas.TextRect(TextRect, Rect.Left + 10, Rect.Top + 17, Text2)

ملاحظة

المرفق السابق دلفي 7

اشكرك على تفاعلك ووسع بالك علينا

هذه الجمله لأزاحة السطر كيف اركبها

لأني وضعتها كما هي بعد text1 ولكن لم يتعرف عليها البرنامج

ارجوا اعادة كتبة المرفق بأضافة معلومتك الجديده ولك مني الشكر

TextRect := Rect;

OffsetRect(TextRect, 0, 17);

IntersectRect(TextRect, rect, TextRect);

تم تعديل هذه المشاركة بواسطة shalwan في 5 يونيو 2010 في 22:40

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#12

السلام عليكم

العقو أخي ومرحبا بك

يالفعل المرفق تجد فيه الاجراء DBGrid1DrawColumnCell الصحيح

والخطأ ورد في الشرح لأني ركزن غلى شرح الفكرة ولبس تفصبل الاجراء .

الدالة OffsetRect تقوم بازاحة TRect عموديا أو أفقيا ..وهو اجراء تابع لwindows Api

OffsetRect(TextRect, Dx, Dy);

أما الدالة IntersectRect تقوم بمقاطعة متغيرين من النوع TRect وترجع الناتج

يمكنك استبدال الاوامر التالية

TextRect := Rect;
OffsetRect(TextRect, 0, 17);
IntersectRect(TextRect, rect, TextRect);

بــ

TextRect := Rect;
Rect.Top:=Rect.Top+17;

ملاحظة

يمكنك الرسم غلى Dbgrid في الاجراء DrawColmnCell باستخدام Dbgrid.canvas

أو استخدام TimageList

#13

var

Text1, Text2: string;

begin

if DataCol = 1 then //?????? ??????

begin

DBGrid1.Brush.Color := Clwhite;

Canvas.FillRect(Rect);

Text1 :='PART ARABIC NAME';

Text2 :='PART ENGLISH NAME';

// Text1 := DM.mpartfq.fieldbyname('NAME') .TEXT;

// Text2 := DM.mpartfq.fieldbyname('NAME1').TEXT;

Dbgrid1.Canvas.TextRect(Rect, Rect.Left + 10, Rect.Top +2, Text1);

Dbgrid1.Canvas.TextRect:=rect;

Dbgrid1.Canvas.TextRect:=rect.Top+17;

Dbgrid1.Canvas.TextRect(Rect, Rect.Left + 10, Rect.Top +17, Text2)

end

else

Dbgrid1.DefaultDrawColumnCell(rect, DataCol, Column, State);

end;

حاولت نطبيقه ولكن لم يقبل فضلا اشر لي اين الخطأ

تم تعديل هذه المشاركة بواسطة shalwan في 7 يونيو 2010 في 11:43

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#14

تفضل التغييرات الواجبة في المصدر لاحظ التعليقات

var
Text1, Text2: string;
//+ Add this
TextRect:TRect;
begin
if DataCol = 1 then
begin
DBGrid1.Brush.Color := Clwhite;
Canvas.FillRect(Rect);
Text1 :='PART ARABIC NAME';
Text2 :='PART ENGLISH NAME';


Dbgrid1.Canvas.TextRect(Rect, Rect.Left + 10, Rect.Top +2, Text1);
//+ Change this code
//Dbgrid1.Canvas.TextRect:=rect;xx
//Dbgrid1.Canvas.TextRect:=rect.Top+17;xx
//Dbgrid1.Canvas.TextRect(Rect, Rect.Left + 10, Rect.Top +17, Text2)
//+ to this one

 TextRect := rect;
 TextRect.Top := rect.Top + 17;
  Dbgrid1.Canvas.TextRect(TextRect, TextRect.Left + 10, TextRect.Top , Text2);
// End Change
end
else
Dbgrid1.DefaultDrawColumnCell(rect, DataCol, Column, State);
end;

والناتج

post-169518-12759187218713_thumb.png

#15
KhelifaAdm كتب:

تفضل التغييرات الواجبة في المصدر لاحظ التعليقات

var
Text1, Text2: string;
//+ Add this
TextRect:TRect;
begin
if DataCol = 1 then
begin
DBGrid1.Brush.Color := Clwhite;
Canvas.FillRect(Rect);
Text1 :='PART ARABIC NAME';
Text2 :='PART ENGLISH NAME';


Dbgrid1.Canvas.TextRect(Rect, Rect.Left + 10, Rect.Top +2, Text1);
 TextRect := rect;
 TextRect.Top := rect.Top + 17;
  Dbgrid1.Canvas.TextRect(TextRect, TextRect.Left + 10, TextRect.Top , Text2);
end
else
Dbgrid1.DefaultDrawColumnCell(rect, DataCol, Column, State);
end;

والناتج

post-169518-12759187218713_thumb.png

اخي خليفه السلام عليكم

لقد طبقت المثال وظهرت النتائج text1 و text2 مثل النتيجه التي ظهرت عندك لكن

الأختلاف عندي في المسافه بين text1 و text2 كبيره

نتيجتك

PART ARABIC NAME

PART ENGLISH NAME

نتيجتي

PART ARABIC NAME

PART ENGLISH NAME

فكيف اعدل هذه المسافه بين التكستين ولك جزيل الشكر

تم تعديل هذه المشاركة بواسطة shalwan في 7 يونيو 2010 في 20:14

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#16

السلام عليكم

يمكنك وضع النص في أي مكان تريده من خلال الدالة

Dbgrid1.Canvas.TextRect(Rect, x, y , Text)

حيث

Rect هو متغير من النوع TRect والذي يعبر عن مستطيل

أظن ان لديك خلل في المصدر وأعتقد حسب ما تصف انه في الامر

TextRect.Top := rect.Top + 17;
Dbgrid1.Canvas.TextRect(TextRect, TextRect.Left + 10, TextRect.Top , Text2);

ربما كتبت

TextRect.Top := rect.Top + 17;
Dbgrid1.Canvas.TextRect(TextRect, TextRect.Left + 10, TextRect.Top +17, Text2);

لاحظ +17

على كل ارجع للمرفق في الرسالة السابقة.وانسخ الدالة

مرحبا بك كل وقت

تم تعديل هذه المشاركة بواسطة KhelifaAdm في 8 يونيو 2010 في 00:42

#17

اشكرك فعلا كما قلت انا اضفت مسافه (17) مع العلم بأنها اضيفت سابقا فلك الشكر على تفاعلك

ومعلوماتك القيمه وارجوا ان تبقى بهذا المنتدى بأشراقتك البهيه اسعد الله ايامك والسلام عليكم

ملاحظه هل لك بالدخول الى موضوعي التالي وهو كيف لي ان اعرف اللغه ببرنامجي حتى استطيع التبديل بين اللغات

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#18

السلام عليكم ورحمة الله تعالى وبركاته

ارجو من صاحب الموضوع ارفاق مثال بالنتيجة النهائية للموضوع

وجزاكم الله عنا كل خير

#19
medreg كتب:

السلام عليكم ورحمة الله تعالى وبركاته

ارجو من صاحب الموضوع ارفاق مثال بالنتيجة النهائية للموضوع

وجزاكم الله عنا كل خير

ابشر لكن انتظر حفظك الله

سياتيك مثال دولفي 6

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#20
shalwan كتب:

ابشر لكن انتظر حفظك الله

سياتيك مثال دولفي 6

هذا جهد الأخ خليفه آدم الذي اوصلني اليه خطوه خطوه

اليكم المثال : ملف به اسم حقلين عربي واسم اجني اسم الملف table1 طول كلا منها 60 حرف ثم اكون form fi dbgrid1 يعرض لي مابهذا الملف من الأسماء وحتى لا تأخذ علينا عرض الشاشه لذا سيتم عرضها بخانه واحده الأسم العربي وتحته الأجنبي لكل صنف او عميل

تحياتي لكم

تم تعديل هذه المشاركة بواسطة shalwan في 13 يونيو 2010 في 11:00

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#21
shalwan كتب:

هذا جهد الأخ خليفه آدم الذي اوصلني اليه خطوه خطوه

اليكم المثال : ملف به اسم حقلين عربي واسم اجني اسم الملف table1 طول كلا منها 60 حرف ثم اكون form fi dbgrid1 يعرض لي مابهذا الملف من الأسماء وحتى لا تأخذ علينا عرض الشاشه لذا سيتم عرضها بخانه واحده الأسم العربي وتحته الأجنبي لكل صنف او عميل

تحياتي لكم

السلام عليكم ورحمة الله تعالى وبركاته

لقد حملت المرفق لكن لا يظهر به سوى فورم واحدة والداتاموديل

الفورم موجود به مكون panel و button مكتوب عليها Exit

ارجو اعاد رفع مثال وليكن بقادة البيانات Paradox من فضلك

اب باستعمال Table و Datasource فقط

ختى نتمكن من فهم المرفق

لانني لم افهم من المرفق اي شيء

علما بأنني استعمل لغة الدلفي7

وجزاكم الله عنا كل خير

تم تعديل هذه المشاركة بواسطة medreg في 12 يونيو 2010 في 23:57

#22
medreg كتب:

السلام عليكم ورحمة الله تعالى وبركاته

لقد حملت المرفق لكن لا يظهر به سوى فورم واحدة والداتاموديل

الفورم موجود به مكون panel و button مكتوب عليها Exit

ارجو اعاد رفع مثال وليكن بقادة البيانات Paradox من فضلك

اب باستعمال Table و Datasource فقط

ختى نتمكن من فهم المرفق

لانني لم افهم من المرفق اي شيء

علما بأنني استعمل لغة الدلفي7

وجزاكم الله عنا كل خير

نفذ exe وستجد الشرح فيه او افتح الفورم بالدولفي 7 وستجد الطريقه واضحه

واذا قابلك اي خطا او معضله لم تعرفها اشعرني سأكون معك بإذن الله

KHALEFADMEXP2.zip

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#23
اقتباس
نفذ exe وستجد الشرح فيه او افتح الفورم بالدولفي 7 وستجد الطريقه واضحه

واذا قابلك اي خطا او معضله لم تعرفها اشعرني سأكون معك بإذن الله

السلام عليكم ورحمة الله تعالى وبركاته

وجزاكم الله عنا كل خير

لازالت المشكلة قائمة

عند تنفيذ البرنامج

يعطيني خطأ

لم استطيع تحميل صورة الخطاء بسبب ضعف الإتصال وفضلت نقل محتوى الخطأ

ها محتوى الخطأ :

(تعذر تحديد موقع المكون)-فشل بدء المكون الحالي لتعذر العثور على qtintf.dll. قديساعدك إعادة تثبيت التطبيق في حل هذه المشكلة.

حسب ظني ان بالمرفق مكون لا يوجد لدي ما هو هذا المكون وان كان هناك نسخة من المكون ارفقه لي منفضلك او اعطيني اسمه

وجزاكم الله عنا كل خير

تم تعديل هذه المشاركة بواسطة medreg في 13 يونيو 2010 في 20:49

#24
medreg كتب:

السلام عليكم ورحمة الله تعالى وبركاته

وجزاكم الله عنا كل خير

لازالت المشكلة قائمة

عند تنفيذ البرنامج

يعطيني خطأ

لم استطيع تحميل صورة الخطاء بسبب ضعف الإتصال وفضلت نقل محتوى الخطأ

ها محتوى الخطأ :

(تعذر تحديد موقع المكون)-فشل بدء المكون الحالي لتعذر العثور على qtintf.dll. قديساعدك إعادة تثبيت التطبيق في حل هذه المشكلة.

حسب ظني ان بالمرفق مكون لا يوجد لدي ما هو هذا المكون وان كان هناك نسخة من المكون ارفقه لي منفضلك او اعطيني اسمه

وجزاكم الله عنا كل خير

هذا المكون(مكتبه) ضمن الملف المضغوط (qtintf.dll) ضعه بنفس مسار الملف التنفيذي وللتأكيد سأرفقه لك

medreg.zip

تم تعديل هذه المشاركة بواسطة shalwan في 13 يونيو 2010 في 21:17

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#25

اخواني

السلام عليكم

لقد ضمنت برنامجي الحقلين فى سطر واحد لكن قابلني مشكله وهي ان الDBGRID عند العرض الاولي ارتفاعها سليم وعند محاولة الأستعلام بالأسم وتغيير الكوري او معطيات الداتا بيس يزيد ارتفاع DBGRID والاحظ ان المؤشر عند النزول الى الأسفل يختفي تحت اي ان الأرتفاع اتسع اكبر من الحقيقي لا ادري ما السبب هل من فكرة اخواني

تحياتي والسلام علبكم

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…