|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 08.01.2011, 03:09 Titel: OpenWIZ-GUI [Version 2.1] *Update* |
|
|
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
Zuletzt bearbeitet von Westbeam am 08.01.2011, 16:14, insgesamt 3-mal bearbeitet |
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
|
Nach oben |
|
|
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 08.01.2011, 15:35 Titel: |
|
|
Oh gott, tut mir Leid. Ich war gestern sehr in Eile.
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
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 |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 08.01.2011, 18:04 Titel: |
|
|
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 |
|
|
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 08.01.2011, 18:17 Titel: |
|
|
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:
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).
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 |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 08.01.2011, 18:53 Titel: |
|
|
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). |
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 |
|
|
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 08.01.2011, 19:01 Titel: |
|
|
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 |
|
|
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 08.01.2011, 19:15 Titel: |
|
|
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 |
|
|
|
|
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.
|
|