Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Objekt Zeichnen (https://www.delphipraxis.net/106476-objekt-zeichnen.html)

DeluxXx 11. Jan 2008 13:42


Objekt Zeichnen
 
Wie kann ich auf eine Paintbox ein Objekt zeichnen , wobei wie gezeichnet werden soll in einer Methode im Objekt stehn soll ?

BullsEye 11. Jan 2008 13:48

Re: Objekt Zeichnen
 
Wäre nett, wenn du dein Prob etwas genauer vorstellen würdest z.b. Was du malen willst?!

DeluxXx 11. Jan 2008 13:54

Re: Objekt Zeichnen
 
Ich will einen Schienenplan zeichnen dazu hab ich die Klasse TSchiene, von der später noch TGerade ... abgeleitet werden sollen . Da des ziemlich unübersichtlich wird und ja auch den Sinn des ObjektOrientierten programmierens wiederlegt möchte ich nicht in der OnPaint Methode von der Paintbox alles zeichnen , anstatt dessen wäre in der zb TGerade eine Paint Methode ganz praktisch glaub ich .

Jelly 11. Jan 2008 14:12

Re: Objekt Zeichnen
 
Nein... TSchiene ist deine Funktionsklasse. Die soll sich schön aus dem Zeichnen raushalten.

Erzeuge eine Erbe von z.B. TPaintBox, und erweitere das Ganze durch Methoden, um eine TSchiene zu zeichnen, die du als Parameter übergibst. Weil du dich weiter in der Paintbox befindest, kannst du somit direkt auf den Canvas zeichnen.

shmia 11. Jan 2008 14:24

Re: Objekt Zeichnen
 
Ich würde so vorgehen:

Es gibt eine Klasse TSchienenPlan, der eine Liste mit allen Gleis-Objekten enthält. (TObjectList hilft hier weiter)
TSchienenPlan hat eine Methode PaintToCanvas():
Delphi-Quellcode:
procedure TSchienenPlan.PaintToCanvas(canvas:TCanvas);
var i : integer;
begin
   DrawBackground(Canvas);
   // alle Objekte zeichen
   for i := 0 to Objectcount-1 do
      objects[i].PaintToCanvas(Canvas);
end;
Dann sieht der Aufruf so aus:
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender:TObject);
begin
   FSchienenPlan.PaintToCanvas(Paintbox1.Canvas);
end;

himitsu 11. Jan 2008 14:31

Re: Objekt Zeichnen
 
nja, du kannst auch TSchiene von TPaintBox ableiten und z.B. als Platte TPanel/TScrollBox(oder was auch immer) verwenden, dann kann sich alles selber zeichnen

ansonsten mußt du passende Schnittstellen übergeben (wie es z.B. shmia gerade sagte)
wo du dann dem Objekt TSchiene oder seinen Nachfahren die Zeichfläche übergibst und im dann sagst es solle sich darauf zeichnen.

alternatv kannst du in TSchiene auch speichern wer seine "Eltern" (z.B. TSchienenPlan) sind (also wozu es gehört) und von dort holt es sich beim Befehl ZeichneDichJetztMal die Zeichenfläche holt.

shmia 11. Jan 2008 14:46

Re: Objekt Zeichnen
 
Die perfekte Lösung geht so:
Es gibt die (nichtvisuelle) Klasse TSchienenplan, die alle Unterobjekte verwaltet (entweder als Liste oder als Baum).
Dann gibt es mindestens eine Visualisierungsklasse, die 2 Properties hat: ein TSchienenplan-Objekt und ein Canvas.
Die Visualisierungsklasse hat ggf. weitere Properties wie z.B. Zoomfactor und Ursprungspunkt.
Man könnte sich nun auch eine 2D- und eine 3D Visualisierungsklasse vorstellen.

Das Formular ist nun der Klebstoff, der den Schienenplan, die Visualisierungsklasse und das Ausgabemedium (Paintbox, Image oder Printer) zu einer ganzen Anwendung verbindet.
Durch Austauschen der Visualisierungsklasse kann der Schienenplan unterschiedlich dargestellt werden.
Andererseits bindet man sich auch nicht an die Paintbox, sondern kann die grafische Ausgabe auf beliebigen Medien, die einen Canvas bieten, vornehmen.

DeluxXx 11. Jan 2008 15:52

Re: Objekt Zeichnen
 
Danke euch allen ich denk jetzt müsste ich es hinkriegen =) .


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 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