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

نسخة كاملة : كيف تلوين القيم المكررة في DBGrid ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
هل يوجد كود يمكن تلوين الخلايا المكررة في dbgrid    أو مكون يقوم بالمهمة
تلوين DBGrid بطريقة جميلة
https://delphi4arab.net/forum/showthread.php?tid=654
أقصد لوين الخلايا المكررة في dbgrid

تلوين الخلايا يتم باستغلال الحدث OnDrawColumnCell
بالرابط السابق مرفق مثال +روابط متعلقة بتلوين خلايا Grid
هذا نصف الطريق، الباقي عليك... فكر.
السلام عليكم
هل يمكن عند إضافة بعض الخصائص مثل تلوين الديبي كريد هل يمكن جعلها مكون يضاف من برمجتي
أي كيف يمكنني برمجة مكون كالديبي قريد به إضافاتي الخاصة لكي لا أضطر كل مره أقوم بنفس الإجراءات
كتب تعلم كتابة الكمبوننت
https://delphi4arab.net/forum/showthread.php?tid=2255
لا توجد اجابة لتوين القيم المكررة في dbgrid
امثلة

كود :
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;   DataCol: Integer; Column: TColumn; State: TGridDrawState); var   Field: TField; begin   // store the currently rendered cell's column assigned field reference   // (if any) to the local variable (there's quite expensive getter)   Field := Column.Field;   // if the rendered cell's column has assigned a field and this field's   // name is 'Clubs' (compared without case sensitivity), then, and only   // then change the brush color...   if Assigned(Field) and SameText(Field.FieldName, 'Clubs') then   begin     if Field.AsString = 'yes' then       DBGrid1.Canvas.Brush.Color := clRed     else       DBGrid1.Canvas.Brush.Color := clYellow;   end;   DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;

او

كود :
if Column.FieldName = 'Clubs' then begin   if ADOTable1.FieldByName('Clubs').AsString = 'yes' then     DBGrid1.Canvas.Brush.Color := clRed   else     DBGrid1.Canvas.Brush.Color := clYellow; end; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

اولا اعتقد تحتاج الى البحث بالجدول عن القيم المكررة ولنفرض انك حصلت على كلمات مثل (سيارة، منزل ، سوق )

بعدها مكان الحقل بالاسم Clubs ستقول له ان كان يساوي سيارة او منزل او سوق فاجعل اللون كذا .


اما مكون يدعم ذلك المكون EhLib يقوم بشي مماثل فقط انه يدمج الاعمدة للقيم المكررة ولا اعرف بالنسبة لتلوينها
ممكن كود في dbgrid لتلوين القيم المكررة   الأسماء مثلا 
هذا مثال على السريع جربه


كود :
if (Column.Field.FieldName='name') and (Fname = Column.Field.Value) then begin DBGrid1.Canvas.Brush.Color := clRed ; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end else begin   DBGrid1.Canvas.Brush.Color := clWhite ; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; if (Column.Field.FieldName='name') then Fname:=Column.Field.Value;

الفكرة على السريع تحتاج منك ان تقوم بترتيب الاسماء ابجديا بحيث تصبح المتكررة وراء بعضها
بعدها في حدث الرسم تقوم بمقارنة القيمة الجديدة بالقيمة السابقة
لاحظ اقول السابقة لان المتغير الذي نضع فيه الاسم بنهاية الكود مما يجعل قيمته دائما هي القيمة السابقة 
فلو كانت متطابقة للقيمة الجديدة بالسطر الجديد يجعل لونه بالاحمر

يحتاج منك الى القليل من الضبط والاهتمام

ولو انني لا افضل هذا الاسلوب واظهار القيم المكررة بواسطة استعلام 

[attachment=4655]
الصفحات : 1 2