Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Konzeptionelle Frage: einfaches "Zeichenprogramm" (https://www.delphipraxis.net/95758-konzeptionelle-frage-einfaches-zeichenprogramm.html)

cltom 12. Jul 2007 17:23


Konzeptionelle Frage: einfaches "Zeichenprogramm"
 
hallo Dpler,

sorry für die etwas allgemeine Frage, aber ich bin am start eines neuen Projekts und brauche noch etwas Input.

Zentrales Element des Projekts sollte eine Art Zeichenfläche sein, in der man Grafiken hinzufügen und arrangieren kann. Idealerweise stelle ich mir das so vor, dass eine Bibliothek mit vorgefertigten Symbolen existiert, die man aus einzelnen Vektorgrafiken laden kann und die man dann via drag and drop auf die Zeichenfläche schupft, wo man sie dann zusammenstellen, verschieben, drehen usw. kann. Die so entstandene Zeichnung soll dann natürlich gedruckt werden können, abgespeichert, etc.

Jetzt gibt es einen Haufen Grafikbibliotheken (graphics32, crystal components tcad, codeaccelerate sweet drawing engine) etc. Zum teil hab ich damit herumprobiert, nicht genug aber zu sagen zu können, welches obigen Plan am einfachsten erfüllt.

Bin für Anregungen oder Anleitungen dankbar.

dank und gruß
tom

Mackhack 12. Jul 2007 17:40

Re: Konzeptionelle Frage: einfaches "Zeichenprogramm&am
 
Delphi und die Win32 API stellen dir im Prinzip alles zur verfuegung. Mit einem TImage bzw. TPaintBox solltest du genau das erreichen koennen.

cltom 13. Jul 2007 10:21

Re: Konzeptionelle Frage: einfaches "Zeichenprogramm&am
 
Hmm, danke einmal. Nur einmal grundsätzlich, wo setzt man da an? Unter TImage verstehe ich einmal ein paar einfache Zeichenfunktionen, aber der Rest? Alles von Hand selber machen? Drag and Drop, Objekte auf der Zeichenfläche verwalten, skalierung, rotation, alles händisch?

Gibt es dazu irgendwo ein bisschen Literatur zum stöbern?

danke und gruß
tom

Stephan 13. Jul 2007 10:48

Re: Konzeptionelle Frage: einfaches "Zeichenprogramm&am
 
Hallo tom,

Zitat:

Alles von Hand selber machen? Drag and Drop, Objekte auf der Zeichenfläche verwalten, skalierung, rotation, alles händisch?
Bei einem TImage oder einer TPaintBox wirst du das alles tatsächlich händisch machen müssen. Du könntest hier natürlich eine eigene kleine Komponente (basierend auf der TPaintBox) erstellen, welche die gewünschten Zeichenoperationen bereits beinhaltet :)

cltom 13. Jul 2007 11:19

Re: Konzeptionelle Frage: einfaches "Zeichenprogramm&am
 
Danke Stephan,

aber darum die Frage: macht das Sinn? Das Rad hier zum 10^7 mal neu erfinden?

Wenn man es rein mit TImage macht, wieder nur mal grundsätzlich gefragt: wie geht man das an: legt man für jedes Symbol ein eigenes TImage an, in das man dann sein WMF lädt? und versieht die unterschiedlichen TImages mit entsprechenden drag and drops, etc. oder wirft man alles auf ein TImage und kümmert sich mal dort darum?

Wie gesagt, mir geht es mal um die Richtung, in die Leute, die sowas schon mal gemacht haben, loswandern würden.

dank und gruß
tom

Stephan 13. Jul 2007 11:28

Re: Konzeptionelle Frage: einfaches "Zeichenprogramm&am
 
Hallo tom,

Ich hatte sowas in die Richtung schonmal programmiert. Verwendet hatte ich hierfür eine TPaintBox da hier Zeichenoperationen einfach viel schneller sind als in einem TImage. Gezeichnet habe ich alles in einer einzigen TPaintBox. Da allerdings mehrere Zeichenoperationen ein unangenehmes Flackern hervorrufen, habe ich nicht direkt in die PaintBox sondern in ein TBitmap gezeichnet. Anschließend habe ich das TBitmap auf die Zeichenoberfläche der PaintBox kopiert. Dies hat auch noch den Vorteil, dass du im OnPaint Ereignis der PaintBox den Inhalt aus dem Bitmap direkt wieder in die PaintBox einfügen kannst (ansonsten würde der Inhalt der PaintBox verschwinden, wenn du ein anderes Fenster darüber ziehst). Ich hatte damals aus Performancegründen mehrere Schichten von TBitmap's verwendet. Nur als kleines Beispiel: Ich hatte in der Zeichenoberfläche ein kleines Raster eingeblendet. Damit dieses Raster nicht jedes mal neu gezeichnet werden muss (das würde sonst sehr lange dauern), habe ich dieses in ein TBitmap gespeichert. Nun wurde dieses Raster aus dem ersten TBitmap in ein zweites kopiert und anschließend wurden diverse Objekte aus irgendwelchen Arrays oder Records eingezeichnet. Zu guter letzt wurde der Inhalt in die Paintbox kopiert. Das ganze war sehr schnell und es hat absolut nichts geflackert.

Zitat:

aber darum die Frage: macht das Sinn? Das Rad hier zum 10^7 mal neu erfinden?
Das kommt darauf an, was du genau vor hast. Das Selbermachen wäre natürlich mit einem gewissen Lernerfolg verknüpft. Wenn du allerdings schnell zu deinem Ziel kommen willst, dann wärst du vielleicht mit einer fertigen Bibliothek besser bedient. Du darfst auch nicht vergessen, dass du mit der oberen Methode zwar alles einzeichnen kannst, allerdings kannst du im Moment noch keine Objekte anklicken, verschieben usw. Hier musst du eben entsprechende Routinen in "OnClick" einbauen, welche anhand der Koordinaten des Mauszeigers das passende Objekt heraussuchen.

cltom 13. Jul 2007 11:34

Re: Konzeptionelle Frage: einfaches "Zeichenprogramm&am
 
Nun, ich wehre mich absolut nicht gegen Lernaufwand. Auch Fremdkomponenten müssen oft erst einmal erlernt werden. Und ich will auch nicht damit enden 200 Euro für eine Komponente ausgegeben zu haben, die mich mehr Zeit kostet als wenn ich es mit einem TImage mache. Aber wie gesagt, darum suche ich ein wenig nach Erfahrungswerten und bin daher einmal für Deine dankbar.

Das mit dem Raster ist ein guter Hinweis, ein solcher sollte bei mir auch hinkommen.


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