Autor Beitrag
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Sa 17.03.07 00:04 
Normale VCL-Komponenten sind auf OpenGl-Formularen nicht mehr sichtbar und oft will man (für Spiele) auch nicht das Standardaussehen, sondern ein eigenes.

Hierfür habe ich glComponents geschrieben.
Das Projekt bietet ein Bitmap-Fontsystem und die meisten Standard-Komponenten für OpenGl.

Die Komponenten wären im Einzelnen:

  • TglLabel
  • TglPanel
  • TglButton
  • TglEdit
  • TglCheckbox
  • TglRadioButton
  • TglImage


Besonderheiten sind:

  • Animierte Statusübergänge der Komponenten
  • Skinnbar
  • Image und Button unterstützen nicht POT-Bilder Geschwindigkeitsverlust und auch auf alten Rechnern


Hinweis: Es wird nur Y-Ursprung oben unterstützt, Standard für OpenGl ist jedoch unten
So funktioniert das ganze Perfekt zusammen mit Fear2d



Die Verwendung von glComponents erfolgt ähnlich wie die manuelle Initialisierung von VCL-Komponenten, es müssen allerdings einige Besonderheiten beachtet werden.

Zuerst muss eine zentrale Verwaltungsklasse vom Typ TglManager erstellt werden. Deren Konstruktor wird als Parameter entweder Breite und Höhe des Formulars oder direkt das Formular übergeben. Optional kann auch noch der Standardskin und das Verzeichnis angegeben werden.

Nun können einzelne Komponenten erstellt werden. Hier sind die Parameter des Konstruktors entweder nur die Verwaltungsklasse oder eine übergeordnete Komponente.

Die meisten Eigenschaften der Komponenten orientieren sich an der VCL, eine Ausnahme bildet jedoch Color:
Hier werden OpenGl-typisch die Rot-, Grün-, Blau- und Alphawerte (Transparenz) einzeln in Single-Variablen mit dem Wertebereich 0 - 1 gespeichert. Normale Delphi-TColor-Werte können über die Methode FromTColor benutzt werden.


Damit die Eingaben nun auch bei den Komponenten ankommen, müssen mehrere Arten von Ereignissen an die Verwaltungsklasse weitergeleitet werden.

Das sind im einzelnen:

  • MouseDown
  • MouseUp
  • MouseMove
  • KeyDown
  • KeyUp


In der Ereignisbehandlung müssen nun die gleich benannten Methoden der Verwaltungsklasse aufgerufen werden, die in der Regel auch die selben Parameterlisten haben.

Zusätzlich muss noch die Windows-Botschaft CM_DIALOGKEY abgefangen werden (die zugehörige Ereignisbehandlung muss dann leer sein), damit auch auf die Tab-Taste reagiert wird.


Die gesamte GUI kann hier inklusive eines Demo-Projekts runtergeladen werden: wilson.kilu.de/counter/load.php?id=3

Lizenz: 2-clause-BSD
Aktuelle Version: 0.1

Benötigte Units:

  • Fear2d: Nur für die Demo benötigt, Initialisierung kann auch manuell erfolgen
  • dglOpenGl: Sollte eigentlich auch mit anderen OpenGl-Implementationen für Delphi laufen, habe ich aber nicht getestet
  • glBitmap


EDIT: Screenshot hinzugefügt
Einloggen, um Attachments anzusehen!
_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.


Zuletzt bearbeitet von jakobwenzel am So 03.06.07 19:49, insgesamt 2-mal bearbeitet
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Sa 17.03.07 01:16 
hm, ich habe jetzt einfach mal deine kompilierte Demo gestartet und die geht irgendwie grad gar nimmer mehr. Der meldet mir am Anfang eine AV. Danach wird der gesamte Bildschirm weiß und im Sekundentakt kommen AV- Meldungen, die ich nicht sehen kann (man hörts halt und bekommts zu Gesicht, wenn man den Taskmanager mal in den Vorderfrund ziehen konnte)

Gruß
alias5000

_________________
Programmers never die, they just GOSUB without RETURN
jakobwenzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Sa 17.03.07 12:06 
Haste alles extrahiert oder die Exe direkt aus dem Archiv gestartet?

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Sa 17.03.07 12:38 
Nene, schon alles extrahiert

_________________
Programmers never die, they just GOSUB without RETURN
jakobwenzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Sa 17.03.07 14:36 
Komisch, ich hab das jetz auf 3 Computern ausprobiert und auf keinem kann ich den Fehler reproduzieren.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: Sa 17.03.07 20:40 
Bei mir gehts! Allerdings ist der Mauszeiger etwas träge - die Bewegungen werden also erst mit einige gewissen Verzögerung umgesetzt. (Framerate: 85FPS - VerticalSync ist über den Treiber aktiviert)
Wäre schön, wenn man das noch verbessern könnte, also dass der Mauszeiger direkt anspricht.
Ansonsten: super!
Eddie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58

WinXP SP2
Delphi 5 Standard,Delphi 2005 Architect
BeitragVerfasst: Sa 17.03.07 20:40 
Hi, ich habs grad mal bei mir ausprobiert. Es funktioniert einwandfrei ^^
Und ich kann nur eins dazu sagen: Respekt!!!
Sieht genial aus, ich werd wohl noch ein wenig damit rumspielen.

_________________
Der Programmierer ist nur ein Tool, dass Koffein in Code konvertiert.
jakobwenzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Sa 17.03.07 20:52 
user profile iconDanniolo hat folgendes geschrieben:
Bei mir gehts! Allerdings ist der Mauszeiger etwas träge - die Bewegungen werden also erst mit einige gewissen Verzögerung umgesetzt. (Framerate: 85FPS - VerticalSync ist über den Treiber aktiviert)
Wäre schön, wenn man das noch verbessern könnte, also dass der Mauszeiger direkt anspricht.

Das wird eigentlich schon so direkt umgesetzt, wie es mit eigenem Mauszeiger geht.
Stockt die Bewegung, oder ist sie einfach nur verzögert?

Ansonsten noch danke für das Lob.

Wenn das mal jemand mit NVidia-Grafikkarte testen könnte wäre das toll, denn ich hab hier zu Hause nur ATI-Karten, bei einem Freund mit NVidia-Karte gibts jedoch kleine Darstellungsfehler bei den Checkboxen und Radiobuttons. Kann das irgendwer reproduzieren?

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Sa 17.03.07 21:07 
ich kann das nachher mal auf Vista mit nem Intel 945 GM Chipsatz testen. Nur halt jetzt nich, da kriege ich dann Haue, weil meine Family darüber ne DVD gucken will :lol:

Gruß
alias5000

_________________
Programmers never die, they just GOSUB without RETURN
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: Sa 17.03.07 21:16 
user profile iconjakobwenzel hat folgendes geschrieben:
Das wird eigentlich schon so direkt umgesetzt, wie es mit eigenem Mauszeiger geht.
Stockt die Bewegung, oder ist sie einfach nur verzögert?

Die Bewgung stockt nicht - sie ist ledigleich verzögert.

user profile iconjakobwenzel hat folgendes geschrieben:

Wenn das mal jemand mit NVidia-Grafikkarte testen könnte wäre das toll, denn ich hab hier zu Hause nur ATI-Karten, bei einem Freund mit NVidia-Karte gibts jedoch kleine Darstellungsfehler bei den Checkboxen und Radiobuttons. Kann das irgendwer reproduzieren?


Bei mir (Nvidia GeForce 6800 GT) gibt es keine erkennbaren Grafikfehler (siehe hier).
Eddie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58

WinXP SP2
Delphi 5 Standard,Delphi 2005 Architect
BeitragVerfasst: Sa 17.03.07 22:20 
Ich habe eine nVidia GeForce 7950GT und es wird auch alles ohne Probleme/Darstellungsfehler angezeigt.

_________________
Der Programmierer ist nur ein Tool, dass Koffein in Code konvertiert.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 18.03.07 13:29 
Hallo Jakob,

2 Dinge fallen mir gerade zu deinen Komponenten ein.
Zum einem: Woran liegt es, dass das Umstellen des Styles bei 800 FPS immer noch 2-3 Sekunden dauert? Denn an OpenGL liegt es garantiert nicht ;).
Und zum zweiten: Kannst du mal eine Kleinigkeit testen (wenn ich deine Demo selber kompiliere bekomme ich nur AVs ;) )? Und zwar: Verkleine mal irgendeine deiner OpenGL-Kompos auf so ca. 5Px. Warum ich Frage? Ich habe selber mal angefangen OGL-Kompos zu schreiben. Ergebnis: OpenGL scheint nicht dafür geeignet zu sein :(.

Grüße HEiko
jakobwenzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 18.03.07 13:38 
user profile iconHeiko hat folgendes geschrieben:
Zum einem: Woran liegt es, dass das Umstellen des Styles bei 800 FPS immer noch 2-3 Sekunden dauert? Denn an OpenGL liegt es garantiert nicht ;).

Die neuen Grafiken werden von der Festplatte geladen, wobei die alten dann verworfen werden. In nem richtigen Programm wird (wenn der Stil überhaupt mal gewechselt wird) das wohl eher sehr selten gewechselt werden, weshalb man das eigentlich vernachlässigen kann.
user profile iconHeiko hat folgendes geschrieben:

Und zum zweiten: Kannst du mal eine Kleinigkeit testen (wenn ich deine Demo selber kompiliere bekomme ich nur AVs ;) )? Und zwar: Verkleine mal irgendeine deiner OpenGL-Kompos auf so ca. 5Px. Warum ich Frage? Ich habe selber mal angefangen OGL-Kompos zu schreiben. Ergebnis: OpenGL scheint nicht dafür geeignet zu sein :(.

Funktioniert perfekt. :wink:
Was solte denn deiner Meinung nach passieren?

Dass die neu kompilierte Demo bei dir aber nicht läuft find ich komisch. :gruebel:

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 18.03.07 13:52 
user profile iconjakobwenzel hat folgendes geschrieben:
Funktioniert perfekt. :wink:
Was solte denn deiner Meinung nach passieren?

Siehe Link. Wenn du Bilder verwendest, ist es klar, warum es funktioniert. Aber: IsSt es nicht übertriebemn für jeden Button ein Bild zu nehmen? Eigentlich zeichnet man das direkt mit OGL ;).

user profile iconjakobwenzel hat folgendes geschrieben:
Dass die neu kompilierte Demo bei dir aber nicht läuft find ich komisch. :gruebel:

ka, der hatte irgendein Prob mit der Initialisierung von OpenGL.
jakobwenzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 18.03.07 13:58 
user profile iconHeiko hat folgendes geschrieben:
user profile iconjakobwenzel hat folgendes geschrieben:
Funktioniert perfekt. :wink:
Was solte denn deiner Meinung nach passieren?

Siehe Link. Wenn du Bilder verwendest, ist es klar, warum es funktioniert. Aber: IsSt es nicht übertriebemn für jeden Button ein Bild zu nehmen? Eigentlich zeichnet man das direkt mit OGL ;).

Find ich nicht, dadurch reduziert sich der Aufwand beim erstellen eines neuen Styles (grad nur noch ein Bild machen), es können theoretisch neue Styles hinzugefügt werden, ohne das Programm neu zu kompilieren.
Du würdest die Buttons dann aus mehreren verschiedenfarbigen Teilen zusammensetzen, oder was?
user profile iconHeiko hat folgendes geschrieben:

user profile iconjakobwenzel hat folgendes geschrieben:
Dass die neu kompilierte Demo bei dir aber nicht läuft find ich komisch. :gruebel:

ka, der hatte irgendein Prob mit der Initialisierung von OpenGL.

Komisch... Haste irgendwas an der Demo geändert?

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 18.03.07 14:07 
user profile iconjakobwenzel hat folgendes geschrieben:
Find ich nicht, dadurch reduziert sich der Aufwand beim erstellen eines neuen Styles (grad nur noch ein Bild machen), es können theoretisch neue Styles hinzugefügt werden, ohne das Programm neu zu kompilieren.
Du würdest die Buttons dann aus mehreren verschiedenfarbigen Teilen zusammensetzen, oder was?


Siehe Link. Wenn du Bilder verwendest, ist es klar, warum es funktioniert. Aber: IsSt es nicht übertriebemn für jeden Button ein Bild zu nehmen? Eigentlich zeichnet man das direkt mit OGL ;).


user profile iconjakobwenzel hat folgendes geschrieben:
Komisch... Haste irgendwas an der Demo geändert?

Nein. Ich habe lediglich bei Fear2D die Version von Martok verwendet, weil die von Fear wegen seinem ServerCrash ja nimmer da ist, verwendet und dort alles, was mit Sound zu tun hat ausgeklammert.

Aso, könnte es vlt. daran liegen, dass ich bei der glCompos-Unit ne ganze Menge an TExturen-Prozeduren ausgeklammert habe, da du da irgendeine Konstante nimmst, die meine Units nicht kennen (glBitmap 1.8.10; dglOpenGL V1.8 BETA)?


Zuletzt bearbeitet von Heiko am So 18.03.07 14:14, insgesamt 1-mal bearbeitet
jakobwenzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 18.03.07 14:11 
user profile iconHeiko hat folgendes geschrieben:
Aso, könnte es vlt. daran liegen, dass ich bei der glCompos-Unit ne ganze Menge an TExturen-Prozeduren ausgeklammert habe, da du da irgendeine Konstante nimmst, die meine Units nicht kennen (glBitmap 1.8.10; dglOpenGL V1.8 BETA)?

Ich hab die glOpenGl V2.0, daran dürfts liegen.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 06.04.07 18:23 
die qualität ist bei mir ziemlich mies, wenn ich AA aus habe, vor allem weil die schrift dann so dick ist. ansonsten siehts sehr schick aus ;)

ansonsten ne coole unit ;) sieht auch alles sehr schick aus. praktisch wäre noch ein editor für die grafiken, damit man die leichter selbst machen kann ;)

ahja und dass man den buttons verschiedene größen geben kann, wäre wirklich net schlecht, dann musst du die button grafik nur geschickt zerteilen und wieder zusammenfügen

mfg
jakobwenzel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Sa 07.04.07 16:34 
user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
die qualität ist bei mir ziemlich mies, wenn ich AA aus habe, vor allem weil die schrift dann so dick ist. ansonsten siehts sehr schick aus ;)

Das liegt wahrscheinlich an ClearType. (Zumindest ist es bei mir aus, es sieht normal aus, und auf einem anderen Rechner wo es an ist, tritt der selbe Fehler auf) Ich bastel momentan an ner neuen Version, da wird das dann automatisch deaktiviert.

user profile iconF34r0fTh3D4rk hat folgendes geschrieben:

ansonsten ne coole unit ;) sieht auch alles sehr schick aus. praktisch wäre noch ein editor für die grafiken, damit man die leichter selbst machen kann ;)

Das ist doch einfach nur ne Zip-Datei in der die ganzen Grafiken liegen. Ein eigener Editor ist da IMHO ziemlich nutzlos. :?

user profile iconF34r0fTh3D4rk hat folgendes geschrieben:

ahja und dass man den buttons verschiedene größen geben kann, wäre wirklich net schlecht, dann musst du die button grafik nur geschickt zerteilen und wieder zusammenfügen

Einfach width und height setzen, oder meinst du irgendwas anderes? :nixweiss:

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 07.04.07 16:38 
Wenn du eh am basteln einer neuen bist: könntest du das vielleicht so machen, dass man das auch halbwegs portieren kann?

Ich versuche grade, das ganze mit SDL kompatibel zu machen, aber neu schreiben scheint wohl einfacher zu werden....


EDIT: ahja...glBitmap ist Windows-Only. Gut, dann brauchen wir eh eine neue mit SDL_IMAGE...

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."