![]() |
TLIstView Spaltenänderung Benachrichtigung
(BD6)
Hallo, ich suche eine Message, die mir sagt, daß ein Anwender in einer Listview die breite einer Spalte verändert hat, (ViewStyle=vsReport). Möchte sofort nach Veränderung die Spaltenbreiten speichern. Hat jemand einen Tip? |
Re: TLIstView Spaltenänderung Benachrichtigung
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
zumindest kenne ich eine Möglichkeit, wo man beim Verändern der Spaltenbreite benachrichtigt wird. |
Re: TLIstView Spaltenänderung Benachrichtigung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
jetzt habe ich doch noch eine Möglichkeit gefunden, so dass man benachrichtigt wird wenn der Anwender in einem Listview die Breite einer Spalte verändert hat. Die Message heißt HDN_ENDTRACK und kommt vom Header des Listview. |
Re: TLIstView Spaltenänderung Benachrichtigung
Dieses Thema hat mir gerade weitergeholfen. :thumb:
Um die Sache etwas eleganter nutzen zu können, habe ich eine Komponente daraus gemacht:
Delphi-Quellcode:
Damit verfügt das TMyListView über das gewünschte OnColWidthChange-Ereignis.
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. 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 (?). :wiejetzt: 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. :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz