我一直在使用Delphi XE4一周,我刚刚发现了新的TListGroups
功能。您可以轻松设置TlistItem
的{{1}}以便在群组之间切换/移动。现在,我希望有一个程序,只要GroupID
离开一个组和/或TListItem
输入一个组即可立即调用。我正在寻找这样的东西:
TlistItem
这里的主要问题是如果设置procedure TForm1.ListView1On(Before/After)ListGroupEnter(Sender: TObject; Item: TListItem);
begin
// Do some stuff here like...
// AllowedToDraw := TRUE/FALSE
// I/O Code...
// etc...
end;
procedure TForm1.ListView1On(Before/After)ListGroupLeave(Sender: TObject; Item: TListItem);
begin
// Do some stuff here like...
// This might be replaceable with OnDeletion...
// I/O Code...
end;
属性,则检测各组之间的切换。
因此,一旦更改/设置GroupID
属性,有什么可以检测到开关吗?
答案 0 :(得分:4)
TListItem.GroupID
属性设置器向LVM_SETITEM
HWND发送TListView's
消息。您可以继承TListView
并在TListView
处理之前截取该消息,例如:
const
APPWM_LISTVIEW_CHECKGROUP = WM_APP + 100;
var
PrevLVWndProc: TWndMethod = nil;
procedure TForm1.FormCreate(Sender: TObject);
begin
PrevLVWndProc := ListView1.WindowProc;
ListView1.WindowProc := LVWndProc;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ListView1.WindowProc := PrevLVWndProc;
end;
procedure TForm1.LVWndProc(var Message: TMessage);
var
LVItem: PLVItem;
ListItem: TListItem;
begin
case Message.Msg of
LVM_SETITEM:
begin
LVItem := PLVItem(Message.LParam);
if (LVItem^.mask and LVIF_GROUPID) <> 0 then
begin
ListItem := ListView1.Items[LVItem.iItem];
if ListItem.GroupID <> LVItem.iGroupID then
begin
if ListItem.GroupID >= 0 then
ListView1GroupLeave(ListView1, ListItem);
PrevLVWndProc(Message);
// this gives the TListItem time to actually update itself
PostMessage(ListView1.Handle, APPWM_LISTVIEW_CHECKGROUP, 0, LVItem.iItem);
Exit;
end;
end;
end;
APPWM_LISTVIEW_CHECKGROUP:
begin
ListItem := ListView1.Items[Message.LParam];
if ListItem.GroupID >= 0 then
ListView1GroupEnter(ListView1, ListItem);
Exit;
end;
end;
PrevLVWndProc(Message);
end;
procedure TForm1.ListView1GroupLeave(Sender: TObject; Item: TListItem);
begin
// Item is about to leave from its current GroupID ...
end;
procedure TForm1.ListView1GroupEnter(Sender: TObject; Item: TListItem);
begin
// Item has entered into its current GroupID ...
end;