Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

OpenWIZ-GUI [Version 2.1] *Update*

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 08.01.2011, 03:09    Titel: OpenWIZ-GUI [Version 2.1] *Update* Antworten mit Zitat

Hey



Das ist die neue Version meiner unbrauchbaren GUI, die ich eigentlich für mein Spiel "X-tfb" schreibe(keine Sorge, im Spiel hat sie ein anderes Aussehen).Folgendes wurde geändert:
-Neuer Windows 95-Style
-Fenster kann man einfach verschieben und schließen(ohne komplizierte Types)
-Alle Buttons, Menüs und ähnliches werden zu einem Fenster hinzugefügt und mit diesem bewegt
-Einige neue Funktionen, wie den Kasten, in dem die Icons angezeigt werden
-Menüs

Das ist die Syntax der Befehle:
Code:
MWindow(x,y,breite,höhe,id,titel) = Erstellt ein Fenster an der Position" x,y" mit dem Titel "titel" und der der ID "id"
WindowPressed(id) = Prüft ob das Fenster "id" angeklickt wurde
MoveWindow(id) = Verschiebt das Fenster "id" frei mit der Maus
WindowClose(id) = Prüft, ob der Schließen-Button im Fenster "id" gedrückt wurde
AddText(x,y,text,id) = Fügt einen Text dem Fenster "id" hinzu
AddButton(x,y,text,id1,id2) = Fügt einen Button mit der ID "id1" dem Fenster "id2" hinzu
Buttonpressed(id) = Prüft ob der Button "id" gedrückt wurde
AddField(x,y,text,id) = Fügt ein Feld dem Fenster "id" hinzu
AddBigField(x,y,breite,höhe,id) = Fügt ein großes Feld dem Fenster "id" hinzu. Auf diesem Feld werden Icons angezeigt
AddMenu(x,title,menuid,id) = Erstellt ein Menü mit der Id "menuid" im Fenster "id"
AddMenuEntry(title,entryid,menuid,id) = Erstellt einen Menüeintrag mit der id "entryid" im Menü "menuid" im Fenster "id"
EntryPressed(entryid,menuid,id) = Prüft ob der Eintrag "entryid" im Menü "menuid" im Fenster "id" gedrückt wurde
mouse() = Prüft in jedem Schleifendurchlauf die Position der Maus und den Status der Buttons


Es ist eine Demo vorhanden "DEMO.BAS", die sich von selbst erklärt. Eines noch: Die Positionen der Fenster werden in Arrays mit dem Namen "wx(id)" und "wy(id)" gespeichert. Beim Erstellen eines neuen Fenster, müssen diese Variablen definiert werden. Gleiches gilt für Menüs. Hier wird allerdings nur die Variable"mex(id)" benötigt.
Außerdem habe ich meine "ICONS.BI" beigelegt, in der einige OS/2 und Windows95 Icons gezeichnet werden.

Download: http://www.freebasic-portal.de/downloads/sonstiges/openwiz-guiversion-2-0-171.html

Viel Spaß damit zwinkern


Zuletzt bearbeitet von Westbeam am 08.01.2011, 16:14, insgesamt 3-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 08.01.2011, 14:23    Titel: Antworten mit Zitat

Falls wer ebenso vergeblich nach einem Download-Link sucht:
http://www.freebasic-portal.de/downloads/sonstiges/openwiz-guiversion-2-0-171.html

Weiters ist die Datei kein ZIP-Archiv, sondern im Format TAR.BZ (<-- nein ich hab mich nicht verschrieben zwinkern )

@Westbeam: Fenster lassen sich nicht schließen? Wenn beim Verschieben die Maus außerhalb des Fensters ist verschiebt sich das Fenster ganz nach links oben.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 08.01.2011, 15:35    Titel: Antworten mit Zitat

Oh gott, tut mir Leid. Ich war gestern sehr in Eile. verlegen
Aber warum ist es kein zip-Archiv? Ich habe es als solches archiviert. Hm egal, ich denke das ist kein Problem?

Wegen Fenster schließen: Ich habe das Problem bereits behoben und sobald die Menüs richtig funktionieren gibt es das Update zwinkern

EDIT: Habe das Update hochgeladen, die Änderungen stehen im ersten Post.
EDIT 2: Habe in den Source-Code Dateien das Zeilenende Windowskompatibel gemacht. Nun sollte man die Code-Dateien korrekt in Windows öffnen können.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 08.01.2011, 18:04    Titel: Antworten mit Zitat

Jetzt ist es ein ZIP-Archiv (erkennbar am Dateianfang "PK"). Vorhin hatte es zwar die Dateierweiterung .ZIP, drin war aber ein TAR.BZ (erkennbar am Dateianfang "BZh91").

Irgendwie scheint das ganze noch etwas fehleranfällig zu sein. Beim Verschieben des "Texteditor"-Fensters über das "About"-Fenster sind bei mir z.B. reproduzierbar die anderen beiden Fenster einfach verschwunden. Das About-Fenster lässt sich nicht verschieben (oder soll das so sein?). Beim Verschieben rückt weiters das Fenster immer so hin, dass der Cursor in der Mitte ist. usw. usf.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 08.01.2011, 18:17    Titel: Antworten mit Zitat

St_W hat Folgendes geschrieben:
Beim Verschieben des "Texteditor"-Fensters über das "About"-Fenster sind bei mir z.B. reproduzierbar die anderen beiden Fenster einfach verschwunden.

Hm, kann ich nicht nachvollziehen.
St_W hat Folgendes geschrieben:
Das About-Fenster lässt sich nicht verschieben (oder soll das so sein?)

Nein, soll es nicht. Ich habe lediglich vergessen, dies in der Demo einzustellen. Du kannst folgendes im SourceCode ergänzen, damit es sich ebenfalls bewegen lässt: zwinkern
Code:
ElseIf WindowPressed(3)=1 Then
MoveWindow(3)

St_W hat Folgendes geschrieben:
Beim Verschieben rückt weiters das Fenster immer so hin, dass der Cursor in der Mitte ist

Das soll so seien. Wie ich bereits sagte, ist das Design Win95 nachempfunden. Dort war es so oder so ähnlich, denke ich(Eigentlich bin ich nur zu faul, um die SUB zu ändern). lächeln

Achso: Hat vielleicht jemand eine Idee, wie ich die Fenster nach vorne holen kann? Ich habe diesbezüglich schon nachgedacht und bin leider zu keiner Lösung gekommen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 08.01.2011, 18:53    Titel: Antworten mit Zitat

Westbeam hat Folgendes geschrieben:
Das soll so seien. Wie ich bereits sagte, ist das Design Win95 nachempfunden. Dort war es so oder so ähnlich, denke ich(Eigentlich bin ich nur zu faul, um die SUB zu ändern). lächeln


Okay, aber bei Windows 95 und auch bei Windows 3.1 wars definitiv nicht so. Von den Vorgängern weiß ichs nicht - damit hab ich nie gearbeitet.
Wär vlt. trotzdem eine Überlegung wert das zu ändern - zumal man dieses Verhalten eigentlich nicht erwartet, weil es egal ob Windows, Mac oder Linux einheitlich anders ist.

Westbeam hat Folgendes geschrieben:
Achso: Hat vielleicht jemand eine Idee, wie ich die Fenster nach vorne holen kann? Ich habe diesbezüglich schon nachgedacht und bin leider zu keiner Lösung gekommen.


Im Prinzip musst du dir irgendwo die Reihenfolge der Fenster speichern und dann beim zeichnen der Fenster das unterste zuerst und das oberste zuletzt. Wenn du ein bestimmtes Fenster in den Vordergrund bringen willst kannst du auch nur das eine Fenster erneut zeichnen, um nicht alles neu zeichnen zu müssen.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 08.01.2011, 19:01    Titel: Antworten mit Zitat

St_W hat Folgendes geschrieben:
Okay, aber bei Windows 95 und auch bei Windows 3.1 wars definitiv nicht so. Von den Vorgängern weiß ichs nicht - damit hab ich nie gearbeitet.
Wär vlt. trotzdem eine Überlegung wert das zu ändern - zumal man dieses Verhalten eigentlich nicht erwartet, weil es egal ob Windows, Mac oder Linux einheitlich anders ist.

Ich werde schauen, was ich tun kann. Stört es denn sehr?

St_W hat Folgendes geschrieben:
Im Prinzip musst du dir irgendwo die Reihenfolge der Fenster speichern und dann beim zeichnen der Fenster das unterste zuerst und das oberste zuletzt. Wenn du ein bestimmtes Fenster in den Vordergrund bringen willst kannst du auch nur das eine Fenster erneut zeichnen, um nicht alles neu zeichnen zu müssen.

Wie kann ich denn die Reihenfolge speichern? Es ist ja die Reihenfolge, wie sie im SourceCode festgelegt ist. Ich kann sie ja nur manuell ändern, also nicht während das Programm läuft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 08.01.2011, 19:15    Titel: Antworten mit Zitat

Du brauchst ein Array in dem du die IDs der Fenster speicherst. Wenn du nun die Fenster zeichnest zeichnest du als erstes das fenster im Array an der stelle 0 bis zum groessten element.
Wenn nun ein anderes Fenster in den Vordergrund soll, suchst du die die ID im Array und setzt alle Arrayelemente von diesem element aus, 1 nach hinten und das groesste wird das angeklickte.
Zum veranschaulichen:
Array(0 to 2)
0 ist Fenster 1
1 ist Fenster 2
2 ist Fenster 3
wen du nun zeichnest, wir von Fenster 1 bis Fenster 2 gezichnet.
Nun soll Fenster 1 in den Vordergrund, du suchst die Fenster 1 das ist im Array an der Stelle 0.
Nun nimmst du dir Array Stelle 1 und schreibst sie an Stelle 0 und Stelle 2 und an Stelle 1.
Nun nur noch an Stelle 2 das Aktive fenster und du hast die neue reihenfolge von
0 ist Fenster 2
1 ist Fenster 3
2 ist Fenster 1

/Edit
Sieht gut aus.
Fehler:
Wenn man mit gedrueckter Maustaste ueber das Fenster kommt, wird es normal nicht selektiert, genauso mit Buttons.
Mit den MenueEntrys gibt es noch Probleme
Code:
If mnum=id Then
   Line (wx(winid)+mex(id)+5,wy(winid)+27+ey)-(wx(winid)+mex(id)+146,wy(winid)+43+ey),innen,BF
   Line (wx(winid)+mex(id)+5,wy(winid)+27+ey)-(wx(winid)+mex(id)+146,wy(winid)+43+ey),0,B
   Line (wx(winid)+mex(id)+5,wy(winid)+27+ey)-(wx(winid)+mex(id)+5,wy(winid)+43+ey),15
   Line (wx(winid)+mex(id)+6,wy(winid)+27+ey)-(wx(winid)+mex(id)+145,wy(winid)+27+ey),7
   Color eclr
   Draw String (wx(winid)+mex(id)+9,wy(winid)+27+ey),title
End If
'If (mx>wx(winid)+146+mex(id) And buttons=1) Or (mx<wx(winid)+5+mex(id) And buttons=1) Then
'   mnum=0
'End If
If (mx>wx(winid)+mex(id)+5 And mx<wx(winid)+mex(id)+146) And (my>wy(winid)+27+ey And my<wy(winid)+43+ey) And buttons=1 Then
   mnum2=entryid
   mnum3=id
   mnum4=winid
End If

auch wenn das Entry nicht gezeichnet wird, so kann man es immer noch anklicken. Vielleich mal die letze If abfrage in die andere stellen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz