Kontextmenü

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

Florian

Betreff: Kontextmenü

BeitragSa, Jan 27, 2007 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Type TKontextmenu
 Field X1,X2
 Field Y1,Y2
 Field PosX,PosY
 Field Menu$
 Field MenuName$
End Type

Global Kontextmenu.TKontextmenu
Global Kontextmenu_Aktiv$
Global KontextmenuSchrift
Global MausUeberKontextmenu$
Global Kontextmenuauswaehlt$

Global Timer=CreateTimer(20)

Graphics 800,600,0,2
SetBuffer BackBuffer()

KontextmenuSchrift=LoadFont("",18)



Erstellt ein Kontextmenü mit den Namen "Test".

;
;Mit den Namen kann man das Menü später löschen
;----------------------------------------------------------------
;Function DeleteKontextmenu(MenuName$)
;--------------------------------------------------------------

CreateKontextmenu (200,200,200,200,"Test1|~Test2|-|Test3|Test4|","Test")

Repeat
 DrawKontextmenu
 RunKontextmenu
 WaitTimer Timer
 Flip
 Cls
Forever

Function  RunKontextmenu()
 Color 255,255,255
 Text 0,0,Kontextmenu_Aktiv$

; Menüname
 Select Kontextmenu_Aktiv$
  Case "Test"
   If Len(Kontextmenuauswaehlt) Then
    Color 255,255,0
    Text 100 ,100, Kontextmenuauswaehlt$
    Select Kontextmenuauswaehlt$
     Case "Test1"
     Case "Test2"
     Case "Test3"
     Case "Test4"
    End Select
   Else
    Color 255,255,255
    Text 200,200, MausUeberKontextmenu
    Select MausUeberKontextmenu
     Case "Test1"
     Case "Test2"
     Case "Test3"
     Case "Test4"
    End Select
   EndIf
 End Select
End Function


Function DeleteKontextmenu(MenuName$)
 If Len(MenuName$) Then Return False
 If Kontextmenu_Aktiv$ = MenuName$ Then
  Kontextmenu_Aktiv$ = ""
 EndIf
 For Kontextmenu.TKontextmenu = Each TKontextmenu
  If Kontextmenu\MenuName$ = MenuName$ Then
   Delete Kontextmenu
   Return True
  EndIf
 Next
End Function

Function CreateKontextmenu(X1,X2,Y1,Y2,Menu$,MenuName$)
 If MenuName$="" Then Return False
 If X1<0 Or Y1<0 Then Return False
 If Len(Menu$)=0 Then Return False
 If Right$(Menu$,1)<>"|" Then Return False

 For Kontextmenu.TKontextmenu = Each TKontextmenu
  If MenuName$=Kontextmenu\MenuName$ Then
   Return False
  EndIf
 Next

 Kontextmenu= New TKontextmenu
 
 Kontextmenu\X1=X1
 Kontextmenu\X2=X2
 Kontextmenu\Y1=Y1
 Kontextmenu\Y2=Y2

 Kontextmenu\Menu$=Menu$
 Kontextmenu\MenuName$=MenuName$
 
 Return True
End Function


Function DrawKontextmenu()
 If Len(Kontextmenuauswaehlt)>0 Then
  Kontextmenuauswaehlt = ""
  Kontextmenu_Aktiv    = ""
 EndIf
 MausUeberKontextmenu = ""
 
 If MouseDown (2) Then
  KontextmenuGefunden=False
  For Kontextmenu.TKontextmenu = Each TKontextmenu
   If Kontextmenu\X1=<MouseX() Then
    If Kontextmenu\Y1=<MouseY() Then
     If Kontextmenu\X1+Kontextmenu\X2-1=>MouseX() Then
      If Kontextmenu\Y1+Kontextmenu\Y2-1=>MouseY() Then
       Kontextmenu_Aktiv= Kontextmenu\MenuName$
       Kontextmenu\PosX =MouseX()
       Kontextmenu\PosY =MouseY()
       KontextmenuGefunden=True
       Exit     
      EndIf
     EndIf
    EndIf
   EndIf
  Next
  If KontextmenuGefunden=False Then
   Kontextmenu_Aktiv=""
  EndIf
 EndIf

 If Len(Kontextmenu_Aktiv)>0 Then
  For Kontextmenu.TKontextmenu = Each TKontextmenu
   If Kontextmenu_Aktiv=Kontextmenu\MenuName Then
    If MouseDown(1) Then
     If MouseX()<Kontextmenu\X1 Or MouseX()>Kontextmenu\X1+Kontextmenu\X2 Or MouseY()<Kontextmenu\y1 Or MouseY()>Kontextmenu\Y1+Kontextmenu\Y2 Then
      Kontextmenu_Aktiv=""
      Return False
     EndIf
    EndIf

    SetFont KontextmenuSchrift
    X=Kontextmenu\PosX-2
    Y=Kontextmenu\PosY-2
    Breit=0
    Index=1
    For I=1 To MenuCount(Kontextmenu\Menu$)
     IndexNeu=Instr(Kontextmenu\Menu$,"|",Index)
     MenuName$=Mid$(Kontextmenu\Menu$,Index,IndexNeu-Index)
     If Left$(MenuName$,1)="~" Then
      MenuName$=Mid$(MenuName$,2)
     EndIf   
     If Breit<StringWidth("----"+MenuName$) Then
      Breit = StringWidth("----"+MenuName$)
     EndIf
     Index=IndexNeu+1 
    Next 

    Color 0,0,$D8CCB8
    Rect X,Y,Breit,(MenuCount(Kontextmenu\Menu$)+1)*FontHeight()
    Color 220,220,220
    Rect X,Y,1,(MenuCount(Kontextmenu\Menu$)+1)*FontHeight()


    If X=<MouseX() Then
     If (X+Breit)=>MouseX() Then
      If Y+(0.5)*FontHeight()=<MouseY() Then
       If Y+((MenuCount(Kontextmenu\Menu$))+0.5)*FontHeight()=>MouseY() Then
        MausUeberMenu=Ceil((MouseY()-Y-(FontHeight()/2)-1)/FontHeight())+1
        Index=1
        For I=1 To MausUeberMenu
         IndexNeu=Instr(Kontextmenu\Menu$,"|",Index)
         MenuName$=Mid$(Kontextmenu\Menu$,Index,IndexNeu-Index)
         Index=IndexNeu+1 
        Next   
        If MenuName$ <> "-" Then
         If Left$(MenuName$,1) <> "~" Then
          If MouseDown(1)=True Then           
           Kontextmenuauswaehlt = MenuName$
          Else
           MausUeberKontextmenu = MenuName$
          EndIf
          Color 0,0,$0A246A
          Rect X,Y+Ceil((MouseY()-Y-(FontHeight()/2)-1)/FontHeight())*FontHeight()+(FontHeight()/2),Breit,FontHeight(),0
          Color 0,0,$B6BDD2
          Rect X+1,Y+1+Ceil((MouseY()-Y-(FontHeight()/2)-1)/FontHeight())*FontHeight()+(FontHeight()/2),Breit-2,FontHeight()-2
         EndIf
        EndIf
       EndIf
      EndIf
     EndIf
    EndIf

    Index=1
    For I=1 To MenuCount(Kontextmenu\Menu$)
     IndexNeu=Instr(Kontextmenu\Menu$,"|",Index)
     MenuName$=Mid$(Kontextmenu\Menu$,Index,IndexNeu-Index)
     If MenuName$ = "-" Then
      Color 128,128,128
      Rect X+StringWidth("--"),Y+((I-1)+1)*FontHeight(),Breit-StringWidth("----"),2
     ElseIf Left$(MenuName$,1)="~" Then
      MenuName$=Mid$(MenuName$,2)
      Color 92,92,92 
      Text X+StringWidth("--"),Y+((I-1)+0.5)*FontHeight (),MenuName$
     Else
      Color 0,0,0 
      Text X+StringWidth("--"),Y+((I-1)+0.5)*FontHeight (),MenuName$
     EndIf
     Index=IndexNeu+1   
    Next
   EndIf
  Next
 EndIf

 If Len(Kontextmenuauswaehlt)>0 Then
  Return True
 EndIf
End Function


Function MenuCount(Count$)
 For I=1 To Len(Count$)
  If Mid$(Count$,I,1)="|" Then Cnt=Cnt+1
 Next
 Return Cnt
End Function

  • Zuletzt bearbeitet von Florian am Sa, Jan 27, 2007 0:27, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jan 27, 2007 0:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht gut aus, aber mach mal, dass man sich den Code nicht erst zusammen basteln (aus drei Teilen) muss. Man kann es auch so machen, dass man angibt '''Hier kommt jetzt die blub.bb -Include''' oder sowas, da dieses Beispiel ja wohl am meisten von anderen auch so gehandhabt wird.

TheMatrix

BeitragSa, Jan 27, 2007 3:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, bei mir erscheint irgendwie nichts am Bildschirm Crying or Very sad ...
°_° °.° °~° °v° .. -.-

SpionAtom

BeitragSa, Jan 27, 2007 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei erscheint auch nix, und das Kontextmenü lässt sich nur dann aufrufen, wenn man irgendwo in der Mitte rechtsklickt....
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

Florian

BeitragSa, Jan 27, 2007 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Code: [AUSKLAPPEN]

Function CreateKontextmenu(X1,X2,Y1,Y2,Menu$,MenuName$)


X1, X2, Y1 und Y2 geben den Bereich an dem das Kontextmenü erscheinen soll. X1 und Y1 geben die Position an. X2 und Y2 geben die Höhe und Breite an.

MfG

Florian

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group