张志峰的博客

水滴石川,积少成多。

导航

delphi ListView 设置固定列宽

Posted on 2018-09-11 14:19  ╰★张志峰★╮  阅读(1406)  评论(0编辑  收藏  举报
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 772
ClientWidth = 635
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object lvErrMsgs: TListView
Left = 0
Top = 0
Width = 635
Height = 415
Align = alTop
BevelInner = bvNone
BevelOuter = bvNone
BorderWidth = 1
Columns = <
item
Caption = ' '
Width = 30
end
item
Caption = #26500#20214#21517#31216
Width = 75
end
item
Caption = #25152#23646#27004#23618
Width = 75
end
item
Caption = #38169#35823#25551#36848
Width = 500
end>
ColumnClick = False
DragCursor = crAppStart
FlatScrollBars = True
GridLines = True
HideSelection = False
Items.ItemData = {
05450000000100000000000000FFFFFFFFFFFFFFFF03000000FFFFFFFF000000
000003310031003100F85CC32603320032003200A85BC326057A007800630076
006200B059C326FFFFFFFFFFFF}
ReadOnly = True
RowSelect = True
ShowWorkAreas = True
TabOrder = 0
ViewStyle = vsReport
ExplicitTop = -115
ExplicitWidth = 524
end
end
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    lvErrMsgs: TListView;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
  FListViewOldWndProc: TWndMethod;
  procedure ListViewNewWndProc(var Msg: TMessage);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses
CommCtrl;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FListViewOldWndProc := lvErrMsgs.WindowProc;
  lvErrMsgs.WindowProc := ListViewNewWndProc;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  lvErrMsgs.WindowProc := FlistViewOldWndProc;
  FListViewOldWndProc := nil;
end;

procedure TForm1.ListViewNewWndProc(var Msg: TMessage);
var
hdn: ^THDNotify;
begin
if Msg.Msg = WM_NOTIFY then
begin
hdn := Pointer(Msg.lParam);
if (hdn.hdr.code = HDN_BeginTrackW) or (hdn.hdr.code = HDN_BeginTrackA) then
Msg.Result := 1
else
FListViewOldWndProc(Msg);
end else
FListViewOldWndProc(Msg);
end;


end.