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 Eigene Klassen zur grafischen Darstellung und zum Drucken (https://www.delphipraxis.net/129261-eigene-klassen-zur-grafischen-darstellung-und-zum-drucken.html)

F.W. 15. Feb 2009 22:25


Eigene Klassen zur grafischen Darstellung und zum Drucken
 
Ich möchte mich einmal daran versuchen ein Programm zu schreiben, welches Struktogramme erstellen kann.
Ich kenne mich mit dem Canvasobjekt und Komponentenentwicklung soweit aus. Allerdings bin ich mir nicht sicher, von welchem Typ ich meine eigenen Klassen zur Darstellung ableiten soll, vorallem weil ich das Struktogramm nicht nur im Programm ausgeben will, sondern es soll später auch möglich sein zu drucken.

Ich habe mir das so gedacht, dass ich eine Oberklasse von TGraphicControl ableite, die quasi der Container für das Struktogramm ist. Die einzelnen Anweisungen und Kontrollstrukturen sollen als eigene Klassen implementiert werden, vorerst von TPersistent abstammen und eine DrawMethode bekommen, die von der Oberklasse aufgerufen wird und das Objekt auf ihren Canvas zeichnet. Vorher hat die Oberklasse für alle Objekte Ihre Platzierung bestimmt und in ihren X, Y, Width und Height Eigenschaften gespeichert.

Mein Problem ist jetzt:
a) Sind die Klassen klug gewählt? und
b) Wie stelle ich es am besten an, dass ich die Objekte auch auf einem anderen Canvas (Drucker) ausgeben kann ohne die gesamte Zeichnungsroutine zweimal erstellen zu lassen?
Ist vielleicht der Ansatz die Oberklasse die Platzierung der Objekte in einem vorherigen Extraschritt bestimmen zu lassen schlecht gewählt?

Namenloser 15. Feb 2009 23:03

Re: Eigene Klassen zur grafischen Darstellung und zum Drucke
 
Ich würde einfach noch eine Schicht dazwischen packen:

Ich würde eine Klasse erstellen, die nur ein Struktogramm auf ein Canvas zeichnen kann (mit entsprechenden Parametern wie Größe, DPI usw.). Dann würde ich zwei weitere Klassen erstellen: eine zur Anzeige (von TGraphicControl abgeleitet), und eine zum Drucken. Diese beiden Klassen benutzen dann jeweils die Methoden der ersten Klasse.

Aber wie immer gilt natürlich, dass viele Wege zum Ziel führen.

mschaefer 15. Feb 2009 23:19

Re: Eigene Klassen zur grafischen Darstellung und zum Drucke
 
Liste der Anhänge anzeigen (Anzahl: 1)
Für sowas gibt es ja eigentlich schon Report-Libaries. Leider sind die meisten so groß, dass man selbst da kaum etwas Erweitern kann. Vor einigen Jahren bin ich auf AlReport gestossen. Der wird nicht mehr weiterentwickelt. Das Konzept ist aber noch durchschaubar und man darauf auch eigenen Komponenten gut bauen (fand ich jedenfalls). Lege den mal ins Attachment, da die Orginalseiten schon lange nicht mehr existieren.

Grüße // Martin

F.W. 16. Feb 2009 06:32

Re: Eigene Klassen zur grafischen Darstellung und zum Drucke
 
@NamenLozer:
Wie soll das mit der Schicht dazwischen funktionieren? Deshalb habe ich doch trotzdem noch das Problem mit der Berechnung der Positionen der Elemente. Und eine feste Positionbrauche ich schon, da ich (hätte ich vlt vorher mit erwähnen sollen) will, dass die Elemente mit der Maus auswählbar sind. Und da ist es sicher von Vorteil, wenn ich die Elemente in einer Liste o.ä. durchgehen kann und direkt schauen kann, in welchem "Clientbereich" der Mauszeiger sich befand.

Wenn alle Methoden zwei Zeichenmethoden hätten, eine mit Parameter und die andere zeichnet auf den Standartcanvas der Oberklasse (indem sie die parametrisierte mit dem Stdcanvas aufruft) und vlt noch einen Parameter Printing oder so. Und wenn ja, werden alle Werte für Left, Top, Width, Height mit einem bestimmten Faktor multipliziert. Das lässt sich ja leicht errechnen anhand der der maximalen Breite und Höhe des Canvas'. Aber wie berechne ich so einen Faktor für Schriftgröße oder Pinselbreite?

@mschaefer:
Inwiefern könnte ich diese Reportlibraries denn nutzen? Ich habe weniger das Problem, meine Zeichnung zu drucken. Ich hab mehr das Problem meine Zeichnung in geeigneter Größe auf einen Druckcanvas o.ä. zu bekommen. Da würden mir Reportlibs doch nicht viel helfen oder können die was spezielles?

mschaefer 16. Feb 2009 07:14

Re: Eigene Klassen zur grafischen Darstellung und zum Drucke
 
Naja die Libarie stellt dir den Druckcanvas zur Verfügung und hat auch die Skalierungsroutinen für den Ausdruck.
Es gibt da ein Image Objekt, da könnte man die Diagramme ableiten. Ok, ist natürlich auch mehr Aufwand als
direkt mit dem Canvas zu arbeiten.

Grüße // Martin

Namenloser 16. Feb 2009 12:20

Re: Eigene Klassen zur grafischen Darstellung und zum Drucke
 
Ich verstehe ehrlich gesagt nicht genau, wo das konkrete Problem liegt.

Ich meinte zu b) einfach nur, dass man ganz einfach eine Klasse (oder meinetwegen auch eine procedure) implementieren könnte, die ein TCanvas-Object als Parameter bekommt - je nachdem ob du hier das Canvas der Paintbox übergibst, oder das Druckercanvas, wird halt an verschiedene Stellen gezeichnet.

Deine andere Frage kann ich nicht beantworten, weil mir noch nicht ganz klar ist, was du eigentlich genau machen willst. Wieso lässt du die Containerklasse die Positionen bestimmten, und nicht die Objekte selbst?


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