Dieses Thema hat mir gerade weitergeholfen.
Um die Sache etwas eleganter nutzen zu können, habe ich eine Komponente daraus gemacht:
Delphi-Quellcode:
unit MyListView;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type TColWidthChangeEvent =
procedure(Sender: TObject;
ACol,AWidth: integer)
of object;
TMyListview =
class(TListview)
private
FOnColWidthChange: TColWidthChangeEvent;
protected
procedure WMNotify(
var Msg: TWMNotify);
message WM_NOTIFY;
published
property OnColWidthChange: TColWidthChangeEvent
read FOnColWidthChange
write FOnColWidthChange;
end;
procedure Register;
implementation
uses commctrl;
procedure TMyListview.WMNotify(
var Msg: TWMNotify);
var ColumnIndex: integer;
begin
inherited;
if (Msg.NMHdr^.code = HDN_ENDTRACK)
and Assigned(OnColWidthChange)
then begin { Ereignis OnColWidthChange generieren }
ColumnIndex := PHDNotify(Msg.NMHdr)^.Item;
OnColWidthChange(Self,ColumnIndex,Columns[ColumnIndex].Width);
end;
end;
procedure Register;
begin
RegisterComponents('
My',[TMyListview]);
end;
end.
Damit verfügt das TMyListView über das gewünschte OnColWidthChange-Ereignis.
Allerdings habe ich das commctrl.ListView_GetColumnWidth(
Handle,ColumnInde x) rausgeworfen.
Es übergibt manchmal den Wert, bis zu dem der Anwender gezogen hat, aber nicht immer (?).
Columns[ColumnIndex].Width hingegen übergibt - zumindest bei mir - immer den Wert, der sich letztendlich einstellt, auch unter Berücksichtigung von MinWidth und MaxWidth.
@bitsetter: Falls Du dies noch liest, vielleicht kannst Du noch anfügen, warum Du ListView_GetColumnWidth benutzt hast.