标签:record sim sed ica ecif lin item ram blog
The TListView Delphi control displays a list of items in a fashion similar to how Windows Explorer displays files and folders.
The WindowProc is a special procedure every TControl uses to respond to messages sent to the control.
Here‘s how to get notified when an item in the list view is checked or un-checked:
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;
Note: Reading the description of the tagNMLISTVIEW record in the Windows API help, reveals that "uChanged" field notifies that the item attributes have changed. This field is zero for notifications that do not use it. Otherwise, it can have the same values as the mask member of the LVITEM record. Bits 12 through 15 of the "state" member specify the state image index. To isolate these bits, use the LVIS_STATEIMAGEMASK.
Implementing the On Item Checked Event for the TListView Control
标签:record sim sed ica ecif lin item ram blog
原文地址:http://www.cnblogs.com/yzryc/p/6337240.html