![]() |
Objekt Zeichnen
Wie kann ich auf eine Paintbox ein Objekt zeichnen , wobei wie gezeichnet werden soll in einer Methode im Objekt stehn soll ?
|
Re: Objekt Zeichnen
Wäre nett, wenn du dein Prob etwas genauer vorstellen würdest z.b. Was du malen willst?!
|
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 .
|
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. |
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:
Dann sieht der Aufruf so aus:
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;
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender:TObject);
begin FSchienenPlan.PaintToCanvas(Paintbox1.Canvas); end; |
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. |
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. |
Re: Objekt Zeichnen
Danke euch allen ich denk jetzt müsste ich es hinkriegen =) .
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 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 by Thomas Breitkreuz