GUI Problem
Übersicht

MatheBetreff: GUI Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich hab gestern angefangen eine kleine GUI zu programmieren leider funktioniert das Fenster verschrieben beim Fenster: - TestWindow - lol nicht wirklich aber das Fenster Optionen lässt sich normal verschieben... kann mir jemand helfen? Hier der GUI Code: Code: [AUSKLAPPEN] Type Button
Field Btn_String$ Field Btn_X%, Btn_Y% Field Btn_Width%, Btn_Height% Field Btn_Group% Field Btn_Color_disable$, Btn_Color_enable$ End Type Type Window Field Win_String$ Field Win_X%, Win_Y% Field Win_Width%, Win_Height% Field Win_Move%, Win_disX%, Win_disY% Field Win_ID% Field Win_Color_disable$, Win_Color_enable$ End Type Function ButtonState(Button$) ; Button Name For btn.Button = Each Button If String_Btn$ = Button$ Then Return Btn_State% Next Return End Function Function CreateButton(btn_Text$, x%, y%, breite%, hoehe%, gruppe%) btn.Button = New Button btn.Button\Btn_String = btn_Text btn.Button\Btn_X = x btn.Button\Btn_Y = Y btn.Button\Btn_Width = breite btn.Button\Btn_Height = hoehe btn.Button\Btn_Group = gruppe btn.Button\Btn_Color_disable = "255,255,255" btn.Button\Btn_Color_enable = "255,255,255" Return Handle (btn.Button) End Function Function UpdateButton() SaveColorBlue = ColorBlue SaveColorGreen = ColorGreen SaveColorRed = ColorRed For btn.Button = Each Button If Rectsoverlap(btn.Button\Btn_X, btn.Button\Btn_Y, btn.Button\Btn_Width, btn.Button\Btn_Height, MouseX(), MouseY(), 1,1) Then ;Farbe auswerten enable point1% = Instr(btn.Button\Btn_Color_enable, ",") point2% = Instr(btn.Button\Btn_Color_enable, ",",point1+1) ColorB = Mid(btn.Button\Btn_Color_enable, 1, point1-1) ColorG = Mid(btn.Button\Btn_Color_enable, point+1, point2-1) ColorR = Mid(btn.Button\Btn_Color_enable, point2+1, -1) Else ;Farbe auswerten disable point1% = Instr(btn.Button\Btn_Color_disable, ",") point2% = Instr(btn.Button\Btn_Color_disable, ",",point1+1) ColorB = Mid(btn.Button\Btn_Color_disable, 1, point1-1) ColorG = Mid(btn.Button\Btn_Color_disable, point+1, point2-1) ColorR = Mid(btn.Button\Btn_Color_disable, point2+1, -1) EndIf ;Win_Move bei Buttons verarbeiten.. For Win.Window = Each Window If Win.Window\Win_Move = 1 And btn.Button\Btn_Group = Win.Window\Win_ID Then btn.Button\Btn_X = btn.Button\Btn_X + Win.Window\Win_disX btn.Button\Btn_Y = btn.Button\Btn_Y + Win.Window\Win_disY EndIf Next ;Button zeichnen Color ColorB,ColorG,ColorR Rect btn.Button\Btn_X, btn.Button\Btn_Y, btn.Button\Btn_Width, btn.Button\Btn_Height, 0 Text btn.Button\Btn_X + btn.Button\Btn_Width/2, btn.Button\Btn_Y + btn.Button\Btn_Height/2, btn.Button\Btn_String, 1,1 Next Color SaveColorBlue, SaveColorGreen, SaveColorRed End Function Function SetButtonColor(ID%, rgb_disable$, rgb_enable$) btn.Button = Object.Button(ID) btn.Button\Btn_Color_disable = rgb_disable btn.Button\Btn_Color_enable = rgb_enable End Function Function HitButton(ID%) btn.Button = Object.Button(ID) If MouseX() <= btn.Button\Btn_X + btn.Button\Btn_Width And MouseX() >= btn.Button\Btn_X And MouseY() <= btn.Button\Btn_Y + btn.Button\Btn_Height And MouseY() >= btn.Button\Btn_Y And MouseDown(1) Then Return True Else Return False EndIf End Function Function CreateWindow(Name$, x%,Y%, breite%,hoehe%) Win.Window = New Window Win.Window\Win_String = Name Win.Window\Win_X = x Win.Window\Win_Y = y Win.Window\Win_Width = breite Win.Window\Win_Height = hoehe Win.Window\Win_Color_disable = "255,255,255" Win.Window\Win_Color_enable = "255,255,255" Win.Window\Win_ID = Handle (Win.Window) Return Handle (Win.Window) End Function Function SetWindowColor(ID%, Color_disable$, Color_enable$) Win.Window = Object.Window(ID) Win.Window\Win_Color_disable = Color_disable Win.Window\Win_Color_enable = Color_enable End Function Function UpdateWindow() SaveColorBlue = ColorBlue SaveColorGreen = ColorGreen SavecolorRed = ColorRed For Win.Window = Each Window If RectsOverlap(Win.Window\Win_X, Win.Window\Win_Y, Win.Window\Win_Width, Win.Window\Win_Height, MouseX(), MouseY(), 1,1) Then ;Farbe auswerten enable point1% = Instr(Win.Window\Win_Color_enable, ",") point2% = Instr(Win.Window\Win_Color_enable, ",",point1+1) ColorB = Mid(Win.Window\Win_Color_enable, 1, point1-1) ColorG = Mid(Win.Window\Win_Color_enable, point+1, point2-1) ColorR = Mid(Win.Window\Win_Color_enable, point2+1, -1) Else ;Farbe auswerten disable point1% = Instr(Win.Window\Win_Color_disable, ",") point2% = Instr(Win.Window\Win_Color_disable, ",",point1+1) ColorB = Mid(Win.Window\Win_Color_disable, 1, point1-1) ColorG = Mid(Win.Window\Win_Color_disable, point+1, point2-1) ColorR = Mid(Win.Window\Win_Color_disable, point2+1, -1) EndIf ;Fenster zeichnen Color ColorB,ColorG,ColorR Rect Win.Window\Win_X, Win.Window\Win_Y, Win.Window\Win_Width, Win.Window\Win_Height, 0 Rect Win.Window\Win_X, Win.Window\Win_Y, Win.Window\Win_Width, StringHeight(Win.Window\Win_String) + 6 , 0 ;Fenster schließen closeX = Win.Window\Win_X + Win.Window\Win_Width - 3 - StringHeight(Win.Window\Win_String) closeY = Win.Window\Win_Y + 3 closeWH = StringHeight(Win.Window\Win_String) Rect closeX, closeY, closeWH, closeWH,0 Line closeX, CloseY, closeX + closeWH -1, closeY + closeWH -1 Line closeX, closeY + closeWH -1, closeX + closeWH -1, closeY ;Fenster Minimieren minX = Win.Window\Win_X + Win.Window\Win_Width - 3 - StringHeight(Win.Window\Win_String) - 5 - closeWH minY = Win.Window\Win_Y + 3 minWH = closeWH Rect minX, minY, minWH, minWH,0 Rect minX+2, minY+5, minWH-4 ,minWH-8,0 ;Fenster beschriften Text Win.Window\Win_X +3, Win.Window\Win_Y + StringHeight(Win.Window\Win_String)/2 +3, Win.Window\Win_String ,0,1 ;Fenster bewegen Win.Window\Win_disX = MouseXspeed() Win.Window\Win_disY = MouseYspeed() If MouseDown(1) And RectsOverlap (Win.Window\Win_X, Win.Window\Win_Y, Win.Window\Win_Width, Win.Window\Win_Height, MouseX(), MouseY(), 1, 1) Then Win.Window\Win_Move = 1 Win.Window\Win_X = Win.Window\Win_X + Win.Window\Win_disX Win.Window\Win_Y = Win.Window\Win_Y + Win.Window\Win_disY Else Win.Window\Win_Move = 0 EndIf Next Color SaveColorBlue, SaveColorGreen, SaveColorRed End Function Hier die Befehle die die GUI aufrufen: Code: [AUSKLAPPEN] Graphics 1024,768,32,2 SetBuffer BackBuffer() win1 = CreateWindow("Optionen", 400,300,300,400) win2 = CreateWindow("TestWindows", 0,0,300,400) win3 = CreateWindow("lol ;)", 500,200,100,200) button1 = CreateButton("Spieler", 450,350,100,25,win1) button2 = CreateButton("Grafik", 450,400,100,25, win1) button3 = CreateButton("Sounds", 450,450,100,25, win1) button4 = CreateButton("Ende", 450,500,100,25, win1) button5 = CreateButton("TestButton", 100,50, 100,25, win2) SetButtonColor(button1,"123,123,123","210,250,220") SetButtonColor(button5,"0,50,42","123,45,235") SetWindowColor(win1,"123,235,12","120,120,80") Repeat Cls Color 250,10,50 Text 0,0, "Hallo" If HitButton(button4) = 1 Then End If HitButton(button1) = 1 Then Text 1024/2, 768/2, "Huhu es geht! ;)" ,1,1 UpdateButton() UpdateWindow() Flip 1 Until KeyHit(1) Edit: Hier die Exe... mfg. |
||
- Zuletzt bearbeitet von Mathe am Do, Dez 25, 2008 13:07, insgesamt 2-mal bearbeitet
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
MouseXSpeed und MouseYSpeed werden nach jedem Aufruf genullt wenn ich nicht irre. Speicher die einmal pro Update in Variablen zwischen und es sollte gehen. | ||
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 |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nein MouseXSpeed und MouseYSpeed werden in ein Typefeld gespeicher...
Win.Window\Win_disX = MouseXSpeed Win.Window\Win_disY = MouseYSpeed Edit: Hab jetzt rausgefunden warum sich die Fenster nicht richtig bewegen versteh ich nur nicht ganz... Das Fenster das verschoben wird muss an erster stelle des Types verschoben werden! Nur ich versteh nicht ganz warum, aber es funktioniert.... ![]() Insert Win Before First Window |
||
- Zuletzt bearbeitet von Mathe am Do, Dez 25, 2008 19:07, insgesamt einmal bearbeitet
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es liegt an Mousex/yspeed, denn du speicherst das für jede Instanz und für jede Instanz ausser der ersten ist es natürlich null, wie ich oben schon schrieb. Speicher das Ergebnis der beiden Funktionen in typeunabhängige Variablen und es geht ohne dass du die Typeorder ändern musst. | ||
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 |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ähm okey... danke...
hab jetzt das mit der Global Variable ausprobiert funktioniert aber auch nicht.. das gleiche Problem wie davor... jetzt versteh ich nur noch Bahnhof ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne Code ist da nix los, aber ich tippe mal blind darauf dass Du die globale Variable immer noch innerhalb der Typeschleife zuweist und sie deshalb bei der 2en Instanz 0 ist.
Richtig wäre: Code: [AUSKLAPPEN] Function UpdateWindow(...)
xdist = mousexspeed() ydist=mouseyspeed() for win.window = each window bla blub next ... Und noch besser wäre es in der Tat diese Distanzen ganz global zu speichern damit sie überall im Programm zur Verfügung stehen. Wenn Du eh ne GUI machst wäre ein Type der solche Werte speichert und der einmal pro Frame ein Update erfährt eine Möglichkeit: Code: [AUSKLAPPEN] Type TInputManager
field mh field x_dist, y_dist etc etc... global INPUTManager.TINPUTMANAGER = new TINPUTMANAGER Function update_INPUT() inputmanager\mh = mousehit(1) inputmanager\x_dist = ... |
||
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 |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ohhh ähm ja... ![]() habs jetzt verstanden und richtig geändert.... und siehe da es funktioniert... danke Noch was: wenn ich jetzt nach einen Type Object suche mit: bbb.bbb = Object.bbb(ID%) Return bbb.bbb\bbb_Leben ist das nicht genau das gleiche wie: For bbb.bbb = Each bbb If bbb.bbb\bbb_ID = ID then Return bbb.bbb\bbb_Leben Next oder ist das eigenständige suchen langsamer? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group