delphi4arab منتديات دلفي للعرب
سؤال في Tchecklistbox - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : متتديات باسكال Pascal (https://delphi4arab.net/forum/forumdisplay.php?fid=7)
+--- قسم : Lazarus - Free Pascal - CrossKylix - Kylix - CrossVCL (https://delphi4arab.net/forum/forumdisplay.php?fid=34)
+--- الموضوع : سؤال في Tchecklistbox (/showthread.php?tid=2234)



سؤال في Tchecklistbox - a.atalla - 26-07-2010

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

في برنامج أهلا فيدورا أردت أضافة أيقونات الي قائمة تثبيت البرامج (استخدم Tchecklistbox)
لكني فوجئت بأن ذلك غير ممكن الا عن طريق تخصيصه ownerdraw checklistbox وانا لا اعرف كيف افعل ذلك



لذا استخدمت TlistView ووضعت الايقونات

[صورة: moJGT.png]

ولكني لم أجد الـ Event اللذ استخدمته للـ TcheckListBox وهو

OnItemClick
بحثت قليلا فوجدت ListViewChange ولكنه للأسف يعمل عند تغيير selected او checked لاي من العناصر في listview


فهل منكم من عنده حل لهذه المعضلة Sad


سؤال في Tchecklistbox - shagrouni - 26-07-2010

وعليكم السلام

بالنسبة ل TTreeView يمكن استغلال الحدث OnMouseDown للحصول على بند الشجرة مثل التالي:

كود :
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Node: TTreeNode; begin Node := TTreeView(Sender).GetNodeAt(X, Y); end;

بالنسبة ل TListView يمكم مراجعة الكود في الرابط التالي ومرفق ايضا:
كود :
http://www.shagrouni.com/english/software/xlist.html

بالتوفيق.


سؤال في Tchecklistbox - a.atalla - 27-07-2010

هنا حل رائع ليجعل TListView يرفع حدث (raise an event) عند تغير حالة الـ Checkbox لكني فشلت في تطبيقه علي لازاروس

كود :
http://delphi.about.com/od/delphitips2007/qt/listviewchecked.htm

كود :
uses CommCtrl; procedure TForm1.FormCreate(Sender: TObject) ; begin OriginalListViewWindowProc := ListView1.WindowProc; ListView1.WindowProc := ListViewWindowProcEx; end; procedure TForm1.ListViewWindowProcEx(var Message: TMessage) ; var listItem : TListItem; begin if Message.Msg = CN_NOTIFY then begin if PNMHdr(Message.LParam)^.Code = LVN_ITEMCHANGED then begin with PNMListView(Message.LParam)^ do begin if (uChanged and LVIF_STATE) <> 0 then begin if ((uNewState and LVIS_STATEIMAGEMASK) shr 12) <> ((uOldState and LVIS_STATEIMAGEMASK) shr 12) then begin listItem := listView1.Items[iItem]; memo1.Lines.Add(Format('%s checked:%s', [listItem.Caption, BoolToStr(listItem.Checked, True)])) ; end; end; end; end; end; //original ListView message handling OriginalListViewWindowProc(Message) ; end; procedure TForm1.GetCheckedButtonClick(Sender: TObject) ; var li : TListItem; begin memo1.Lines.Clear; memo1.Lines.Add('Checked Items:') ; for li in listView1.Items do begin if li.Checked then begin memo1.Lines.Add(Format('%s %s %s', [li.Caption, li.SubItems[0], li.SubItems[1]])) ; end; end; end;

الخطأ هو
كود :
unit1.pas(17,57) Error: Identifier not found "TMessage"



سؤال في Tchecklistbox - shagrouni - 27-07-2010

ربما الوحدة Messages ليست مدرجة في قسم uses

ملاحظة:
آسف، لم أنتبه في مشاركتي السابقة و خلطت بين TlistView و TTreeView.


سؤال في Tchecklistbox - a.atalla - 27-07-2010

معك حق تجاوزت هذا الخطأ باضافة الوحدة messages لاصطدم بالكثير من الاخطاء الاخري

هل من فكرة أخري أكثر جمالا لقائمة تثبيت التطبيقات هذه

هذه الواجهة الجديدة للبرنامج -أكثر جمالا Smile -

[صورة: QTsL2.png]
أرغب في تحسين شكل هذه القائمة من checkboxes هل من أفكار ؟؟