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