[GELÖST] MaxGUI Menüfragen
Übersicht

CO2ehemals "SirMO"Betreff: [GELÖST] MaxGUI Menüfragen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich habe ein Problem mit der MaxGUI. Und zwar möchte ich ein Sprach-System einbauen (vorerst Englisch und Deutsch), und brauche dafür ein Menüpunkt mit untermenü. Also das man quasi auf "Extras" -> "Sprache" -> und dann Deutsch oder Englisch markieren kann (Das dann vor der Sprache ein Häckchen ist. Hoffe ihr könnt mir helfen, mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
- Zuletzt bearbeitet von CO2 am Mi, Sep 07, 2011 21:08, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du eine Frage hast - bitte stelle eine! Ich hab' arge Probleme hier zu erkennen, wie man dir weiter helfen könnte, außer dich auf die Dokumentation zu verweisen, wo drin steht, wie man ein Menü erstellt. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Createmenu, Checkmenu. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
jsp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Einfaches Beispiel:
Code: [AUSKLAPPEN] SuperStrict
Import MaxGui.Drivers Local Window1:TGadget = CreateWindow:TGadget("Window1",403,250,382,188,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE |WINDOW_MENU |WINDOW_STATUS |WINDOW_CLIENTCOORDS ) Local Window1_Sprache:TGadget = CreateMenu( "Sprache" , 100 , WindowMenu( Window1:TGadget ) ) Local Window1_Deutsch:TGadget = CreateMenu( "Deutsch" , 101 , Window1_Sprache:TGadget ) CheckMenu( Window1_Deutsch:TGadget ) Local Window1_Englisch:TGadget = CreateMenu( "Englisch" , 102 , Window1_Sprache:TGadget ) UpdateWindowMenu( Window1:TGadget ) Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE Select EventSource() Case Window1 Window1_WC( Window1:TGadget ) End Select Case EVENT_MENUACTION Select EventSource() 'Menu_Events for Gadget = Window1 Case Window1_Deutsch:TGadget Window1_Deutsch_MA( Window1:TGadget , Window1_Sprache:TGadget , Window1_Deutsch:TGadget ) Case Window1_Englisch:TGadget Window1_Englisch_MA( Window1:TGadget , Window1_Sprache:TGadget , Window1_Englisch:TGadget ) End Select End Select Forever Function Window1_WC( Window:TGadget ) DebugLog "Window Window1 wants to be closed" End End Function Function Window1_Deutsch_MA( Window:TGadget , Parent:TGadget , Menu:TGadget ) DebugLog "Menu Deutsch was selected from Window Window1" If MenuChecked(Menu:TGadget) Then UncheckMenu (Menu:TGadget) Else CheckMenu (Menu:TGadget) UpdateWindowMenu Window End Function Function Window1_Englisch_MA( Window:TGadget , Parent:TGadget , Menu:TGadget ) DebugLog "Menu Englisch was selected from Window Window1" If MenuChecked(Menu:TGadget) Then UncheckMenu (Menu:TGadget) Else CheckMenu (Menu:TGadget) UpdateWindowMenu Window End Function |
||
Logic Gui Professional a Gui Designer for MaxGui |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Erstmal danke euch, und entschuldigung, das ich jetzt erst zurückschreibe ![]() So, habe jetzt anhand von Bladerunners Vorschlag ein bisschen rumgedoktert, und da kam das raus, was auch dein Code macht, jsp (nichts desto trotz danke nochmal an dich, jsp ![]() So, daraus entwickeln sich folgende Fragen: 1.) Kann man den MenüTitel und nicht die MenüID auch abfragen? (D.h.: Wird die Sprache "Deutsch" ausgewählt, so soll "Deutsch" zurückgegeben werden, und nicht z.B.: 105) 2.) Wie macht man ein Fenster "unsichtbar"? mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab dir hier mal was aus meiner Standard-GUI-Umgebung rauskopiert:
BlitzMax: [AUSKLAPPEN] ' bei dieser Verwendung von Menues geht sowas: Das System kommt völlig ohne Gadget-Texte aus |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
jsp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Also habe ich mir überlegt, ob man den ausgewählten Menüpunkt nicht einfach mit "GadgetItemText()" auslesen kann.
Ein Menu ist ein TGadget also sollte GadgetText() funktionieren um den Namen zu bekommen. Zitat: Kann man den MenüTitel und nicht die MenüID auch abfragen? (D.h.: Wird die Sprache "Deutsch" ausgewählt, so soll "Deutsch" zurückgegeben werden, und nicht z.B.: 105)
Wie gesagt GadgetText() aber wenn der Menütitel vielleicht nicht 100% das ist was du brauchst, kannst du auch an ein TGadget also dem MenüGadget mit SetGadgetExtra() etwas anhängen z.B. deinen eigenen Text. Name könnte ja "German" sein, dein angehängter Text "Deutsch" DasMenue:TGadget = Createmenu... SetGadgetExtra(DasMenue,"Hier mal die Sprache Deutsch") und später wieder abfragen mit: Text$= String( GadgetExtra(DasMenue) ) 'casten nach string könnte ja auch ein komplexer type sein. Zitat: Wie macht man ein Fenster "unsichtbar"?
HideGadget(Fenster) |
||
Logic Gui Professional a Gui Designer for MaxGui |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ich verstehe nicht ganz, warum du nicht die 105 und lieber den Namen willst. Bei MENU-Einträgen ist es doch gerade gewünscht, das KEINE code-Unterschiede entstehen, bloß weil der User die Sprache geändert hat.
Mit der geplanten Vorgehensweise muss du ja eben grade doch für jede Sprache bei jedem Menüpunkt ein SELECT/CASE vorhalten, damit Du die unterschiedlichen Wörter für LADEN, LOAD ,... abfängst und sie alle in die gleiche Ruotine umlenkst. Da ist doch die 105 eine viel eindeutigere Anweisung! Zitat: .... Menüpunkte unter "Sprache" definiere, kann ich keine MenüID festlegen, da ich sonst in der Hauptschleife 100 (oder mehr) neue Cases einfügen müsste, und selbst ...
warum? diese Argumentation habe ich nicht verstanden. Ich glaube es ist gerade anders herum! Ich biete meine Programme immer in mehreren Sprachen an um komme mit der Verwendung von IDs gut zurecht. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du solltest deine Sprachen aus dem LanguageFile in einer TList speichern, mit dem passenden MenuitemGadget dazu, dann kannst Du alles bequem in einer For-each-Schleife auswerten. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gleich nochmal danke an alle,
@ Midimaster: Zitat: Das System kommt völlig ohne Gadget-Texte aus Wie meinst du das? Also was wären in diesem Fall die Gadget-Texte?
Zitat: also ich verstehe nicht ganz, warum du nicht die 105 und lieber den Namen willst Hab mich missverständlich ausgedrückt: Das restliche Menü basiert schon auf der MenüID, nur weil das Sprachen-Menü eben variabel sein muss, hab ich mir gedacht, das ich im Sprachen-Menü eine ausnahme mache, und mit den Texten arbeite ![]() Zitat: warum? diese Argumentation habe ich nicht verstanden. Weil man doch das menü über die IDs abfragt, je mehr IDs, desto mehr Cases in der Hauptschleife. Und wenn ich das dingen möglichst variabel halten will, lege ich ein Array an, mit z.b.: 100 Plätzen (deshalb die 100 Cases), welches den "lang"-Ordner durchsucht und die enthaltenen Sprachen einspeichert. Dann im Hauptmenü wird jeder Array-Platz kontrolliert, so dachte ich mir das zumindest...
@ jsp: Achso, GadgetText ließt also die Texte des Menüs aus? Ich habs die ganze zeit mit GadgetItemText versucht... Kein wunder, das nix dabei rum kam ![]() ![]() ![]() @ Bladerunner: Also auch mit Types arbeiten? mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Kennt jmd von Euch eine komplette Funktionsübersicht der MaxGUI? Das Modul ist geradezu beispielhaft dokumentiert!
|
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: @ Bladerunner: Also auch mit Types arbeiten?
Darauf läuft es hinaus, wobei ein simpler Containertype ja schon reichen würde. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu CO2:Zitat: ....lege ich ein Array an, mit z.b.: 100 Plätzen (deshalb die 100 Cases), welches den "lang"-Ordner durchsucht und die enthaltenen Sprachen einspeichert. Dann im Hauptmenü wird jeder Array-Platz kontrolliert,...
genau... aber du weißt ja nicht ,welche Sprache irgendwer in den .lang-Ordner reingelegt hat. von daher kannst Du nicht mit deren Namen als "CASEs" im Programm arbeiten. Die einzige Chance ist, über die IDs. Außerdem werden ja auch alle Sprachen "gleich" behandelt. Wenn der User eine Sprache anklickt, ist es ja programmtechnisch völlig egal, welche das war. Hauptsache die gesamten Texte im Programm ändern sich. Was ich mit meinem Code sagen wollte ist, dass man nicht unbedingt 100 CASEs vorbereitet haben muss. Du kannst auch ruhig in einer FOR/NEXT-Schleife den angeklickten Eintrag herausfinden: BlitzMax: [AUSKLAPPEN]
Du kannst ja auch die Language-IDs mit völlig absurden Nummern belegen. Etwa von 1000 bis 1100. Die IDs müssen ja nicht fortlaufend gewählt werden. Parallell dazu betreibst du weiterhin die SELECT/CASE für alle fixen Einträge. zu Midimaster Zitat: Das System kommt völlig ohne Gadget-Texte aus
Da hab ich mich ungenau ausgedrückt. Ich meinte, man braucht die Gadget-Texte dann gar nicht für programmtechnische Dinge zu verwenden. Sie sind nur, was sie sind: die reine optische Darstellung. In einem Mehr-Sprachen-System kannst du sie auch gar nicht zur Programm-Verzweigung benutzen, da sie ja in jeder Sprache anders heißen. Hast Du dich schon mit dem Localitzation-Teil der MaxGui beschäftigt? Das ist optimal für Sprach-Wechsel. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, Danke an euch,
@ Xeres: Zitat: Das Modul ist geradezu beispielhaft dokumentiert! - Wie öffne ich denn diese .bbdoc dateien? Ich binde das Modul mit "Import" am anfang des Codes ein, somit ist bei mir auch kein Sytax-Highlightning (zumindest beim Modul) aktiv.
@ BladeRunner: Also ganz einfach: [PSEUDOCODE] BlitzMax: [AUSKLAPPEN] Type TLanguageOder wie? @ Midimaster: Zitat: Du kannst auch ruhig in einer FOR/NEXT-Schleife den angeklickten Eintrag herausfinden - Das in verbindung mit einem Type: Fertig. Also quasi [PSEUDOCODE] BlitzMax: [AUSKLAPPEN] 'Language Type- Oder wie ist der Aufbau? Zitat: Hast Du dich schon mit dem Localitzation-Teil der MaxGui beschäftigt? - Bisher noch nicht ![]() ![]() mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
- Zuletzt bearbeitet von CO2 am Di, Sep 06, 2011 20:10, insgesamt 2-mal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die .bbdoc Dateien sind plain text, aber öffnen tut man die gar nicht. Du führst einmal "Rebuild Documentation" aus, wenn du ein neues Modul installiert hast, und ein Druck auf F1 auf dem entsprechendem Funktionsnamen im Code sollte dich zur HTML-Dokuseite bringen.
So wie mit jedem anderen Modul auch. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ Xeres: Danke für den Tipp, jetzt wird auch endlich gehighlighted ![]() mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@CO2
den Teil mit dem Einlesen der Menüeinträge verstehe ich. So finde ich es auch sehr sinnvoll. Aber ich bin mir nicht mehr ganz sicher ,ob ich wirklich verstanden habe, was Du genau machen willst, seit ich den zweiten Teil mit dem EVENT_WINDOWCLOSE gelesen habe. Hier scheinst Du irgendwas beim Herunterfahren des Programms speichern zu wollen? Odr möchtest Du nur erreichen, dass der Computer beim nächsten Hochfahren automatisch wieder mit der zuletzt gewählten SprachDatei startet? |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: seit ich den zweiten Teil mit dem EVENT_WINDOWCLOSE gelesen habe. Ich dachte diese For - Next Schleife wird darein gepackt - so ist es für mich eigentlich am logischten, denn er kontrolliert in jedem Durchlauf der Hauptschleife Jeden einzelnen Listen-Eintrag darauf, ob dieser angeklickt wurde.
Oder habe ich mich mit der Position der For Next Schleife vertan? (Das EVENT_WINDOWCLOSE war um zu verdeutlichen, wo ich die For Next Schleife platzieren würde... Ich habe nicht vor das zu speichern, wenn das Programm beendet wird, sondern wenn die Sprache ausgewählt wird ![]() EDIT: Sorry, mein Fehler, lese Gerade, das ich die Zeile "Case EVENT_MENUACTION" vergessen habe, wird sofort geändert! ![]() mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group