AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FMX Scrollbareigenschaften berechnen

Ein Thema von Sherlock · begonnen am 17. Aug 2016 · letzter Beitrag vom 18. Aug 2016
Antwort Antwort
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#1

FMX Scrollbareigenschaften berechnen

  Alt 17. Aug 2016, 15: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
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#2

AW: FMX Scrollbareigenschaften berechnen

  Alt 18. Aug 2016, 06:58
Hast du das schonmal mit TImageViewer probiert statt Image und Scrollbar selber zusammenzubauen ?

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#3

AW: FMX Scrollbareigenschaften berechnen

  Alt 18. Aug 2016, 08:07
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#4

AW: FMX Scrollbareigenschaften berechnen

  Alt 18. Aug 2016, 10:17
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
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#5

AW: FMX Scrollbareigenschaften berechnen

  Alt 18. Aug 2016, 11:59
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#6

AW: FMX Scrollbareigenschaften berechnen

  Alt 18. Aug 2016, 14:27
So, jetzt hab ichs. Alles bleibt wie gehabt, nur das ScrollBarChange muss so aussehen:
Delphi-Quellcode:
procedure TFReader.ScrollBarChange(Sender: TObject);
begin
  TraceImage.Position.X := GridLayout.Width + (TraceImage.Width * ScrollBar.Value / GridLayout.Width) - TraceImage.Width;
end;
Dadurch verschiebt sich der sichtbare Bereich des TraceImages absolut synchron zum ViewPort der ScrollBar. Traumhaft.

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz