procedure TForm1.Button1Click(Sender: TObject);
var
rCettemp: TRect;
pan : Tpanel;
begin
ListView1.Items.Add.Caption :='123';
rCettemp := ListView1.Items[0].DisplayRect(drBounds);
rCettemp.Left := rCettemp.Left + ListView1.columns[0].Width+5;
rCettemp.Right := rCettemp.Left + ListView1.columns[1].Width-10;
pan := TPanel.Create(Self);
pan.Color := clred;
pan.BevelOuter := bvNone;
pan.Caption:= '';
pan.Parent := ListView1;
pan.BoundsRect := rCettemp;
pan.Height := 13;
ListView1.Items[0].Data := pan;
end;向ListView1中嵌套一个panel,代码如上。但是当拖动标题时,这个panel不会跟着移动。
我试验把 pan := TPanel.Create(Self);
pan.Color := clred;
pan.BevelOuter := bvNone;
pan.Caption:= '';
pan.Parent := ListView1;
pan.BoundsRect := rCettemp;
pan.Height := 13;
ListView1.Items[0].Data := pan;
放到OnCustomDraw中,这样的话,会一直重绘。如何解决呢?谢谢!
var
rCettemp: TRect;
pan : Tpanel;
begin
ListView1.Items.Add.Caption :='123';
rCettemp := ListView1.Items[0].DisplayRect(drBounds);
rCettemp.Left := rCettemp.Left + ListView1.columns[0].Width+5;
rCettemp.Right := rCettemp.Left + ListView1.columns[1].Width-10;
pan := TPanel.Create(Self);
pan.Color := clred;
pan.BevelOuter := bvNone;
pan.Caption:= '';
pan.Parent := ListView1;
pan.BoundsRect := rCettemp;
pan.Height := 13;
ListView1.Items[0].Data := pan;
end;向ListView1中嵌套一个panel,代码如上。但是当拖动标题时,这个panel不会跟着移动。
我试验把 pan := TPanel.Create(Self);
pan.Color := clred;
pan.BevelOuter := bvNone;
pan.Caption:= '';
pan.Parent := ListView1;
pan.BoundsRect := rCettemp;
pan.Height := 13;
ListView1.Items[0].Data := pan;
放到OnCustomDraw中,这样的话,会一直重绘。如何解决呢?谢谢!
Types, // use EqualRect
CommCtrl; // use ListView_GetColumnWidthprocedure TForm1.Button1Click(Sender: TObject);
var
rCettemp: TRect;
pan: TPanel;
begin
ListView1.Items.Add.Caption :='123';
rCettemp := ListView1.Items[0].DisplayRect(drBounds);
rCettemp.Left := rCettemp.Left + ListView1.columns[0].Width + 5;
rCettemp.Right := rCettemp.Left + ListView1.columns[1].Width - 10;
pan := TPanel.Create(Self);
pan.Color := clRed;
pan.BevelOuter := bvNone;
pan.Caption:= '';
pan.Parent := ListView1;
pan.BoundsRect := rCettemp;
pan.Height := 13;
ListView1.Items[0].Data := pan;
end;procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
rCettemp: TRect;
pan: TPanel;
begin
Pointer(pan) := Item.Data;
if not Assigned(pan) then Exit;
rCettemp := ListView1.Items[0].DisplayRect(drBounds); rCettemp.Left := rCettemp.Left +
ListView_GetColumnWidth(ListView1.Handle, 0) + 5;
rCettemp.Right := rCettemp.Left +
ListView_GetColumnWidth(ListView1.Handle, 1) - 10;
// 这里是关键,如果用ListView1.columns[N].Width并不是实时的 if EqualRect(pan.BoundsRect, rCettemp) then Exit; // 无变化,就别处理
pan.BoundsRect := rCettemp;
end;
//参考如下代码:
uses
Types, // use EqualRect
CommCtrl; // use ListView_GetColumnWidthprocedure TForm1.Button1Click(Sender: TObject);
var
rCettemp: TRect;
pan: TPanel;
begin
ListView1.Items.Add.Caption :='123';
rCettemp := ListView1.Items[ListView1.Items.Count - 1].DisplayRect(drBounds);
rCettemp.Left := rCettemp.Left + ListView1.Columns[0].Width + 5;
rCettemp.Right := rCettemp.Left + ListView1.Columns[1].Width - 10;
pan := TPanel.Create(Self);
pan.Color := clRed;
pan.BevelOuter := bvNone;
pan.Caption:= '';
pan.BoundsRect := rCettemp;
pan.Height := 13;
pan.Parent := ListView1; //调整到最后
ListView1.Items[ListView1.Items.Count - 1].Data := pan;
end;procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
rCettemp: TRect;
pan: TPanel;
begin
Pointer(pan) := Item.Data;
if not Assigned(pan) then Exit;
pan.Visible := (ListView1.TopItem.Index <= Item.Index); // 不在标题上闪烁 rCettemp := Item.DisplayRect(drBounds); rCettemp.Left := rCettemp.Left +
ListView_GetColumnWidth(ListView1.Handle, 0) + 5;
rCettemp.Right := rCettemp.Left +
ListView_GetColumnWidth(ListView1.Handle, 1) - 10;
// 这里是关键,如果用ListView1.columns[N].Width并不是实时的 if EqualRect(pan.BoundsRect, rCettemp) then Exit; // 无变化,就别处理
pan.BoundsRect := rCettemp;
end;