如何在Delphi中触发ListView中的项目包装?
我将ListView设置为vsIcon。每个项目都是一个图像,下面有一个小文本。当我添加许多项时,它们会按照ListView的宽度进行包装(例如,一行5项)。但是,当我改变它的宽度时,它们就不再为新的宽度进行包装 到目前为止,我尝试的是:如何在Delphi中触发ListView中的项目包装?,listview,delphi,delphi-7,Listview,Delphi,Delphi 7,我将ListView设置为vsIcon。每个项目都是一个图像,下面有一个小文本。当我添加许多项时,它们会按照ListView的宽度进行包装(例如,一行5项)。但是,当我改变它的宽度时,它们就不再为新的宽度进行包装 到目前为止,我尝试的是: ListView.Update 刷新 重新绘制 函数列表视图(hwndLV:HWND;代码:UINT):布尔 函数ListView_重绘项(hwndLV:HWND;iFirst,iLast:Integer):Bool 我没有尝试对项目进行排序,因为我不希望
- ListView.Update
- 刷新
- 重新绘制
- 函数列表视图(hwndLV:HWND;代码:UINT):布尔
- 函数ListView_重绘项(hwndLV:HWND;iFirst,iLast:Integer):Bool
procedure TForm.WMExitSizeMove(var Message: TMessage);
var
i, p: Integer;
ListItem: TListItem;
c: array of string;
b: array of Boolean;
begin
if Showing and (PreviousWidth <> Width) then
begin
p := ListView.ItemIndex;
SetLength(c, ImageList.Count);
SetLength(b, ImageList.Count);
for i := 0 to ImageList.Count - 1 do
begin
c[i] := ListView.Items[i].Caption;
b[i] := ListView.Items[i].Selected;
end;
ListView.Items.BeginUpdate;
ListView.Clear;
for i := 0 to ImageList.Count - 1 do
begin
ListItem := ListView.Items.Add;
ListItem.Caption := c[i];
ListItem.ImageIndex := i;
ListItem.Selected := b[i];
end;
ListView.ItemIndex := p;
ListView.Items.EndUpdate;
SetLength(c, 0);
SetLength(b, 0);
PreviousWidth := Width;
end;
inherited;
end;
过程TForm.WMExitSizeMove(var消息:TMessage);
变量
i、 p:整数;
列表项:TListItem;
c:字符串数组;
b:布尔数组;
开始
如果显示和(以前的宽度),则
开始
p:=ListView.ItemIndex;
SetLength(c,ImageList.Count);
SetLength(b,ImageList.Count);
对于i:=0到ImageList.Count-1 do
开始
c[i]:=ListView.Items[i]。标题;
b[i]:=ListView.Items[i]。选中;
结束;
ListView.Items.BeginUpdate;
ListView.Clear;
对于i:=0到ImageList.Count-1 do
开始
ListItem:=ListView.Items.Add;
标题:=c[i];
ListItem.ImageIndex:=i;
ListItem.Selected:=b[i];
结束;
ListView.ItemIndex:=p;
ListView.Items.EndUpdate;
设定长度(c,0);
设定长度(b,0);
前一个宽度:=宽度;
结束;
继承;
结束;
但是,正如您所注意到的,对于大量的项目来说,速度并没有那么快。
你能帮我找到一个更好的方法吗
多谢各位
我使用Delphi 7。listview可以自动为您执行此操作。 在代码的某个地方(可能在formcreate中)插入以下内容:
listview.IconOptions.AutoArrange := true;
或者您也可以在“属性”窗口中进行设置。谢谢,但它不起作用。我制作了一个简单的应用程序,其中包含一个列表视图和一系列项目。我将ListView锚定到表单,并将AutoArrange设置为true,所有操作都按预期进行。是否覆盖了任何可能阻止触发默认绘图的绘图事件?绘图事件不是问题所在,但ShowWorkAreas属性已设置为True。当设置为False时,似乎正在工作。谁会知道…:D谢谢你。