Button und Menü

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Kaeru Gaman hat geschrieben:für POPUP-menus gibts dochn eigenes Disable...? :|
Nein, ist doch dasselbe wie ein Menu, lediglich das man es als PopUp einblendet.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

argl.. hab mich verlesen... Bild
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Beitrag von Regenduft »

Hä? Ich glaub ich steh' gerade mal wieder voll auf der Leitung... oder ich bin blind (für Insider: wie bei Filesize). Ich habe gerade die Anleitung gelesen... Aber da ist nur DisplayPopupMenue(). Ich raffs nicht. :oops:

EDIT: :lol: ROFL! :lol: Habe zu langsam getippt! Da hat wohl jemand Display und Disable durcheinandergebracht! :wink:
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
Ligatur
Beiträge: 196
Registriert: 09.07.2006 00:41

Beitrag von Ligatur »

Für Windows geht es so:

Code: Alles auswählen

  #MenNr = 1
  
  If OpenWindow(0, 200, 200, 200, 100, "DisableMenuItem Example")
    If CreateMenu(0, WindowID(0))
      MenuTitle("Project")
        MenuItem(1, "Open")
        MenuItem(2, "Save")
      MenuTitle("Edit")
        MenuItem(3, "Copy")
        MenuItem(4, "Paste")
      MenuTitle("Options")
        MenuItem(3, "Color")
        MenuItem(4, "Position")
	  	ButtonGadget(0, 5, 5, 80, 20, "Disable Menu", #PB_Button_Toggle)
    EndIf

    Repeat
    	Event = WaitWindowEvent()
    	If Event = #PB_Event_Gadget
    		If EventGadget() = 0
		  		MenID = MenuID(0)
    			If GetGadgetState(0)
						EnableMenuItem_(MenID, #MenNr, #MF_BYPOSITION | #MF_GRAYED)
    			Else
						EnableMenuItem_(MenID, #MenNr, #MF_BYPOSITION | #MF_ENABLED)
    			EndIf
    			RedrawWindow_(WindowID(0), 0, 0, #RDW_FRAME | #RDW_INVALIDATE)
    		EndIf
    	EndIf
    Until Event = #PB_Event_CloseWindow
  EndIf

Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Beitrag von Regenduft »

@Ligatur: Super! :allright:

Mir ist übrigens auch noch eine ganz primitive Lösung ohne WinAPI eingefallen, wie man ein komplettes (Popup-)Menü disablet (aus Bequemlichkeit Ligaturs Quellcode als Basis):

Code: Alles auswählen

Procedure DisableMenu(Menu, State)
  If IsMenu(Menu)
    Protected i
    For i = 0 To $FFFF ; sollte ausreichen ;-)
      DisableMenuItem(Menu, i, State)
    Next i
  EndIf
EndProcedure

If OpenWindow(0, 200, 200, 200, 100, "DisableMenuItem Example")
  ButtonGadget(0, 5, 5, 80, 20, "Disable Menu", #PB_Button_Toggle)
  If CreatePopupMenu(0)
    MenuItem(1, "Open")
    MenuItem(2, "Save")
    MenuItem(3, "Copy")
    MenuItem(4, "Paste")
    MenuItem(5, "Color")
    MenuItem(6, "Position")
  EndIf

  Repeat

    Event = WaitWindowEvent()

    If Event = #PB_Event_Gadget
      If EventGadget() = 0
        DisableMenu(0, GetGadgetState(0))
      EndIf
    EndIf

    If GetAsyncKeyState_(#VK_RBUTTON)
      DisplayPopupMenu(0, WindowID(0))
    EndIf

  Until Event = #PB_Event_CloseWindow

EndIf
...hätte ich eigentlich gleich drauf kommen können...
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Antworten