![]() |
GDI+ oder graphics32
Hallo zusammen,
ich bin dabei meine Anwendungen graphisch etwas aufzumöbeln. Dabei reichen die alten Graphic API-Funktionen nicht aus und ich komm nicht drum herum eins von den neueren Packages zu verwenden. Mein Ziel ist es allgemeine Regions mit Bitmaps oder Verläufen zu füllen, Glaseffects und Teiltransparenz zu integrieren. Dabei sollten die Kanten halt auch deutlich glatter verlaufen, als das im alten Design der Fall ist. Von Delphi OpenGL wurd mir abgeraten, weil das wohl mit Kanonen auf Spatzen geschossen wäre. Hat jemand von euch Erfahrungen mit den beiden Libaries und eine Ahnung was für meinen Fall besser geeignet wäre? Vielen Dank schon ma |
AW: GDI+ oder graphics32
GDI+ und Graphics32 sind erstmal nicht das gleiche an sich, das ist ein wenig ein Apfel / Birnen-Vergleich :)
GDI+ ist eine von Windows bereitgestelle API zum Zeichnen, Graphics32 ist eine Sammlung von Funktionen, die einem das Leben in der normalen GDI-Welt (ohne +) etwas leichter machen. Das heisst aber auch, dass sich die beiden nicht gegenseitig ausschliessen. Du kannst die Graphics32 installieren und diese verwenden und damit sogar mit GDI+-Techniken etwas zeichnen lassen oder Graphics32 sogar teilweise auf GDI+ erweitern. Die Frage "was nehme ich lieber" kann man so pauschal nicht beantworten. Es gibt Dinge, die lassen sich wahrscheinlich leichter mit Graphics32 realisieren, andere wiederum leichter oder schneller mit nativen GDI+ Techniken. Dazu müsste man genau wissen, was du genau "aufhübschen" willst und im Einzelfall eben entscheiden, was die beste Technik dafür ist. Das Abraten von OpenGL / DirectX ist sicher richtig, wenn es darum geht, alte Anwendungen nur aufzuhübschen. Sobald du eine der beiden genannten API's verwendest, kannst du den kompletten GUI-Code neu schreiben, da dort nichts mehr so funktioniert wie in der VCL und OpenGL / DirectX auch nicht damit mischbar ist. (Beispiel: Du kannst kein TLabel oder keine TCombobox mit OpenGL nutzen, sondern musst dir solche GUI-Elemente meist selbst neu schreiben). Allerdings kannst du im Gegenzug mit OpenGL / DirectX wesentlich mehr machen als mit GDI+, nämlich grafisch so ziemlich alles, was deinem Kopf so einfällt :) Eine alte Anwendung damit aufzuhübschen würde aber wirklich nur dann Sinn machen, wenn von vornherein wirklich jeglicher GUI-Code von der Programm-Logik getrennt ist. (Ich weiss, das versteht sich ja natürlich bei einem guten Programm-Konzept von selbst, nicht wahr? :)) Tatsache ist aber nach meiner Erfahrung, dass die wenigsten Delphi-Anwenungen so geschrieben wurden :) Sollte das aber bei dir der Fall sein, kannst du wirklich überlegen, ein komplettes GUI-Rework zu schreiben und OpenGL / DirectX verwenden. Allerdings wird das erst einmal eine sehr sehr lange Einarbeitungszeit in diese API's voraussetzen, wenn du noch nie damit gearbeitet hast, da das Arbeiten damit alles andere als trivial ist. |
AW: GDI+ oder graphics32
Hi, Danke für die Antwort.
Ich werde einige Anwendungen von Grund auf neu überarbeiten, d.h. in dem Fall wäre das komplette Neu-erstellen der Komponenten sicher nicht das Problem, nur wie du auch schon gesagt hast, heißt das, sich auch noch zumindest in eins der beiden (DirectX, OpenGL) einarbeiten muss. Ich glaub das werde ich mal nach hinten schieben. Lässt sich in GDI+ analog verfahren wie vorher üblich. D.h. beispielsweise das füllen einer beliebigen Region mit einem Muster:
Delphi-Quellcode:
nur das ich den Brush abändere in TGPBrush (oder wie die da heißen) so dass ich auch transparent-effecte und antialiasing beim Füllen nutzen kann. Ansonsten würd ich mich vllt nur in graphics32 einlesen, wobei ich da auch wieder tausend Fragen hätte. Da beide sich nicht ausschließen, wäre es für mich nun interessant ob ich die Techniken der alten WIN32 graphic API einfach übertragen kann auf das GDI+ konzept (bsp überall nen GP vor oder so) und an manchen stellen vllt auf schnellere Funktionen der graphics32-lib zurückgreifen soll, oder ob ich für GDI+ wieder ne Menge Zeit investieren muss.
...
BitmapHandle := LoadBitmap(Hinstance, '...'); Brush1:= CreatePatternBrush(BitmapHandle); RegN:= CreateRoundRectRgn(10,10, form1.clientwidth-10,form1.clientheight-10,10,10); FillRGN(Form1.Canvas.Handle,RegN,Brush1); DeleteObject(RegN); DeleteObject(Brush1); DeleteObject(BitmapHandle); ... Ah, vllt mein Vorhaben mal etwas präziser ausgedrückt: Komponenten erstellen, die letztlich sehr flexible in ihrer graphischen Darstellung sind. D.h. die Komponenten vergleichbar mit Button/ Panels, Labels,... sollen von einer Control abgeleitet werden, die es ermöglicht beliebige Regionen (Sterne,RoundRect,...) mit beliebigen Mustern zu füllen (Bilder, Verläufe,...) und dabei die hässlichen Kanten glätten und Teil-Transparenz-Effekte erlauben, eventuell müsst ich nur noch ne Funktion für Spiegelungseffekte auf dem Hintergrund erstellen. Hab ich diese Komponente, kann ich mir kompliziertere Objekte daraus ableiten, die dann Button simulieren, oder als Items einer speziellen Listbox auftreten, etc. Letztlich wäre ich sehr flexibel (lässt man mal 3D-Effekte außen vor) in der Gestaltung von meinen Komponenten und ich müsste die alten Buttons nur durch meine neuen abgleiteten Komp. ersetzen. |
AW: GDI+ oder graphics32
Hmm....meiner Meinung nach würde sich für deine Zwecke da eher GDI+ anbieten.
Die Erweiterungen von GDI+ gegenüber GDI sind ja gerade ARGB-Farbschema, native Unterstüzung von PNGs und erweiterte Vektor-Funktionen (für deine Freiformen). Allerdings wird es nicht mit einem einfachen Prefix vor deinen vorhandenen Funktionen getan sein, da GDI+ in vielen Fällen etwas anders arbeitet als die GDI (ist noch mehr objektorientierter). Zu beachten wäre allerdings, dass GDI+ unter Windows XP etwas langsamer ist als das alte GDI, ab Vista ist es aber umgekehrt, da nur noch GDI+ hardwarebeschleunigt ist. Solltest du aber wirklich deine komplette GUI ohne jegliche VCL haben und die gesamten Komponenten neu schreiben wollen, wäre vielleicht OpenGL / DirectX doch der bessere Weg. Das solltest du dir vorher gut überlegen. Am Besten du machst zunächst einmal ein paar Testprojekte mit allen Methoden/API's (Graphics32, GDI+, OpenGL, DirectX) und schaust dann, welche sich für dein Arbeiten am Besten eignet. Die Doku von Graphics32 findest du hier: ![]() Für GDI+ ist zum Einstieg vielleicht folgendes ganz nützlich: ![]() OpenGL-Tutorials für den Einstieg findest du hier: ![]() ebenso zu empfehlen sind die NeHe-Lessons: ![]() Für DirectX muss ich nun passen, was hier aktuell eine gute Einstiegs-Seite ist, da ich mich eher zu den OpenGL-Jüngern zähle und bei DirectX nicht auf dem neuesten stand bin :) |
AW: GDI+ oder graphics32
Hi super, vielen Dank dir.
Ich werd mal die Seiten durchforsten und mich an die Arbeit machen. |
AW: GDI+ oder graphics32
Wenn du schon einen solchen Aufwand ernsthaft in Betracht ziehst, wäre evtl. ein Blick Richtung .NET Sprachen auch noch drin. WPF bietet erheblich mehr Gestaltungsfreiraum, und die Komponenten sind bereits da. Da wäre dann die Arbeit in der Anpassung der Programmlogik an die Sprache, was aber u.U. sogar weniger Arbeit wäre, als sich eine komplette Komponenten-Lib selbst neu zusammen zu hacken.
|
AW: GDI+ oder graphics32
Ich wuerde auch ein Blick auf VGScene from KSDEV (
![]() Graphic32 is auch super, kamm man vieles damit machen. Wie blackfin geschrieben hat, es ist wirklich besser kleinere Testprojekte mit jede moegliche Methode zu erstellen. Andre |
AW: GDI+ oder graphics32
Okay, hilfe. also,
OPENGL ich hab die tutorials in opengl durchpflügt und kann jetzt lauter bunte basis-formen im raum verteilt zeichnen. Texturen würd ich sicher auch noch hinkriegen. was mir noch nicht so klar ist, ob RoundRect oder beliebige andere Formen /Regionen damit einfach zu erstellen sind und ob eine Initialisierung von OpenGL in der Anwendung (bsp. in meiner MainForm) genügt und ich dann dies zum zeichnen in allen anderen Kompos benutzen kann. GDI+ Krieg ich nicht zum laufen. Habe sowohl die Version von progdigy.com als auch ne andere und beide werfen Fehlermeldungen aus. Liegt wahrscheinlich daran, dass die nicht Delphi2010 kompatibel sind. Bei progdigy's version haperts beim Erstellen eines Path. Da hab ich noch eine Funktion neu geladen, aber dann kam die nächste Fehlermeldung bei TNative... . GRAPHICS32 Da bin ich mir nicht so sicher, was das kann und die Art der Dokumentation ist nicht so meins. Aber zur Not werd ich mich da wohl einarbeiten. Ich hätte halt gern was in der Hand was ich durchlese und dann die Basics kann und wild drauflos programmiere. DIRECTX ... (noch nicht probiert) .NET Hm, da bin ich schon ein paar mal drauf gestossen als ich mich mit ADO beschäftigt hab. Hab grad mal den Artikel zu WPF bei Wiki gelesen und das scheint auch sehr interessant zu sein. Gibt es da was herausragend empfehlendes zur Einführung? Die Komponenten sehen ja schon sehr ansprechend aus. Wie flexibel ist man denn da? Sorry dass ich so breit und querfeldein frage, nur sieht das für mich alles nach ner Menge Arbeit aus, die ich auch gern investiere nur kann ich das nicht in 4-5 verschiedenen Richtungen gleichzeitig. Vllt. wär die .Net variante ja was, für Anregungen bin ich weiterhin offen Vielen Dank schonmal, ich glaube ihr erspart mir ein paar Tage Frust vorm PC |
AW: GDI+ oder graphics32
Hallo,
bezüglich GDI+ schau dir mal das hier an: ![]() Das ist eine der besten Implementationen der GDI+ API, die mir bis dato in Delphi untergekommen ist. Ich nutze sie selbst in einigen Anwendungen. Von der Website: Zitat:
|
AW: GDI+ oder graphics32
Das Problem kenn ich :wink: Nur funktioniert das ebenso nicht. Normale Arbeiten mit graphics ist kein Problem, nur sobald ich zu Pfaden übergehe klappt bspsw. Path.addellipse(...) nicht mehr. Beim Compilieren schimpft er, dass
Code:
obwohl, dass ja als explizites Beispiel auf der HP schon angezeigt wird. Ich hatte eigentlich nicht vor wieder in der Unit rumzubasteln, es sollte ja so funktionieren, vllt hab ich auch irgend nen Denkfehler.
[DCC Fehler] Unit1.pas(37): E2361 Auf private-Symbol TGPGraphicsPath.AddEllipse kann nicht zugegriffen werden
Noch ne Frage zu .NET und WFP. Müsste ich da Delphi Prism haben und wieviel Zeit (grob) bedarf die Einarbeitung? Ich hab mit .NET noch nicht gearbeitet aber es scheint für die Zukunft ja sehr interessant zu sein. (hab die Frage mal nach: ![]() @AndreFM: Das sieht ganz nett aus, ist aber einerseits schweine teuer und ich würds auch gern selbst können. Es geht nicht nur darum, dass mein Programm später so und so aussieht. Trotzdem vielen Dank. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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