Entwickler-Ecke

Multimedia / Grafik - Canvas verschieben und zoomen!?


Padz - Do 11.12.08 19:03
Titel: Canvas verschieben und zoomen!?
Hi,
ich arbeite derzeit (für die Schule) an einem Programm, welches Funktionen schreiben kann.
Dort arbeite ich mit der "Image" Komponente.

Meine Frage ist, wie ich den dargestellten Bereich, zum einen verschieben und vergrößern kann.
Das Verschieben stell ich mir vor, dass man mit der Maus auf dem Bild klickt und gedrückt hält und den Bildausschnitt dann hin- und herschieben kann. Ist das mit Delphi möglich?

Das Zoomen, soll so laufen, dass ich mit der Maus einen rechteckigen Bereich auswähle und dieser dann automatisch gezoomt wird. Ich habe hier schon etwas über "Stretch" gelesen. Wie wende ich das an, denn einfach im Objectinspektor auf "True" klicken ist wohl nicht alles. ;)

Würde mich über Hilfe freuen.

Gruß
Padz


Fighter#1 - Do 11.12.08 19:09

Also du hast einen Funktionsplotter?
Ich glaube du solltest das anders lösen ;)
Was du möchtest ist ja nicht das Bild vergößern oderso, sondern einen anderen Ausschnitt zeichnen!
Also wenn du Zoomen möchtest möchtest du nichtmehr von x=-4 bis x=4 sondern nurnoch von -2 bis 2 das Schaubild sehen.
Somit zeichnest du das Schaubild im neuen Bereich einfach erneut!
Und mit dem Verschieben verhält es sich ähnlich (zB X von -6 bis 2 ... gleiche Distanz nur andre Position).
Unser Grafikfähiger Taschenrechner (TI 83+) Hat dafür 4 (bzw. 6) wichtige Variablen Xmin,Xmax (die die Begrenzung auf der X-Achse darstellen) und Ymin und Ymax(Begrenzung auf der Y-Achse) Solche Variablen solltest du in deiner Zeichenroutine auch nutzen!
Damit kannst du dir viel erleichtern =) !

MfG, Fighter#1


Padz - Do 11.12.08 19:27

Ja genau, dass wird ein Funktionsplotter, der auch schon funktioniert.

Ich denke ich habe verstanden was du meinst bzw. wie das gemacht wird.
Also sollte ich lieber zb zwei Edit Felder einfügen, wo man die X und Y Koordinaten eingibt und dieser dann dies zeichnet?
Und so mit der Maus markieren geht nicht/nicht so gut?


ace1905 - Do 11.12.08 20:33

mit dem verschieben solltest du dich mit OnMouseDown und OnMouseMove beschäftigen
das kannst du dann auf deinem image anwenden um die verschiebung zu realisieren ;)


Yogu - Do 11.12.08 20:49

Hallo,

setze im OnMouseDown eine Variable des Typs TPoint auf die übergebenen Mauskoordinaten (Parameter X und Y). Im OnMouseMove ziehst du nun von den neuen Koordinaten die gespeicherten ab, addierst das zu Xmin bzw. Ymin und speicherst die Koordinaten wieder in der TPoint-Variable:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
// Formular-Variable unter private
MousePos: TPoint;
MouseDown: Boolean;

// OnMouseDown
MousePoint := Point(X, Y);
MouseDown := True

// OnMouseUp
MouseDown := False;

// OnMouseMove
var Diff: TPoint;
Diff := Point(X-MousePos.X, Y-MousePos.Y);
MousePos := Point(X, Y);

{ Diff beinhaltet nun die Verschiebung, die du anwenden musst }

Soviel zur grafischen Verschiebung.


Padz - Do 11.12.08 20:58

Cool, danke!

Werde ich aufjedenfall ausprobieren, nur jetzt habe ich leider keine Zeit und ich werde mich natürlich melden, falls ich es geschafft habe, oder noch Probleme auftauchen. ;)

Gruß
Padz