unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, WinSkinData, ExtCtrls, Menus;type
TForm1 = class(TForm)
ListView1: TListView;
Button1: TButton;
pm1: TPopupMenu;
MenuItem10: TMenuItem;
MenuItem9: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure MenuItem9Click(Sender: TObject);
private
{ Private declarations }
FHeaderHandle: THandle;
FHeaderInstance: Pointer;
FDefHeaderProc: Pointer;
FMouseDowned: Boolean;
FWidths: array of Integer;
procedure HeaderWndProc(var Message: TMessage);
public
{ Public declarations }
procedure Loaded; override;
destructor Destroy; override;
end;var
Form1: TForm1;implementation{$R *.dfm}uses CommCtrl;destructor TForm1.Destroy;
begin
if FHeaderHandle <> 0 then
SetWindowLong(FHeaderHandle, GWL_WNDPROC, Longint(FDefHeaderProc));
FreeObjectInstance(FHeaderInstance);
inherited;
end;procedure TForm1.HeaderWndProc(var Message: TMessage); procedure RecordCurWidths;
var
I: Integer;
begin
SetLength(FWidths, ListView1.Columns.Count);
for I := 0 to High(FWidths) do
FWidths[I] := ListView1.Columns[I].Width;
end; procedure CompareWidths;
var
I: Integer;
j: Integer;
ProBar: TProgressBar;
begin
for I := 0 to High(FWidths) do
if FWidths[I] <> ListView1.Columns[I].Width then
begin
//Memo1.Lines.Add(Format('Column %d: %d --> %d', [I, FWidths[I],ListView1.Columns[I].Width]));
if I <> 3 then
begin
for j := 0 to ListView1.Items.Count - 1 do
begin
ProBar := ListView1.Items[j].Data;
ProBar.Left := ProBar.Left + ListView1.Columns[I].Width - FWidths[I];
end;
end
else
begin
for j := 0 to ListView1.Items.Count - 1 do
begin
ProBar := ListView1.Items[j].Data;
ProBar.Width := ListView1.Columns[3].Width;
end;
end;
end;
end;
begin
with Message do
begin
Result := CallWindowProc(FDefHeaderProc, FHeaderHandle, Msg, WPARAM, LPARAM);
if Msg = WM_LBUTTONDOWN then
begin
FMouseDowned := True;
RecordCurWidths;
end
else if Msg = WM_LBUTTONUP then
begin
if FMouseDowned then
begin
CompareWidths;
FMouseDowned := False;
end;
end
else if Msg = WM_LBUTTONDBLCLK then
CompareWidths;
end;
end;procedure TForm1.Loaded;
begin
inherited;
FHeaderHandle := ListView_GetHeader(ListView1.Handle);
FHeaderInstance := MakeObjectInstance(HeaderWndProc);
FDefHeaderProc := Pointer(GetWindowLong(FHeaderHandle, GWL_WNDPROC));
SetWindowLong(FHeaderHandle, GWL_WNDPROC, Longint(FHeaderInstance));
end;procedure TForm1.Button1Click(Sender: TObject);
var
Item: TListItem;
ProBar: TProgressBar;
I: Integer;
begin
Item := ListView1.Items.Add;
Item.SubItems.Add(IntToStr(222));
Item.SubItems.Add('->'); ProBar := TProgressBar.Create(Self);
ProBar.Parent := ListView1;
Item.Data := ProBar;
ProBar.Left := Item.DisplayRect(drBounds).Left + ListView1.Columns[0].Width;
for I := 1 to 2 do
begin
ProBar.Left := ProBar.Left + ListView1.Columns[I].Width;
end;
ProBar.Top := Item.DisplayRect(drBounds).Top;
ProBar.Width := ListView1.Columns[3].Width;
ProBar.Max := 10;
ProBar.Position := 0;
end;procedure TForm1.MenuItem9Click(Sender: TObject);
var
I: Integer;
begin
for I := ListView1.Items.Count - 1 downto 0 do
begin
if ListView1.Items.Item[I].Checked then
begin
ListView1.Items.Item[I].Delete;
end;
end;
end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货