Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TLIstView Spaltenänderung Benachrichtigung (https://www.delphipraxis.net/102373-tlistview-spaltenaenderung-benachrichtigung.html)

ManfredG 27. Okt 2007 09:38


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?

bitsetter 27. Okt 2007 12:40

Re: TLIstView Spaltenänderung Benachrichtigung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von ManfredG
Möchte sofort nach Veränderung die Spaltenbreiten speichern.

Hallo,

zumindest kenne ich eine Möglichkeit, wo man beim Verändern der Spaltenbreite benachrichtigt wird.

bitsetter 4. Nov 2007 18:44

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.

Jelen 9. Mär 2009 15:42

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:
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 (?). :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 04:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz