Autor Beitrag
LeoMeyer
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 06.11.04 14:11 
Hallo zusammen,
hat jemand eine Idee/Beispielcode, wie man das folgende Problem am geschicktesten löst:

Und zwar habe ich eine TScrollBox, darin ein Panel und auf diesem Panel wieder kleinere Panels, die mit der Maus verschiebbar sind. Das funktioniert ja auch alles ganz schön.

Wenn ich jetzt so ein kleines Panel über den (Fenster-)Rand rausziehe, möchte ich, dass die TScrollBox den sichtbaren Bereich in die Richtung der Mausbewegung verschiebt, so dass das verschobene Panel sichtbar bleibt.

Klar möchte man auch mehrere Panels selektieren (wie z.B. im Windows Explorer die Dateien); also müsste ich ein kleines Rechteck zeichnen, und dann sollte sich die ScrollBox auch verschieben, wenn ich damit über den Rand hinausfahre.

Im Prinzip ein völlig banales Problem, wie man es von vielen Apps her kennt. Habe schon einige Ideen, bin aber immer noch auf der Suche nach der "elegantesten Lösung".

Kennt die jemand? Wenn ja, danke im voraus!

Grüssle, Leo

_________________
Wer nämlic mit h schreibt ist dämlic.
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 06.11.04 14:25 
LeoMeyer hat folgendes geschrieben:
Wenn ich jetzt so ein kleines Panel über den (Fenster-)Rand rausziehe, möchte ich, dass die TScrollBox den sichtbaren Bereich in die Richtung der Mausbewegung verschiebt, so dass das verschobene Panel sichtbar bleibt.


Ich hab das so gelöst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
   {Automatischer Bildlauf nach unten}
 if Panel1.Top+Panel1.Height+Panel2.Height > Panel2.Top then
  if Scrollbox1.VertScrollBar.Position < 1115 then
   Scrollbox1.VertScrollBar.Position := Scrollbox1.VertScrollBar.Position+3;

   {Automatischer Bildlauf nach oben}
 if Panel1.Top < PanelPlus0.Top-5 then
  if Scrollbox1.VertScrollBar.Position > 0 then
   Scrollbox1.VertScrollBar.Position := Scrollbox1.VertScrollBar.Position-3;


Du musst das natürlich noch anpassen, aber im Prinzip klappt's so!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
LeoMeyer Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 11.11.04 18:28 
vielen Dank (and sorry for the delay...),

mein Problem ist wahrscheinlich, dass der ganze Code zu komplex geworden ist; ist schliesslich schon ein paar Jahre alt, die Geschichte! Das innere Panel muss ich ja auch noch vergrößern, sonst geht nix.
Am besten schmeiß ich den Bettel weg und implementier's nochmal neu! ;-)

trotzdem vielen Dank fürs Posten,

Gruß, Leo