Etiketten(Tab)-GUI

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

TheMatrix

Betreff: Etiketten(Tab)-GUI

BeitragFr, Jan 12, 2007 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jan 12, 2007 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jan 12, 2007 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ausserdem sind Funktionen schöner Wink Nich diese Ganzen Gosub/to's... Smile
Lieber Apfel als Birne.

TheMatrix

BeitragFr, Jan 12, 2007 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Confused

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° .. -.-

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group