Autor Beitrag
matt1
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 16.07.05 03:20 
Hallo,
ich habe 2 TreeView nebeneinander auf einer Form. Wenn der user auf der linken TreeView rauf oder runter-scrollt, sollte die rechte TreeView synchronisch mitscrollen (und umgekehrt).

Irgendwie scheint das recht mühsam zu sein. TopItem ist read-only, ich kann dort keinen Wert setzen. Ich hab's mit subclass und dem event OnTopItemChange versucht, aber der wird nie ausgelöst (vermutlich aus dem gleichen Grund, weil sich der Wert nie ändert).

Vielen Dank schonmal für Ideen und Vorschläge.
Matt
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Sa 16.07.05 11:21 
Hallo und :welcome: im DF!
Das einfachste dürfte es sein die Windowsmessages (WM_?SCROLL) für das eine Treeview abzufangen und in Kopie an das zweite Treeview zu senden. Wenn ich Zeit finde, such ich mal was raus!

Gruß,
maxk

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Sa 16.07.05 11:56 
Gut, so sollte es gehen:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
// Zwei Methoden müssen vereinbar werden
type
  TForm1 = class(TForm)
    {...}
    procedure TreeView1Proc(var message:TMessage);
    procedure TreeView2Proc(var message:TMessage);
    procedure FormCreate(Sender: TObject);
    {...}
  end;

implementation

// Zwei "Variablen" vereinbart:

var OldTreeView1Proc:TWndMethod;
    OldTreeView2Proc:TWndMethod;

procedure TForm1.TreeView1Proc(var message:TMessage);
begin
 case message.Msg of
  WM_HSCROLL,WM_VSCROLL:
   OldTreeView2Proc(message);
 end;
 OldTreeView1Proc(message);
end;

procedure TForm1.TreeView2Proc(var message:TMessage);
begin
 case message.Msg of
  WM_HSCROLL,WM_VSCROLL:
   OldTreeView1Proc(message);
 end;
 OldTreeView2Proc(message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 OldTreeView1Proc:=TreeView1.WindowProc;
 OldTreeView2Proc:=TreeView2.WindowProc;
 TreeView1.WindowProc:=TreeView1Proc;
 TreeView2.WindowProc:=TreeView2Proc;
end;
Damit fängst du alle Nachrichten ab, die an die Treeviews gehen. Ist diese Nachricht WM_HSCROLL bzw. WM_VSCROLL, so wird sie auch von der anderen Treeview verarbeitet. Damit scrollen beide Treeviews synchron.

Gruß,
maxk

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
matt1 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 16.07.05 18:39 
wow, cool :shock: :idea:

Ich habe mich 5 Stunden mit EM_LINESCROLL und der Delpi-Methode ScrollBy herumgeschlagen, aber der Component hat nie darauf reagiert. Hast Du eine Ahnung weshalb?

Jedenfalls vielen Dank für den Code!!
Matt