![]() |
FMX Scrollbareigenschaften berechnen
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 :oops: 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:
Das Change Event der Scrollbar ist dann wie folgt:
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;
Delphi-Quellcode:
Es ergeben sich folgender Unterschied zwischen Wunsch und Wirklichkeit:
procedure TFReader.ScrollBarChange(Sender: TObject);
begin TraceImage.Position.X := TraceImage.Width * ScrollBar.Value / GridLayout.Width; end; 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 |
AW: FMX Scrollbareigenschaften berechnen
Hast du das schonmal mit
![]() Rollo |
AW: FMX Scrollbareigenschaften berechnen
Hmmm, eventuell habe ich mich unklar ausgedrückt, als ich schrieb, daß sowas wie eine ScrollBox (TImageViewer ist eine solche) nicht in Frage kommt. Ich möchte zwei bewegliche Images, die wiederrum auf zwei statischen Images liegen gleichzeitig mit einer Scrollbar bewegen. Falls das auch mit TImageViewer geht, bitte ich um eine Erklärung wie.
Problematisch erscheint mir im Übrigen auch noch dieser Hinweis in der Doku: "Rotating an (TImageViewer) on mobile platforms might produce unexpected results." :? Sowas könnten meine Anwender aber vorhaben, diese Schlingel. Sherlock |
AW: FMX Scrollbareigenschaften berechnen
Ich verstehe doch richtig das d ein TImage hast was Überbreite hat, und du willst es innerhalb eines "Viewports" scrollen ?
Was spricht da gegen ScrollBox u. Derivate ? Oder willst du mit ScrollMar das TImage neu erzeugen, mit anderen PArameters ? Aber du drehst an der Breite rum, da denke ich Scrollen ist das Ziel. Wo findest du den Hinweis das TImageViewer ein Rotate-Problem hat, also bei mir klappt das super. Rollo |
AW: FMX Scrollbareigenschaften berechnen
OK, ich habs probiert, und es geht gar nicht. Zum einen ist der TImageViewer nicht transparent und verdeckt somit mein Koordinatengrid, und zu anderen nimmt die beabsichtigte horizontzale Scrollbar mir Platz weg, und es wird eine unerwünschte vertikale Scrollbar eingeblendet. Ich kann aber nicht den ImageViewer vergrößern, weil ich sonst Probleme mit der Übereinstimmung von Punkten und Koordinatensystem bekomme.
Mein Ansatz die Kurve vor dem Koordinatensystem zu verschieben ist mir dann doch deutlich lieber, einfacher und komfortabler. Es fehlt ja nicht mehr viel, Es müsste "lediglich" eine Möglichkeit geben, das Position.X auch einen negativen Wert bekommen kann, so daß ich auch das rechte Ende der Kurve in einem kleinen Sichtbereich anzeigen kann. Ich setz mich jetzt wieder ran, und experimentiere mit den Verhältnissen und Koordinaten. Eigentlich sollte ja die Viewport-Position die Position des Bildes innerhalb des Anzeigebereichs wiederspiegeln... hmmm. Sherlock |
AW: FMX Scrollbareigenschaften berechnen
So, jetzt hab ichs. Alles bleibt wie gehabt, nur das ScrollBarChange muss so aussehen:
Delphi-Quellcode:
Dadurch verschiebt sich der sichtbare Bereich des TraceImages absolut synchron zum ViewPort der ScrollBar. Traumhaft.
procedure TFReader.ScrollBarChange(Sender: TObject);
begin TraceImage.Position.X := GridLayout.Width + (TraceImage.Width * ScrollBar.Value / GridLayout.Width) - TraceImage.Width; end; Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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