AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Eigene Klassen zur grafischen Darstellung und zum Drucken
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Klassen zur grafischen Darstellung und zum Drucken

Ein Thema von F.W. · begonnen am 15. Feb 2009 · letzter Beitrag vom 16. Feb 2009
Antwort Antwort
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

Eigene Klassen zur grafischen Darstellung und zum Drucken

  Alt 15. Feb 2009, 22:25
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?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Eigene Klassen zur grafischen Darstellung und zum Drucke

  Alt 15. Feb 2009, 23:03
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.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#3

Re: Eigene Klassen zur grafischen Darstellung und zum Drucke

  Alt 15. Feb 2009, 23:19
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
Angehängte Dateien
Dateityp: zip alrep_1__146.zip (432,3 KB, 13x aufgerufen)
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#4

Re: Eigene Klassen zur grafischen Darstellung und zum Drucke

  Alt 16. Feb 2009, 06:32
@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?
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: Eigene Klassen zur grafischen Darstellung und zum Drucke

  Alt 16. Feb 2009, 07:14
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
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Eigene Klassen zur grafischen Darstellung und zum Drucke

  Alt 16. Feb 2009, 12:20
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?
  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 20:08 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