![]() |
synchrones scrollen von listview und panels
Hallo,
ich habe auf der rechten seite meines Formulars ein Listview mit den eintraegen untereinander. Auf der linken Seite werden dynamisch panels in eine scrollbox erzeugt, genauso viele wie rechts die Anzahl der Eintraege. Ich möchte es nun hinbekommen, dass die panels links immer genau auf der höhe der eintraege der listbox sind, also 1 panel, erster eintrag usw. Wie kann ich wenn ich die Scrollbox mit den panels scrolle synchron die listview eintraege scrollen und andersrum. Als Befehl müsste ja
Code:
funktionieren, leider hat aber scrollbox kein onscroll und das listview auch nicht.
Scrollbox1.VertScrollBar.Position:=ListView.TopItem.Index*HöhedesPanels;
Hat irgendjemand eine Idee, vielleicht über die Api oder sonstiges ? Herzlichen Dank für jeden Ansatz und Hilfe MFG Max Odendahl [edit=Daniel B]Und ab nach Sonstiges; Hat nichts mit der Komponentenentwicklung zutun![/edit] |
Re: synchrones scrollen von listview und panels
Hi,
Fange WM_VSCROLL in einem Handler ab und synchronisiere die Komponenten. |
Re: synchrones scrollen von listview und panels
Hallo,
ich habe mir mal einen TScrollBox Nachfahren gebastelt, der die Events OnVScroll und OnHScroll hat. Nebenbei können über die Eigenschaft GroupIndex die Scrollboxen synchronisiert. Evt kannst Du das Prinzip ja auf Dein Problem übertragen.
Delphi-Quellcode:
unit ScrollBoxEx;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; Const CM_SCROLLBOXEXVERTSCROLL = WM_USER+512; CM_SCROLLBOXEXHORIZSCROLL = WM_USER+513; type TScrollEvent = procedure (Sender : TObject; Position : Integer) of Object; TScrollBoxEx = class(TScrollBox) private FOnVScroll : TScrollEvent; fOnHScroll : TScrollEvent; FGroupIndex: Integer; procedure SetGroupIndex(const Value: Integer); procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL; procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL; procedure CMSCROLLBOXEXVERTSCROLL(var Message: TMessage); message CM_SCROLLBOXEXVERTSCROLL; procedure CMSCROLLBOXEXHORIZSCROLL(var Message: TMessage); message CM_SCROLLBOXEXHORIZSCROLL; { Private-Deklarationen } protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner : TComponent); override; published { Published-Deklarationen } property GroupIndex : Integer read FGroupIndex write SetGroupIndex default 0; property OnHScroll : TScrollEvent read fOnHScroll write fOnHScroll; property OnVScroll : TScrollEvent read fOnVScroll write fOnVScroll; end; procedure Register; implementation procedure Register; begin RegisterComponents('Mycomps', [TScrollBoxEx]); end; { TScrollBoxEx } constructor TScrollBoxEx.Create(AOwner : TComponent); begin inherited Create(AOwner); FGroupIndex:=0; fOnVScroll:=Nil; end; procedure TScrollBoxEx.SetGroupIndex(const Value: Integer); begin FGroupIndex := Value; end; procedure TScrollBoxEx.WMHScroll(var Message: TWMHScroll); var Msg: TMessage; begin inherited; If Assigned(fOnHScroll) then fOnHScroll(Self,Message.Pos); if (FGroupIndex <> 0) and (Parent <> nil) then begin Msg.Msg := CM_SCROLLBOXEXHORIZSCROLL; Msg.WParam := FGroupIndex; Msg.LParam := Longint(Self); Msg.Result := 0; Parent.Broadcast(Msg); end; end; procedure TScrollBoxEx.WMVScroll(var Message: TWMVScroll); var Msg: TMessage; begin inherited; If Assigned(fOnVScroll) then fOnVScroll(Self,Message.Pos); if (FGroupIndex <> 0) and (Parent <> nil) then begin Msg.Msg := CM_SCROLLBOXEXVERTSCROLL; Msg.WParam := FGroupIndex; Msg.LParam := Longint(Self); Msg.Result := 0; Parent.Broadcast(Msg); end; end; procedure TScrollBoxEx.CMSCROLLBOXEXVERTSCROLL(var Message: TMessage); var Sender: TScrollBoxEx; begin inherited; If FGroupIndex<=0 then Exit; if Message.WParam = FGroupIndex then begin Sender := TScrollBoxEx(Message.LParam); if Sender <> Self then begin VertScrollBar.Position:=Sender.VertScrollBar.Position; end; end; end; procedure TScrollBoxEx.CMSCROLLBOXEXHORIZSCROLL(var Message: TMessage); var Sender: TScrollBoxEx; begin inherited; If FGroupIndex<=0 then Exit; if Message.WParam = FGroupIndex then begin Sender := TScrollBoxEx(Message.LParam); if Sender <> Self then begin HorzScrollBar.Position:=Sender.HorzScrollBar.Position; end; end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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-2025 by Thomas Breitkreuz