Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   ListView Button Ereignisse (https://www.delphipraxis.net/141072-listview-button-ereignisse.html)

Opa 1. Okt 2009 18:55


ListView Button Ereignisse
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn bei einem TlistView dir Scrollleiste sichtbar wird und damit auch die beiden Buttons (mit den Pfeilen L+R)
Wenn man jetzt auf die Buttons drückt: Welcher Ereignis wird dann ausgelöst.
Ich meine nicht:
procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL;
procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;
das wird beim verschieben der Scrollleiste ausgelöst. Damit läst sich die Position der Scrollleiste feststellen.
Anders bei den Buttons da läst sich nicht feststellen wo sich die Scrollleiste gerade befindet.
Danke

Siehe Zeichnung

Lannes 2. Okt 2009 10:58

Re: ListView Button Ereignisse
 
Hallo,

wenn Message.Msg = WM_VSCROLL oder WM_HSCROLL und Message.Scrollcode = SB_LINEUP oder SB_LINEDOWN, dann wurde mit den Buttons gescrollt.

Message.Pos liefert aber dann 0, wie Du schon geschrieben hast.

Die Position kann man mit
Delphi-Quellcode:
GetScrollPos(Handle,SB_VERT{B_HORZ});
abfragen

Opa 2. Okt 2009 13:00

Re: ListView Button Ereignisse
 
Damit geht es!
Ich leite gerade eine Klasse von TlistView ab und habe auf (TDhListView = class(TCustomControl))
einen Header drauf, den ich mit scrollen muß. Hier das Erg. meiner Bemühungen. Damit andere daraus ggf. einen Nutzen haben.

Delphi-Quellcode:
procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;
procedure LV_VHScroll(var Msg: TMessage);message WM_DH_LIESTVIEW;//= WM_USER + X
AHeaderControl : THeaderControl;

//constructor TListView.Create(AOwner: TComponent);
//begin
//AHandle := TWinControl(AOwner).Handle;

....
procedure TListView.WMHScroll(var Msg: TWMHScroll);
var
  SBH : integer;
begin
  inherited;
  SBH := GetScrollPos(Handle,SB_HORZ);
  SendMessage(AHandle,WM_DH_LIESTVIEW,SBH,integer(@Msg));
  Invalidate;
end;

///--------------------------------------------------------------
procedure TDhListView.LV_VHScroll(var Msg: TMessage);
var
  WMMsg : ^TMessage;
begin
  WMMsg := Pointer(Msg.LParam);
  case WMMsg.Msg of
    WM_HSCROLL : begin
                   AHeaderControl.Left := 2-Msg.WParam;
                   AHeaderControl.Width := AListView.Width + -2+Msg.WParam;
                 end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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