AGB  ·  Datenschutz  ·  Impressum  







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

[FMX] Image mit Scrollfunktion

Ein Thema von Peter666 · begonnen am 13. Mär 2016 · letzter Beitrag vom 17. Mär 2016
Antwort Antwort
Rollo62
Online

Registriert seit: 15. Mär 2007
4.228 Beiträge
 
Delphi 12 Athens
 
#1

AW: [FMX] Image mit Scrollfunktion

  Alt 16. Mär 2016, 11:51
Ich benutze ein TImageView (basiert auf TScrollBox), mit einem Hintergrundbild und lege
ein Layout darein in das ich die Elemente in OnPaint selber zeichne.

Das funktioniert ganz gut, allerdings ist es schon sehr tricky das ans Laufen zu bekommen.
Die Koordinaten, die TAniCalculations, die Mouse/TouchEvents um jeweils Pan/Zoom als auch Drag and Drop
schön sauber zu selektieren (auf Phones/Tablets) ist eine Herausforderung.

Was ich vermute ist das es bei vielen Objekten sehr oft komplett neugezeichnet wird, deshalb müsstest
du wahrscheinlich deine eigene ViewPort Filterung einbauen, und nur das zeichnen was gerade sichtbar ist.

Wenn du alles in einem Bitmap vorzeichen willst solltest du daran denken das die Bitmaps nicht unendlich groß werden können, und je nach Platform anders sein werden. Ich hatte schon des öfteren Probleme damit, insbesondere bei Screenshots.

Rollo
  Mit Zitat antworten Zitat
CHackbart

Registriert seit: 22. Okt 2012
267 Beiträge
 
#2

AW: [FMX] Image mit Scrollfunktion

  Alt 17. Mär 2016, 18:57
Ich poste mal eine etwas aufgeräumte Variante von meinem Ansatz:

Delphi-Quellcode:
type
  TVirtualScrollBox = class(TCustomScrollBox)
  private
    FContentSize: TPointF;
  protected
    procedure DoPaint; override;
    function DoCalcContentBounds: TRectF; override;
    function GetDefaultStyleLookupName: string; override;
  public
    constructor Create(AOwner: TComponent); override;
  end;

constructor TVirtualScrollBox.Create(AOwner: TComponent);
begin
  inherited;
  FContentSize := PointF(10000, 10000);
end;

procedure TVirtualScrollBox.DoPaint;
begin
  inherited;
  canvas.Fill.Color := $FF000000;
  canvas.FillText(ClipRect, format('%0.2f/%0.2f',
    [HScrollBarValue / FContentSize.X, VScrollBarValue / FContentSize.Y]),
    false, 1, [], TTextAlign.Center, TTextAlign.Center);
end;

function TVirtualScrollBox.DoCalcContentBounds: TRectF;
begin
  result := RectF(0, 0, FContentSize.X, FContentSize.Y);
end;

function TVirtualScrollBox.GetDefaultStyleLookupName: string;
begin
  result := 'framedscrollboxstyle';
end;
Im Prinzip muss man nur DoPaint überschreiben mit seiner eigenen Logik. Mir gefällt das Basiskonstrukt in der Form nicht wirklich, aber es läuft recht passabel. Eventuell kann das ja jemand auch nutzen

Christian
  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 14:22 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