Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Apr 28, 2024 22:23

Foren-Übersicht » Sonstiges » Meinungen zu den Projekten
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 66 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 22, 2008 19:52 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
GDI und OpenGL/DirectX soll man nicht mischen innerhalb eines "Fensters" (TWinControls zählen als fenster)

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 22, 2008 19:59 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 10:36
Beiträge: 285
Wohnort: Oldenburg
Programmiersprache: Object Pascal
ach warum das nicht ?
machen das nicht viele Anwendungen ? z.b. GDI und OpenGL bei Delphi... wenn ein Fenster von der VCL genutzt wird.
oder wenn man die WinAPI nutzt, wird es doch auch schon gemischt. oder verstehe ich da jetzt was falsch ?

_________________
MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 22, 2008 20:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Als ich mit Traude und I0n0s versucht haben gemeinsam die DGLGUI zu schreiben, haben wir das Canvas und VCL Konzept beachtet.
Dabei haben wir Canvas Abstrakt designed und davon abgeleitet, um OpenGLCanvas,DXCanvas,GDICanvas,SDLCanvas und was es sonnst noch gibt zu realisieren. Die Objekte nutzen nur die abstrakten klassen von TCanvas aber die sind ja überladen und damit geht alles gut. Der Canvas wurde immer auf vom Parent übernommen. Klassen wie z.B. OpenGLViewport würden dann als Property Canvas das OpenGLCanvas haben und alle Widgets die bei der Klasse als Child fungieren, würden dann automatisch das OpenGLCanvas nehmen und nicht das GDI. Am Ende gingen unsere Meinungen der Realisierung stark auseinander und das Projekt wurde tot geplant. Wenn ihr in den Code mal ein Blick werfen wollt, dann hier. Traude und ich haben mehere Ansätze ausprobiert und dementsprechend sind auch mehere Versionen im Repo. Meine letzte version hatte OpenGL und GDI support. Meine neue GUI, von Karmarama, arbeitet mit einem ähnlichem Konzept und ist auch unabhängig, was man drunter packen will. Wenn man meine GUI unter DX nutzen will müsste man von TKar_Shape eine klasse ableiten z.B. TKar_ShapeDX und passend eine TKar_ContextDX erstellen, die dann von der GUI genutzt wird um Instanzen zu erstellen. Shape basierte Widgets sind für solche dinge eh 10mal besser. Flexibler, DX und OpenGL kompatible, schneller(wegen algorythmen und float ist heute schneller als integer) und überhaupt besser xD(okey verbrauchen wesentlich mehr Speicherplatz, wegen den Vektoren).

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 22, 2008 20:50 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 10:36
Beiträge: 285
Wohnort: Oldenburg
Programmiersprache: Object Pascal
so ähnlich mache ich das auch, nur das ich keine Shape Komponenten nutze, sondern alles selbst zeichne ist für mich einfach sinvoller. Ich habe mir mal dein "GUI" Projekt runter geladen, habe mir schon verschiedene angesehen als Anregungen *G* auch FPGU

edit: ich bin gerade auf diese seite gestoßenen sehr intressant :
viewtopic.php?t=6160&highlight=lua

_________________
MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 25, 2008 12:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich will meine GUI nun auch nochmal aufpeppen.
Ich habe eine Anfrage bekommen, ob ich ein Editor, für eine fertige GameEngine, schreibe.
Da ich selber für meine auch noch einen brauch, will ich mich erstmal drum kümmern die letzten dinge in meiner GUI fertig zu stellen.
Sehr wichtig ist z.B. ein GUI Editor(welchen ich mit Glade schon besitzte), ein reader für GUI Dokumente(XML lässt grüßen), ein gescheites Themeformat(auch XML und bietet die Möglichkeit Shapes zu erstellen) und ein Einheitliche Darstellung.
Die einheitliche Darstellung wird durch die Shapes gewährleistet und die Schrift wird durch freetype2 gelöst.
Ich habe in der aktuellen Implementierung auf die OS Schriften gesetzt aber diese sind trotz gleicher ttf und settings ziemlich unterschiedlich im aussehen.
freeType hat auch einige weitere Vorteile, wie z.B. 256Farben Graufonts(Windows GDI hat 5Graustufen), kann direkt ins Projekt reincompiliert werden und unabhängig von jeglichem Code(externe Streams und eigener Renderer). Ausserdem entlastet es den Contextcode, da man nicht für jedes OS die einzelnen Font APIs implementieren muss.
Ich habe ja aktuell ein Windows und ein X11 basiertes Fenstersystem , welches jeweils mehrfenstersupport hat und über den Context legt der nutzer fest, welchen Renderer er nutzen will(OpenGL aktuell aber eventuell kommt noch ein fb und gdi support).

Vieleicht inspiriert dich das ein bischen, wenn du deine GUI bastelst.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 25, 2008 16:21 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 10:36
Beiträge: 285
Wohnort: Oldenburg
Programmiersprache: Object Pascal
Die Idee mit XML hatte ich auch. nach dem ich gesehen habe das es unter Lazarus Problemlos Funktioniert. Aber leider habe ich immer noch mit einigen bereichen Probleme. Aber ich komme gut vorran z.b. kann man das Bild in der Image jetzt ausrichten, strecken, oder halt normal, kacheln wollte ich noch hinzufügen. Das geht aber alles nur wenn Autosize auf False steht, dürfte klar sein oder ?

Sobald ich mich am GUI-Editor ran wage, werde ich mich um ein XML Datei Format kümmern. Obwohl ich glaube ich nehme zwei: Ein Bin. und ein XML. Bei Bin ist der Vorteil das laden müsste deutlich schneller gehen als beim XML Format. Beim XML Format ist der Vorteil, es kann ohne Aufwand sachen geändert werden.

Beim GUI Editor habe ich auch noch nix wirklich geplant. Evlt. so eine Art wie in Delphi/Lazarus ist wohl am besten geeignet für sowas würde ich sagen.

Darum möchte ich noch ein Format hinzufügen: Eine Art Style Format, Wo das aussehen der Komponenten drin steht. Wobei hier soll es zwei XML Formate geben: Einmal soll beschrieben werden können wie eine Standard Klasse auszusehen hat, und einmal soll beschrieben werden die jede einzelne Komponente auszusehen hat, da kann sich dann jeder entscheiden, was er nimmt.

Und das gleiche soll es noch mal im Bin Format geben.

Ich habe hier mal im Forum nach GUI gesucht, ich war überrascht, das so viele hier eine eigene GUI schreiben. In anderen Foren, wird immer nur gesagt, warum das Rad 1000 Mal neu erfinden. Aber hier ist das anscheind anders.... Finde ich gut. Da die meisten eine GUI wohl schreiben um A) Als eine übung B) Diese GUI genau auf das Spiel abgestimmt ist C) Weil es einfach Spaß macht(mir auf jeden Fall) was im Grafik bereich zu machen.

Schöner währe es allerdings, wenn wir uns alle zusammen tuen würden und DIE GUI schreiben würden die uns alle gefällt, so währen wir nicht an die LCL/VCL gebunden.

Aber das klappt wohl nicht wie Damals mit den E-Mail-Client, alle fingen an einen zu schreiben, aber ein großes Gemeinwirtschaft Projekt kam nicht zu stunde.

_________________
MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 28, 2008 12:58 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 10:36
Beiträge: 285
Wohnort: Oldenburg
Programmiersprache: Object Pascal
Könnte mir jemand noch ein Beispiel geben wie ich das Scroll Problem lösen Könnte ?
Gestern im IRC hatte ich das nicht so ganz verstanden. Da ich ja eine art Scrollbox brauche.

Die wollte ich dann für meine Listbox, für mein Label und für andere Komponenten einsetzten. Ich habe Probleme damit die ScrollPos Auszurechnen.

_________________
MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 28, 2008 14:59 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Um die größe der Scrollbalkenhöhe zu bestimmen kann folgende Formel nehmen.
Scrollbalken.height:=Listbox.Height/(ListBox.Items.count*ListBox.font.height);
Also die sichtbare höhe durch maximale höhe teilen und man hat das verhältnis, dieses kann man nun auf den balken übernehmen.
Wir wollen die aktuellen Balkenhöhe haben also müssen wir nur die Maximale Balkenhöhe mit dem verhältnis multiplizieren und bekommen die aktuelle Balkenhöhe im gleichen verhältnis zurück. Scrollbarpos kann nun auf meheren wegen gelöst werden.
1.) zeilenweises Scrollen
verhältnis:=Scrollbar.Bar.Height/Scrollbar.height;
Wenn du deine Maus ziehst, dann ist die differenz von beiden mauspositionen/verhältnis der in zeilenanzahl bewegte Wert.
Wenn du den Balken positionierst, dann kannst du Position*verhältnis als Scrollbar.Bar.top nehmen.
2.) relatives Scrollen
Du legst eine verhältnis fest, welches dann z.B. einem Pixel entspricht.
Also errechnest, wieviele Zeilen er springen muss, wenn du den Balken um ein Pixel verschiebst.

Mit der View verhält es sich genauso, nur das dann Sichtbare Höhe/wirkliche Höhe das verhältnis ist.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 14, 2008 19:20 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 10:36
Beiträge: 285
Wohnort: Oldenburg
Programmiersprache: Object Pascal
Ich habe ein neues Problem "gefunden" und zwar bei der Visible Eigenschaft. An sich ist die ja einfach. aber sobald sowas wie ein Panel oder ein PanelControl hinzukommt wird es kompliziert. :(

Ich habe jetzt mehrer Seiten in meinem PanelControll. Jetzt habe ich eine eigene Titelleiste, wo ein Menu angezeigt werden kann. Wenn auf den Button geklickt wird. Wenn ich jetzt auf Einträge dieses Menu Klicke werden die "Falschen" Komponenten gefunden. ist ja auch klar, ich durchsuche die Liste von Unten nach Oben in einer Forschleife. Dabei wird nicht geschaut ob sich Komponenten überlappen.

Ich hoffe ihr versetzt das Problem. Ich habe jetzt eine Lösung eingebaut, aber die gefällt mir noch nicht. bzw. ich möchte eine allgemeine Lösung einbauen.

Wenn eine Komponenten Sichtbar gemacht wird, soll sie in einer Extra Liste kommen.
Beim klicken wird diese Liste durchsucht. von Hinten nach Vorne. so müsste ich das Problem umgehen oder ?

Allerdings ist mir noch unklar, ob ich den Eintrag aus der Liste löschen sollte, wenn ich die Komponente unsichtbar mache oder ob ich den Eintrag einfach nur auf NIL setzte.

Am Liebsten würde ich schauen, ob eine Komponente bereits auf einer anderen liegt. Aber im Moment weiß ich nicht genau wie ich das machen kann. Hätte dazu jemand von euch eine Idee / Vorschlag ?

Ich habe noch weitere Probleme, aber ich denke ich werde die Probleme nach und nach hier posten, damit es nicht zu unübersichtlich wird... *G*.

Ich hoffe euch ist das Problem was ich habe verständlich beschrieben...

_________________
MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 14, 2008 19:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

mhh.. wie wär's, wenn du mal eine hübsche gui machst? die grässlich-bunten bilder zeigen zwar evtl was die gui alles kann, aber... mir fehlt da noch der beweis das man damit auch schöne guis machen kann ^^

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 14, 2008 20:08 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 10:36
Beiträge: 285
Wohnort: Oldenburg
Programmiersprache: Object Pascal
Meinst du jetzt Grafiken ? Die kommen noch *G*.

Bei den Grafiken weiß ich noch nicht genau wie ich die einbauen soll. Gut Hintergrund Grafiken sind Relativ leicht. Aber die Rand Grafiken.... Die Komponente soll ja auch vergrößert werden können.

Die Button sind einfache Labels. Bei den Labels sind ist nur die Eigenschaft noFocus auf True. und bei den Buttons nicht *G*

Ich finde gerade die Bunten Komponenten "toll". Mach doch mal ein kleines beispiel.... Wie du das genau meinst... kann ja einfach nur ein PNG Datei sein oder so...

Ach ja, mein Ziel ist es die GUI so zu schreiben, das die CPU nicht belastest wird. bzw. nicht so stark.

Edit:
Zitat:
mir fehlt da noch der beweis das man damit auch schöne guis machen kan

Kommt noch mit der Zeit.... Ich möchte auch evlt. noch Animationen und sowas hinzufügen. und Farbverläufe.
Wie stellst du dir eine "schöne" GUI vor ? für mich ist die GUI "schön/hübsch". Aber ich baue gerne alle Vorschläge ein sofern mir Möglich...

Die Bilder zeigen leider noch nicht alles. Ich muss mal mein Test Programm hochladen... Es kann aber schon eine menge eingestellt werden... (Allerdings nur was die Farben betreffen)

_________________
MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 14, 2008 20:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Wegen deinem Visible-Problem:
Du solltest da von der Windows-API abschauen. Jede Komponente bekommt eine Parent-Eigenschaft, die angibt, welche Komponente direkt übergeordnet ist. So kannst du im prinzip direkt indem du über die Parent-Eigenschaften nach oben iterierst prüfen, ob eine Control Visible ist. Z.B. so:

Code:
  1.  
  2. var
  3.   CurrentControl: TObject; // TObject wäre dann dein Control-Typ
  4.   IsVisible: Boolean;
  5. begin
  6.   CurrentControl := ToCheckControl; // ToCheckControl <=> die Control, die du prüfen willst
  7.   IsVisible := True;
  8.   while (CurrentControl <> nil) and (IsVisible) do
  9.   begin
  10.     IsVisible := IsVisible and CurrentControl.Visible;
  11.     CurrentControl := CurrentControl.Parent;
  12.   end;
  13. end;
  14.  


Ich habe das in meiner GUI so gelöst, dass ich schon die Controls als Tree vorliegen habe. Also jede Control kennt ihre Child-Controls und ihr Parent-Control. Das macht es mir sehr einfach, nur das zu rendern, das visible ist, indem ich in meiner RenderChildren-Methode prüfe, ob das Child visible ist. Wenn ja, soll es sich und seine Children zeichnen, ansonsten wirds übersprungen.

Wegen deinem Klickerkennungsproblem:
Wie sortierst du, welche Controls zuerst gezeichnet werden? Genau diese Sortierung musst du anwenden, um deinen Clickcheck zu machen, nur umgekehrt, also das, was als letztes gezeichnet wird, wird zuerst auf einen Treffer geprüft, weil das, was als letztes gezeichnet wurde, oben liegt.

Auch da kommt dir übrigens wieder eine Baumartige Control-Struktur zu gute. Dann musst du bei weitem nicht alle Controls prüfen, sondern erstmal nur die, die als Elternelement das Hauptelement haben, auf dem alle Elemente liegen. Wenn davon einer getroffen wurde, prüft der dann auch seine Kinder durhc und so weiter. Das Element, bei dem kein Child den Treffer abbekommt, ist das letzendlich getroffene Element... (klingt irgendwie martialisch, findet ihr nicht? :evil: )

Hoffe, ich konnte helfen.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 14, 2008 22:47 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 10:36
Beiträge: 285
Wohnort: Oldenburg
Programmiersprache: Object Pascal
Zitat:
Wie sortierst du, welche Controls zuerst gezeichnet werden?

Im Moment gar nicht. so wie sie erstellt werden. Genau das ist das Problem.

Alle Komponenten haben bereit eine Parent Eigenschaft. Das mit der Baum Strucktur ist nicht schlecht.
(Bäume sind sowieso meistens nicht schlecht ) :D

Das Problem dabei ist nur im Moment habe ich ALLE Komponenten in einer TObjectList drin. und Komponenten wie Panel oder Listboxen besitzen noch mal eine eigene Liste. Die aber nur ein Pointer enthält.

Ich denke, wenn ich die Baum Struktur einbauen möchte, müsste ich alles nochmal ändern. Evlt. kann ich das in einem zweiten Test Projekt ausprobieren. Nur halt mit wenigen Komponenten.

_________________
MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 15, 2008 00:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Sprich, die Komponenten, die Kinder haben können, haben eine Liste mit ihren Kindern? Damit hast du doch dann schon eine Baumstruktur.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 15, 2008 16:38 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 10:36
Beiträge: 285
Wohnort: Oldenburg
Programmiersprache: Object Pascal
ach so was das gemeint ! Also ist hier die Parent Eigenschaft der "Baum" *G*.

Ich werde das mal mit der "Visible Liste" Versuchen. Im Prinzip sollte das dann klappen mit dem Klicken.

_________________
MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 66 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Foren-Übersicht » Sonstiges » Meinungen zu den Projekten


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.036s | 17 Queries | GZIP : On ]