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

Canvas Scrollbar machen

  Alt 13. Mär 2011, 13:40
Hallo -- ich bin's nochmal!

Ich bräuchte nochmal ein wenig Hilfe bei meiner Zeichenpapier-Klasse...
Die Zeichenpapier-Klasse stellt im wesentlichen ein kariertes Blatt zur Verfügung mit Achsenkreuz (für Funktionen) oder Rechteckmuster damit man darauf zeichnen kann. Die Klasse ist von TCustomControl abgeleitet und bietet nach Außen ein Canvas auf welches der Aufrufer zeichnen kann. Das ist alles soweit ok.
Jetzt habe ich das Problem, wenn der Aufrufer meiner Klasse ein Image (bmp oder png) dem Canvas zur Darstellung übergibt, dass mein zur Verfügung gestelltes Canvas nicht scrollbar ist (und damit das Image nicht komplett sichtbar).
Mein Frage: Was müßte ich meinem Zeichenpapier beibringen, damit sein Canvas scrollbar wird?

Hoffe das Anliegen ist helbwegs verständlich dargestellt.

Vielen Dank für alle Idee/Kommentare.
Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
alfold

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

AW: Canvas Scrollbar machen

  Alt 13. Mär 2011, 13:58
Evtl Dein Zeichenpapier auf eine Scrollbox einfügen. Oder gleich dieses canvas dafür nehmen. So als Vorschlag!

gruss alfold
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

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
 
#4

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
 
#5

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
 
#6

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
 
#7

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
 
#8

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:46 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