entweder Canvas oder Menü
Übersicht

![]() |
PebenderBetreff: entweder Canvas oder Menü |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
da ich mir BMax zugelegt habe, und vorher in der BB+ Demo angefangen habe an einem Programm zuschreiben, wollte ich das in BMax importieren, leider ohne großen Erfolg.Habe mir auch die MaxGUI aufgespielt. Da ich noch nicht weit war, dachte ich machst das ganze neu direkt in BMax. Bin auch dabei das engl. Tuturial zu lesen. Aber trotzdem hätte ich eine Frage, ist wahrscheinlich nix großes für euch, aber mich bringt es zum verzweifeln. Habe ein Windows erstellt, zwei Canvases hineingepackt, und will eine Menüleiste machen. Habe alles in Funktionen gepackt. Nun habe ich das Problem das ich die Canvases nicht angezeigt bekommen, wenn ich die Menüleiste einbaue. Wenn ich die Canvas entferne bekomme ich die Menüleiste angezeigt,heiß also: entweder Canvas oder Menü, und ich weiß nicht worin der Fehler liegt. Auch wenn ich am Anfang Superstrict schreibe, mault er hingegen bei den Konstanten. Mit Strict allein funktioniert das. Und nicht meckern, habe Teile des Codes aus den Tut´s per Copy & Paste eingefügt. hier mal der Code: Code: [AUSKLAPPEN] Import MaxGUI.drivers
Strict 'Variabeln definieren Global Canvas1:TGadget Global Canvas2:TGadget Global MyWindow:TGadget 'GADGET erstellen 'Hauptfenster und Haupt-Canvas CreateMainWindow(800,600) 'Funktionsaufruf Canvas erstellen CreateCanvases() 'Funktionsaufruf Menuleiste erstellen Menuleiste() 'Hauptblock Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE End Case EVENT_GADGETPAINT Process_GadgetPaintEvent End Select 'DisplayStatusText Forever End 'Funktion Canvases erstellen Function CreateCanvases() Canvas1:TGadget=CreateCanvas(490, 20, 300, 300, MyWindow) Canvas2:TGadget=CreateCanvas(20, 20, 300, 300, MyWindow) End Function 'Funktion Hauptfenster erstellen Function CreateMainWindow:Int(WinWidth:Int,WinHeight:Int) Local Style:Int = WINDOW_TITLEBAR | WINDOW_MENU | WINDOW_STATUS | WINDOW_CLIENTCOORDS Local w:Int=(GadgetWidth(Desktop())-WinWidth)/2 Local h:Int=(GadgetHeight(Desktop())-WinHeight)/2 MyWindow=CreateWindow("Visual Terrazzo",w,h,WinWidth,WinHeight,Null,style) End Function Function Menuleiste:Int() Local filemenu:TGadget Local editmenu:TGadget Local helpmenu:TGadget Const MENU_NEW=101 Const MENU_OPEN=102 Const MENU_SAVE=103 Const MENU_CLOSE=104 Const MENU_EXIT=105 Const MENU_CUT=106 Const MENU_COPY=107 Const MENU_PASTE=108 Const MENU_ABOUT=109 filemenu=CreateMenu("&File",0,WindowMenu(MyWindow)) CreateMenu"&New",MENU_NEW,filemenu,KEY_N,MODIFIER_COMMAND CreateMenu"&Open",MENU_OPEN,filemenu,KEY_O,MODIFIER_COMMAND CreateMenu"&Close",MENU_CLOSE,filemenu,KEY_W,MODIFIER_COMMAND CreateMenu"",0,filemenu CreateMenu"&Save",MENU_SAVE,filemenu,KEY_S,MODIFIER_COMMAND CreateMenu"",0,filemenu CreateMenu"E&xit",MENU_EXIT,filemenu,KEY_F4,MODIFIER_COMMAND editmenu=CreateMenu("&Edit",0,WindowMenu(MyWindow)) CreateMenu "Cu&t",MENU_CUT,editmenu,KEY_X,MODIFIER_COMMAND CreateMenu "&Copy",MENU_COPY,editmenu,KEY_C,MODIFIER_COMMAND CreateMenu "&Paste",MENU_PASTE,editmenu,KEY_V,MODIFIER_COMMAND helpmenu=CreateMenu("&Help",0,WindowMenu(MyWindow)) CreateMenu "&About",MENU_ABOUT,helpmenu UpdateWindowMenu MyWindow While True WaitEvent Select EventID() Case EVENT_WINDOWCLOSE End Case EVENT_MENUACTION Select EventData() Case MENU_EXIT End Case MENU_ABOUT Notify "Was auch immer hier erscheint" End Select End Select Wend End Function 'Funktion EVENT_GADGETPAINT Function Process_GadgetPaintEvent:Int() SetGraphics CanvasGraphics (Canvas1) SetGraphics CanvasGraphics (Canvas2) Cls Flip End Function mfg Peter |
||
BMax & MaxGUI |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast in der Funktion, in der das Menü erstellt wird, eine zweite Hauptschleife drin. Das bringt natürlich nix, denn BMax wird die beiden Loops nicht parallel abarbeiten ![]() Ausserdem solltest du die Konstanten nicht innerhalb der Funktion definieren, sonst sind sie im Hauptprogramm "nicht sichtbar". Das Gemeckere bei SuperStrict kommt daher, weil dann bei jeder Deklaration ein Datentyp spezifiziert werden muss - also z.B. ":Int" (oder die Kurzschreibweise) bei Integervariablen angehängt werden muss. Einmal deklariert, ist es übrigens nicht mehr notwendig, die Typendeklaration weiterhin anzuhängen (siehe Funktion CreateCanvases). BlitzMax: [AUSKLAPPEN] SuperStrict Gut, in der Tat nichts weltbewegendes ![]() mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
jsp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was mir noch so aufgefallen ist:
Wenn du den Style WINDOW_CENTER benutzt kannst du dir das sparen: Local w:Int=(GadgetWidth(Desktop())-WinWidth)/2 Local h:Int=(GadgetHeight(Desktop())-WinHeight)/2 Der Event_GadgetPaint kommt per Canvas, d.h. man könnte je Canvas eine Update Routine schreiben und spezifisch auf das Ereignis reagieren. Statt mit Constanten für das Menü zu arbeiten, kann man auch das erzeugte Menü Gadget selbst abfragen (in der Waitevent() Schleife), das ist sehr viel flexibler wenn man eine Änderung hat. |
||
Logic Gui Professional a Gui Designer for MaxGui |
![]() |
Pebender |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank ihr beiden ,
wenn man das so im nachhinein liest, ist das ja logisch. Hätte man selber drauf kommen können ![]() mfg Peter |
||
BMax & MaxGUI |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group