السلام عليكم و رحمة الله تعالى و بركاته
هل فيه إمكانية وضع تنسيق شرطي للعنصر TDBEdit .
فيتغير لون العنصر حسب القيمة الموجودة في هذه الأداة.
وعليكم السلام ورحمة الله
ستحتاج الى شئ مثل
كود :
procedure TfrmPV.edtODKeyPress(Sender: TObject; var Key: char);
begin
with Sender as TEdit do
ShowMessage('Begin');
case Key of
'0'..'9' : ShowMessage('0-9 was pressed.');
'.', ',' : ShowMessage('Period or Comma was pressed.');
#8 : ;
#13 : begin
ShowMessage('#13 was pressed.');
Panel1.SelectNext(Sender as TWinControl, True, True);
Key := #0;
end;
#10 : begin
Panel1.SelectNext(Sender as TWinControl, True, True);
Key := #0;
end;
else
Key := #0;
end;
end;
الشيفرة فقط للتوضيح ليس الا .
حيث تقتنص حدث النقر على المفتاح بجال اردت معرفة المفتاح الذي تم النقر عليه ينفع في هل المدخلات ارقام او نصوص او ماشابه
بحالتك يمكنك هنا او في حدث تغيير محتوى الاداة ONChange ان تقارن محتواها بالشرط المطلوب
بارك الله فيك أستاذنا الغالي
هذا المثال الذي وضعته أستاذنا يكون في حدث معين
في بعض الأحيان أفتح النموذج و أبدأ في تصفح السجلات بدون أن أعدل عليها
هنا أريد مثلا من كانت قيمته 1 يكون لونه أحمر و البقية بالأبيض و هكذا
كود :
If Edit1.text = '1' then
Edit1.color:=red
else
Edit1.color:=White
ببساطة في الحدث OnChange اختبر محتوى الاداة
اذا اردت ان تربط كل الادواة بحدث واحد
كود :
if (sender as Tedit).text='1' then
(sender as Tedit).color:=red
else
(sender as Tedit).color:=White;
لاحظ معي أستاذنا الكريم
أنا أستخدم المكون DBCtrlGrid لعرض حقلين أو أكثر فوق بعضهم في كل سطر
مثل مل هو موضح بالصورة التالية:
في هذه الحالة هل يمكن إضافة تنسيق شرطي لأنه عند تغيير لون مربع نص لسطر . تتغير معه جميع الأسطر
![[صورة: attachment.php?aid=4496]](https://delphi4arab.net/forum/attachment.php?aid=4496)
أسف جدا فانت لم توضح هذا من اول مرة
هذه الاداة لن تساعدك في طلبك فهي لا تحوي الكثير من الاحداث للعمل عليها واستغلالها في المطلوب
لو كانت الاداة TDBgride لكان الامر بسيط جدا ويمكن استغلال احداثها
كود :
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Table1.FieldByName('Teacher').AsString = 'Joe'
then
DBGrid1.Canvas.Brush.Color:=clRed;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
لا اعتقد ان هذا ممكن مع الاداة التي تستخدمها ولو كان ممكن سيكون عليك اللجؤ الى الكثير من الحيل البرمجية لفعل ذلك او الدخول للوحدة البرمجية الخاصة بها واضافة سطور وتعديل اخرى .
اقترح عليك ان تستخدم الاداة Tdbgride بدل منها فهذا اسهل لك
شكرا جزيلا أخي و آسف جدا على الإزعاج
Tdbgride هذه الأداة لا تمكنني من عرض السجلات بالطريقة التي أريدها مثل الصورة أعلاه.
على العموم بارك الله فيك أستاذنا الغالي و معذرة أتعبتك معي.
ولا يهمك لا تعب ولا شئ
اما بالنسبة لطريقة العرض التي تريدها ربما نجد حل لهذه المشكلة
توجد طريقة لعرض مكون ما او اي شئ بمكان اي حقل ربما يفيد فيما تبحث عنه
ولكن قبل هذا هل ينفع معك ان تجعل اداة بدل من اللون ان تكون قيمتها مثلا واحد او صفر او True او false
يمكنك اضافة اداة DBCheckBox مثلا واضافة حقل من نوع Calculate وبناء على قيمة ما تجعل الحقل True او False
اشعر ان هذا يحل لك المشكلة
(22-06-2021, 07:40 PM)Delphi4Us كتب : [ -> ]توجد طريقة لعرض مكون ما او اي شئ بمكان اي حقل ربما يفيد فيما تبحث عنه
هل يمكن عرض أكثر من مكون في مكان حقل واحد
(22-06-2021, 07:40 PM)Delphi4Us كتب : [ -> ]ولكن قبل هذا هل ينفع معك ان تجعل اداة بدل من اللون ان تكون قيمتها مثلا واحد او صفر او True او false
يمكنك اضافة اداة DBCheckBox مثلا واضافة حقل من نوع Calculate وبناء على قيمة ما تجعل الحقل True او False
إن لم تنجح الفكرة الأولى سوف أستند إلى هذه الفكرة تبدو لا بأس بها
اجل اي شئ لا ينجح معك في لغات البرمجة الاخرى اسأل عنه الدلفي
لاحظ هذا المثال
كود :
procedure TStdInfo.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var adomemo:Tdbmemo;
begin
if (column.Field.DataType=ftMemo) or (column.Field.DataType=ftFmtMemo) then
begin
adoMemo:=TdbMemo.Create(self);
try
adomemo.Parent:=stdInfo;
adomemo.DataSource:=dm.DS_change;
dbgrid1.Canvas.Font.Color:=clBlue;
dbgrid1.Canvas.FillRect(rect);
DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top,adomemo.DataSource.DataSet.FieldValues['other']);
adomemo.Free;
Except
adomemo.Free;
end;
end;
انه يضع مكون
[size=small]Memo [/size]في مكان حقل معين لان Dbgrid القياسية لا تعرض الصور او النصوص الطويلة
ماستفعله انت هو تصميم Panel بالمكونات المطلوبة او Frame وربطها بمصدر البيانات تم مكان الميمو Memo سوف تضع الـ Panel الخاص بكل
جرب لنرى