Etiketten(Tab)-GUI
Übersicht

![]() |
TheMatrixBetreff: Etiketten(Tab)-GUI |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nach langer Zeit, will auch ich mal wieder was zum CodeArchiv beitragen.
Für meinen Welt-Editor fand ich es ganz praktisch, einen Tabber zu gebrauchen. Das ist ne Gui, in der man verschiedene Kategorien hinzufügen kann und durch die du dich dann hindurchklicken kannst. Ich meuchte euch kurz einmal die einzelnen Funktion erleutern. Ich habe extra Variabelnamen gewählt, die ihr sicherlich nicht in euer Programm verwendet. Zum Initialisieren der Variabeln, wird der Befehl gosub ini_tabform benötigt. Die Funktionen: Create_tabform(Formgröße X,Formgröße Y,[Tab Größe in x],[Tab Größe in Y]) - Erstellt das Tab-Panel im Hintergrund. Dieses wird erst sichtbar, wenn eine Kategorie hinzugefügt wurde. add_tab(Titel$) - Erstellt eine Kategorie, mit einer Überschrift activate_tab(index) - Aktiviert ein bestimmtes Tab (Generell ist am Anfang das erste Tab aktiviert) activated_tab() - Liefert das derzeit aktivierte Tab. Nötig um den Inhalt dann anzuzeigen. Draw_tabform(x,y) - Zeichnet das Tab an den X-Y Koordinaten tabdrawx() - Gibt den X-Wert zurück an der Stelle zurück, wo innerhalb der Tabform gezeichnet werden darf tabdrawy() - Das selbe wie tabdrawx(). Liefert stattdessen die Y-Position. Der Code: [AUSKLAPPEN] Graphics 640,480,32,2 : SetBuffer BackBuffer() Gosub ini_tabform : Create_tabform(500,300) add_tab("Tab1") add_tab("Tab2") add_tab("Tab3") add_tab("Tab4") add_tab("Linie") add_tab("Kreis") activate_tab(4) ; DIE HAUPTSCHLEIFE While Not KeyHit(1) Cls draw_tabform(50,50) : x = tabdrawx() : y = tabdrawy() Select activated_tab() Case 1 : Text tabdrawx()+5,tabdrawy()+5,"Die ist der 1. Tab " Case 2 : Text tabdrawx()+5,tabdrawy()+5,"Das ist der 2. Tab" Case 3 : Text tabdrawx()+5,tabdrawy()+5,"Und das der 3. :) " Case 4 : Text tabdrawx()+5,tabdrawy()+5,"Wer jetzt zählen kann, ist klar im Vorteil!" Case 5 : Line x+5,y+5,x+100,y+100 Case 6 Oval x+5,y+5,50,50,1 : Text x+100,y+200,"Blub" End Select Oval MouseX()-2,MouseY()-2,4,4 Flip 0 : Delay 5 Wend ; ------------------ ;**************** ; Initialisierung der TabForm-Variabeln ;**************** .ini_tabform Global tabformisvisible = False Global tabformimage Global tabformindex = 0 Global tabimagepressed Global tabimageunpressed Global tabisactivated = -1 Global tabsizex = 60 Global tabsizey = 20 Global tabformdrawpointx = 0 Global tabformdrawpointy = 0 Dim tabindex(20) Dim tabtitle$(20) Return ; Liefert den derzeit aktiven Tab(Etikette) Function activate_tab(index) If index>=1 And index<=tabformindex Then tabisactivated = index End Function Function activated_tab() Return tabisactivated End Function ; Fügt der TabForm ein Tab hinzu Function add_tab(title$) If tabisactivated = -1 Then tabisactivated = 1 : tabformisvisible = True ; Der erste Tab, wird auf aktiv gesetzt ; Die Tabform wird angezeigt i = tabformindex + 1 tabindex(i)=0 ; Tab wird auf "nicht gedrückt" gestellt tabtitle$(i)=title$ ; Überschrift wird gesetzt tabformindex = i End Function ;**************** ; Erstellt die TabForm ;**************** Function Create_tabform(x2,y2,tx=-1,ty=-1) If tx>0 tabsizex = tx : tabsizey = ty End If ; Zeichnet die Tabform tabformimage = CreateImage(x2,y2) : SetBuffer ImageBuffer(tabformimage) Color 90,120,150 : Rect 0,0,x2,y2,1 rot = 200 : gruen = 225 : blau = 255 rot_ende = 140 : gruen_ende = 170 : blau_ende = 200 size_y# = y2 rot_step# = (rot-rot_ende)/size_y# gruen_Step# = (gruen-gruen_ende)/size_y# blau_Step# = (blau-blau_ende)/size_y# For a=1 To y2-2 Color rot-rot_step#*a, gruen-gruen_step#*a, blau-blau_step#*a Line 1,a,x2-2,a Next ; Zeichnet einen ungedrückten Tabber tabimageunpressed = CreateImage(tabsizex,tabsizey) : SetBuffer ImageBuffer(tabimageunpressed) Color 150,180,210 : Rect 0,0,tabsizex,tabsizey,1 rot = 130 : gruen = 160 : blau = 190 rot_ende = 150 : gruen_ende = 180 : blau_ende = 210 size_y# = tabsizey rot_step# = (rot-rot_ende)/size_y# gruen_Step# = (gruen-gruen_ende)/size_y# blau_Step# = (blau-blau_ende)/size_y# For a=1 To tabsizey-2 Color rot-rot_step#*a, gruen-gruen_step#*a, blau-blau_step#*a Line 1,a,tabsizex-2,a Next Color 90,120,150 : Line 0,tabsizey-1,tabsizex-1,tabsizey-1 ; Zeichnet einen gedrückten Tabber tabimagepressed = CreateImage(tabsizex,tabsizey) : SetBuffer ImageBuffer(tabimagepressed) Color 90,120,150 : Rect 0,0,tabsizex,tabsizey,1 rot = 180 : gruen = 210 : blau = 240 rot_ende = 200 : gruen_ende = 225 : blau_ende = 255 size_y# = tabsizey rot_step# = (rot-rot_ende)/size_y# gruen_Step# = (gruen-gruen_ende)/size_y# blau_Step# = (blau-blau_ende)/size_y# For a=1 To tabsizey-1 Color rot-rot_step#*a, gruen-gruen_step#*a, blau-blau_step#*a Line 1,a,tabsizex-2,a Next SetBuffer BackBuffer() End Function ;TabForm anzeigen Function Draw_tabform(x,y) If tabformisvisible y = y + ImageHeight(tabimagepressed)-1 tabformdrawpointx = x+2 tabformdrawpointy = y+2 ; Darstellung der TabForm DrawBlock tabformimage,x,y imgw = ImageWidth(tabimagepressed)-1 imgh = ImageHeight(tabimageunpressed)-1 ; Darstellung der ungedrückten Tabs For a=1 To tabformindex If a<>tabisactivated ; Der GedrückteTab wird nachträglich gezeichnet x2 = x+(a-1)*imgw : y2 = y-imgh DrawBlock tabimageunpressed,x2,y2 ; Die Beschriftung des Tabs Color 90,120,150 : Text x2+imgw/2,y2+(imgh/2)-FontHeight()/2,tabtitle$(a),1 End If Next x2 = x+(tabisactivated-1)*imgw ; Darstellung des gedrückten Tabs DrawBlock tabimagepressed,x2,y-imgh ; Die Beschriftung des Tabs Color 90,120,150 : Text x2+imgw/2,y-(imgh/2)-FontHeight()/2,tabtitle$(tabisactivated),1 ;Anklickbarkeit der Tabs regeln mx = MouseX() : my = MouseY() If mx>x And mx<x+tabformindex*imgw And my>y-imgh And my<y And MouseDown(1) activate_tab(((mx-x)/imgw)+1) End If End If End Function Function tabdrawx() Return tabformdrawpointx End Function Function tabdrawy() Return tabformdrawpointy End Function Wenn ihr mit dieser Funktion etwas anfangen könnt, dann würde ich mich um ein kurzes Feedback freuen. Mfg, Manu |
||
°_° °.° °~° °v° .. -.- |
- Zuletzt bearbeitet von TheMatrix am Fr, Jan 12, 2007 23:22, insgesamt einmal bearbeitet
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich mag die Farbmischung^^
Ich empfehle beim Inhalt zeichnen den Befehl ORIGIN X, Y zu verwenden, so muss man nicht immer x = tabdrawx() : y = tabdrawy() dazurechnen. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ausserdem sind Funktionen schöner ![]() ![]() |
||
Lieber Apfel als Birne. |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, ich werd jetzt aus diesen ganzen Kommentaren nicht so wirklich schlau. Origin kann ja jeder für sich verwenden.
Also ist es schlimm, dass ich ein Gosub verwendet habe? Nun gut, ich wusste auch nicht, wie ich sonst meine Variabeln initialisiere ![]() Aber ich möchte jetzt wissen, kann damit überhaupt jemand was anfangen oder hab ich nur mal wieder weiterhin mehr Müll dem Archiv hinzugefügt? Mfg, Manu |
||
°_° °.° °~° °v° .. -.- |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group