AGB  ·  Datenschutz  ·  Impressum  







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

Canvas Scrollbar machen

Ein Thema von Jazzman_Marburg · begonnen am 13. Mär 2011 · letzter Beitrag vom 14. Mär 2011
Antwort Antwort
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

AW: Canvas Scrollbar machen

  Alt 13. Mär 2011, 15:48
Hhhmmm...
Also in einem älteren Thread fand ich folgende Antwort (von Bummi) auf ein ähnliche Anfrage:

Zitat:
AW: wie in Tcustomcontrol auf Scrollen reagieren??
31. Dez 2010, 10:15
Die Klasse etwas aufbohren:
Delphi-Quellcode:
published
     property OnScrollHorz: TNotifyEvent read FOnScrollHorz write FOnScrollHorz;
     property OnScrollVert: TNotifyEvent read FOnScrollVert write FOnScrollVert;
     property OnWheel: TMyWheelEvent read FOnWheel write FOnWheel;
Das hört sich ziemlich gut an -- allein mir fehlt da noch etwas Verständnis, bzw. bin mir nicht sicher wie das in meine Klasse einzubauen ist. Wenn der damalige Autor das hier noch etwas kommentieren würde ? Das wäre klasse!

Danke & Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Canvas Scrollbar machen

  Alt 13. Mär 2011, 23:26
Wie willst Du scollen?
Mit einem "Hand"-Cursor verschieben, über "Buttons" oder gemalte Scollbars?
Letztlich musst Du die Events die Dich interessieren versorgen, in o.g. Beispiel reichst Du Eventhandler nach außen um von dort weiterzumachen.
Du kannst auch alles in Deiner Komponente abfackeln und dort entweder im OnPaint bei allen Malroutinen ein FStartX , FStartY aufzuadieren(oder abzuziehen) oder Du lässt die Routinen wie sie sind und manipulierst das Canvas direkt, hat den Vorteil daß Du Zoom und Rotation auch gleich mit anbieten kannst.

Der Anhang zeigt wie das gehen könnte
Delphi-Quellcode:
Procedure ResetCanvas(ACanvas:TCanvas);
begin
   SetCanvasZoomAndRotation(ACanvas , 1, 0, 0,0);
end;

Procedure SetCanvasZoomAndRotation(ACanvas:TCanvas;Zoom:Double;Angle:Double;CenterpointX,CenterpointY:Double);
var
    form : tagXFORM;
    Winkel:Double;

begin
      Winkel := Grad2Rad(Angle);
      SetGraphicsMode(ACanvas.Handle, GM_ADVANCED);
      SetMapMode(ACanvas.Handle,MM_ANISOTROPIC);
      form.eM11 := Zoom * cos( Winkel);
      form.eM12 := Zoom *Sin( Winkel) ;
      form.eM21 := Zoom * (-sin( Winkel));
      form.eM22 := Zoom * cos( Winkel) ;
      form.eDx := CenterpointX;
      form.eDy := CenterpointY;
      SetWorldTransform(ACanvas.Handle,form);
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#3

AW: Canvas Scrollbar machen

  Alt 14. Mär 2011, 09:19
Hallo Bummi!

Vielen Dank für Deine Reaktion!

>Wie willst Du scollen?
>Mit einem "Hand"-Cursor verschieben, über "Buttons" oder gemalte Scollbars?

Ich denke es geht um die gemalten Scrollbars: Mein Problem ist, dass wenn der Verwender meiner Klasse mir ein PNG übergibt, welches größer als mein Canvas ist, ich es zwar darstelle, aber eben nur abgeschnitten. Wenn man nun die Form re-sized (z.B. die Höhe vergrößert), dann sieht man natürlich mehr vom Image, da das re-Size Event zu einem Neu-Malen führt.
Mein Verständnis Problem ist:
Wie bekomme ich mit, dass das mir (der Klasse) übergebene Image größer ist als mein Canvas, und wie blende ich dann die nötigen Scrollbars ein, so dass der User in meinem Canvas scrollen kann.
Der erste Teil der Frage läßt sich ja außerhaleb der Klasse einfach damit beantworten, dass ich die Größe des übergebenen Images mit meiner aktuellen Canvas Größe vergleiche -- aber wenn ich es nur innerhalb meiner Klasse betrachte: Wie kriegt mein Canvas mit, dass es etwas darstellt, dass größer ist als es selbst? Und dann erst kommt das Problem, wie ich dann die geeigneten Scroolbars anzeige.

Sorry, klingt wahrscheinlich umständlicher als es vermutlich ist.
Vielen Dank für Deine Mühe!

Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#4

AW: Canvas Scrollbar machen

  Alt 14. Mär 2011, 09:48
Ein Gedanke schießt mir gerade selber durch den Kopf:

Müßte man das Problem der Scrollbars nicht von der anderen Seite her aufziehen:
Wenn ich mein Canvas größer mache als die Main-Form, müßte dann nicht die Main-Form automatisch Scrollbars einblenden?

Also: nicht meine Klasse hat Scrollbars für den Fall das das übergeben Image größer als das Canvas ist, sondern ich passe mein Canvas der Größe des Images an, und die Main-Form (wie auch immer durch meine Klasse informiert) blendet die entsprecheden Scrollbars ein?

Oder habe ich das Problem damit nicht erschlagen, oder nur verlagert?

Herrjeh...

Danke fürs mitgrübeln!

Gruß
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Canvas Scrollbar machen

  Alt 14. Mär 2011, 10:00
Eigentlich ganz einfach. Du kannst die Form selbst benutzten und das Bild dort einfügen. Oder Du nimmst halt die Scrollbox komponente und fügst das Bild dort ein. Beide haben, wenn der Inhalt grösser ist als die zu zeichnende Fläsche, die Möglichkeit die Scrollelemente automatisch einzublenden. Beide haben ebend auch ein Canvas. Somit brauchst du auch nichts berechen wie gross nun Dein bild ist.

Wenn ich Dich richtig verstanden habe?

€: HIER kam gerade ein Beispiel wie man an image in die scrollbox einfügt
Und nichts anderes musst Du auch machen. Schon hast du die Scrollelemente.

Gruss alfold

Geändert von alfold (14. Mär 2011 um 10:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Canvas Scrollbar machen

  Alt 14. Mär 2011, 14:16
Wenn Dein Bild ein definiertes Image ist und nicht ("beliebig") groß werden kann, wie z.B. die Darstellung einer Anlage in verschiedenen Auflösungen, bietet sich der von Dir oder von alfold genannte Ansatz an.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  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 12:43 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