delphi ListView 设置固定列宽

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐