![]() |
|
سؤال في 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 ووضعت الايقونات ![]() ولكني لم أجد الـ Event اللذ استخدمته للـ TcheckListBox وهو OnItemClick بحثت قليلا فوجدت ListViewChange ولكنه للأسف يعمل عند تغيير selected او checked لاي من العناصر في listview فهل منكم من عنده حل لهذه المعضلة
سؤال في 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 لاصطدم بالكثير من الاخطاء الاخري هل من فكرة أخري أكثر جمالا لقائمة تثبيت التطبيقات هذه هذه الواجهة الجديدة للبرنامج -أكثر جمالا - ![]() أرغب في تحسين شكل هذه القائمة من checkboxes هل من أفكار ؟؟ |