Einzelnen Beitrag anzeigen

Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.764 Beiträge
 
Delphi 11 Alexandria
 
#1

FMX Scrollbareigenschaften berechnen

  Alt 17. Aug 2016, 14:44
Ich sitze hier seit einiger Zeit und breche mir beide Ohren an diesem "Problem". Gegeben sei ein TLayout, dem ich ein Paar von Images mit jeweils einem untergeordneten Image zuordne. Das erste Image jedes Pärchens beinhaltet eine Skala, die ich einmalig berechne. Das zweite Image bekommt eine Kurve, die zur Laufzeit befüllt wird. Damit ich dann den kompletten Kurvenverlauf sehen kann, auch wenn das Layout kleiner ist als die Images (es geht hierbei nur um die Breite, von ausreichender Höhe darf ausgegangen werden), habe ich unter das Layout eine TScrollbar gesetzt. Verschieben des Anfassers soll bewirken, daß die untergeordneten Images, also die mit den Kurven, entsprechend verschoben werden. Die Images mit den Skalen sollen stehen bleiben - darum keine allumfassende TScrollBox.

So, jetzt artet das für mich langsam zu höherer Mathematik aus vermutlich weil ich schon zu lange darüber nachdenke. Was habe ich bis jetzt getan? Der folgende Code ist reduziert, die zweite Kurve richtet sich ohnehin exakt nach der ersten, spielt also keine Rolle. Im Resize-Event der Form errechne ich ein bis zwei ScrollBar-Eigenschaften:
Delphi-Quellcode:
procedure TFReader.CalcScrollBarProps;
begin
  if GridLayout.Width < TraceImage.Width then
  begin
    ScrollBar.ViewportSize := ScrollBar1.Width / (TraceImage.Width / GridLayout.Width);
    ScrollBar.Max := ScrollBar1.ViewportSize * (TraceImage.Width / GridLayout.Width);
  end
  else
    ScrollBar1.ViewportSize := ScrollBar1.Width;
end;
Das Change Event der Scrollbar ist dann wie folgt:
Delphi-Quellcode:
procedure TFReader.ScrollBarChange(Sender: TObject);
begin
  TraceImage.Position.X := TraceImage.Width * ScrollBar.Value / GridLayout.Width;
end;
Es ergeben sich folgender Unterschied zwischen Wunsch und Wirklichkeit:
Wunsch: Wenn das ScanImage (die Kurve) nicht komplett ins GridLayout passt, soll es möglich sein durch scrollen jeden Teil der Kurve zu sehen.
Wirklichkeit: Ich kann zwar scrollen, aber ich kann nur die Kurve nach rechts "aus dem Bild scrollen". Kurvenbereiche weiter rechts bekomme ich nicht ins Bild gescrollt.

Was mache ich falsch? Bitte zur Beachtung: FMX-TScrollBars unterscheiden sich selbstverständlich von VCL-TScrollBars, wieso auch nicht?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat