Probs mit Popup-Menü

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Probs mit Popup-Menü

Beitrag von memdee »

Hi!
Warum funktioniert folgender Code nicht?

Code: Alles auswählen

OpenWindow(1,posx,posy,1024,30,#PB_Window_BorderLess, title$)

CreatePopupMenu(0)
MenuItem(1,"Info")
MenuItem(2,"Optionen")

;blablabla, hauptschleife und so weiter und so fort

    If WaitWindowEvent() = #WM_RButtonDown  
        Debug "rechte maustaste gedrückt" 
        DisplayPopupMenu(0,WindowID())   
    ElseIf WaitWindowEvent()= #PB_EventMenu        
        Select EventMenuID()    
          Case 1 : Debug "Menu: Info" 
          Case 2 : Debug "Menu: Options" 
        EndSelect 
    EndIf
Nichtmal der Debugger gibt etwas an (gegen meine Vermutungen). Kann es sein, dass mit der Konstanten #WM_RButtonDown irgendetwas nicht stimmt? So wie der Code jetzt ist ist er allerdings recht genau aus dem Beispiel übernommen (welches bei mir funktioniert).

Falls das wichtig ist: Das Fenster ist mit SkinWin OnTop gemacht und Borderless (wie oben zu sehen).

Irgendwelche Ideen (oder Hinweise auf völlige Blödheit meinerseits :D )?
meep?
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

versuchs mal damit:

Code: Alles auswählen

eventID.l = waitwindowevent()
if eventID = #PB_Event_Gadget
  if eventtype() = #PB_EventType_RightClick
    ;... tu das...
  endif
else
;...
endif
Das würde dann abfragen, ob über einem Gadget die rechte Maustaste gedrückt wurde...

Noch was anderes, du solltes dein Window-Event in einer Variablen speichern. Sonst kann es sich schnell ändern und verfälscht werden. Also z.B. so wie oben in der Variablen eventID.l.
Eventuell liegt es sogar daran, dass in deinem Code nicht registriert wird, dass das Event mal Maustaste-gerdrückt war, sondern dass nur das Loslassen der Maustaste registriert wird, eben weil es so schnell umgeschaltet wird. Weiß nicht ob das so ist, ist eine Vermutung. Entweder du machst es mit der Methode von oben, das Funktioniert aber imo nur auf Gadgets, oder aber du speicherst das Event vorher in einer Variablen und hoffst dass es dann geht. :mrgreen:
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von memdee »

Leider Fehlanzeige :(
Mit keiner deiner Methoden, weder mit deiner noch mit meiner Konstanten funktioniert es, auch nicht auf nem Gadget :|

Trotzdem danke für die Hilfe soweit.
meep?
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

öhm, der ganze Code ist zu viel zum posten oder wie? Wenns so nicht geht, hast du da vorher vielleicht irgendwo was reingebastelt was dann den Fehler verursacht...
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

So gehts:

Code: Alles auswählen

OpenWindow(1,posx,posy,1024,30,#PB_Window_BorderLess, title$) 

CreatePopupMenu(0) 
MenuItem(1,"Info") 
MenuItem(2,"Optionen") 

;blablabla, hauptschleife und so weiter und so fort 

Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #WM_RButtonDown
      DisplayPopupMenu(0,WindowID())
    Case #PB_EventMenu
      Select EventMenuID()    
        Case 1 : Debug "Menu: Info" 
        Case 2 : Debug "Menu: Options" 
      EndSelect      
  EndSelect  
ForEver
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von memdee »

So geht es, ja, aber sobald ich das in meinen Code (der übrigens wirklich ein bisschen groß ist :roll: ) einbaue geht es nicht mehr.
Kann das was mit SkinWin zu tun haben (hab allerdings wie schon gesagt nur OnTop verwendet)?

€dit: Nein, kann nicht sein...habs grad ohne OnTop probiert, streikt trotzdem. :|
meep?
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Ich denk eher, Du hast 'nen Fehler eingebaut und wenn Du deinen großen Code nicht zeigen möchtest, kann man Dir wohl schlecht helfen.
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von memdee »

Ich fürchte nur eher, dass dann meine anderen kleinen Schnitzer auffallen und meine Formatierung euch blind macht :D

Aber gut, ich entrümpel den Code mal etwas und stell ihn dann hier rein :)
meep?
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von memdee »

Hier ist er, viel Spaß damit:

Code: Alles auswählen

Global Totalram.l, Freeram.l
Procedure.f FreeRAM()  
    Info.MEMORYSTATUS 
    Info\dwLength = SizeOf(MEMORYSTATUS) 
    GlobalMemoryStatus_(@Info) 
    Totalram = Info\dwTotalPhys
    ProcedureReturn (100 / Totalram) * Freeram 
EndProcedure 

Structure int64 
  Long1.l 
  Long2.l 
EndStructure 


OpenFile(1,"config.inf")
drive$ = ReadString() 

SetErrorMode_(#SEM_FAILCRITICALERRORS) 

;Position des Fensters?                                     

posx.w=Val(ReadString())
posy.w=Val(ReadString())

;On-Top?
ontop.b=Val(ReadString())

;Version?
version$=ReadString()

;Ping-URL?
pingurl$=ReadString()

;Ping anzeigen?
config_execping.b=Val(ReadString())

CloseFile(1)


OpenWindow(1,posx,posy,1024,30,#PB_Window_BorderLess, "PC-Stats v"+version$+"")
If ontop=1
  MakeStayOnTop(WindowID(1),#True)
EndIf
CreatePopupMenu(0)
MenuItem(1,"Info")
MenuItem(2,"Optionen")


CreateGadgetList(WindowID())
ButtonGadget(1,980,1,40,28,"Quit")
TextGadget(2,2,1,30,28,"Free Ram:")
TextGadget(3,141,1,60,28,"")
TextGadget(4,202,1,30,28,"Free HDD:")
TextGadget(5,332,1,70,28,"")
StringGadget(6, 920, 6, 50, 18, "", #PB_String_ReadOnly)
TextGadget(7,430,1,33,28,"CPU- Usage:")
TextGadget(8,700,6,70,28,"Ping: "+Str(ping))

LoadFont(1,"Arial",18)
UseFont(1)

If config_execping=1
 If InternetAttemptConnect_(pingurl$) = #ERROR_SUCCESS
   execping=1
 Else
   execping=0
 EndIf
EndIf

execcpu=1
exechdd=1
  Repeat
    ;RAM ausrechnen
    freerampro.w=FreeRAM()
    
    ;HDD ausrechnen
    If exechdd=1
     GetDiskFreeSpaceEx_(@drive$, BytesFreeToCaller.int64, TotalBytes.int64, TotalFreeBytes.int64)
     SetErrorMode_(0) 
     TotalMB = ((TotalBytes\Long1 >> 20) & $FFF) | (TotalBytes\Long2 << 12) 
     FreeMB = ((TotalFreeBytes\Long1 >> 20) & $FFF) | (TotalFreeBytes\Long2 << 12)
     FreeHDProzent.f=(100/TotalMB)*FreeMB
    EndIf
    exechdd+1
    If exechdd=3
      exechdd=1
    EndIf
    
    ;CPU ausrechnen
    If execcpu=1
     CpuUsage=CpuUsage()
    EndIf
    execcpu+1
    If execcpu=3
      execcpu=1
    EndIf
    
    ;PING ausrechnen
    If config_execping=1                
     If execping=1
      If Random(5)=2
      starttime=GetTickCount_()
       If InternetCheckConnection_(pingurl$, 1, 0) ! 0
        ping=GetTickCount_()-starttime
      Else
        starttime=0
       EndIf
      EndIf
     EndIf
    EndIf
   
    ;RAM darstellen
    StartDrawing(WindowOutput())
    DrawingFont(FontID())
    DrawingMode(1)
    Box(40,1,100,26,RGB(0,0,0))
    Box(140,1,-100+freerampro,26,RGB(freerampro*2,250,0))
    Locate(70,1)
    FrontColor(150,150,150)
    DrawText(Str(freerampro)+"%")

    ;HDD darstellen
    Box(230,1,100,26,RGB(0,0,0))
    Box(330,1,-100+FreeHDProzent,26,RGB(FreeHDProzent*2,250,0))
    Locate(260,1)
    FrontColor(150,150,150)
    DrawText(Str(FreeHDProzent)+"%")
    
    ;CPU darstellen
    Box(470,1,100,26,RGB(0,0,0))
    Box(470,1,CpuUsage,26,RGB(0,250,0))
    Locate(500,1)
    FrontColor(150,150,150)
    DrawText(Str(CpuUsage)+"%")
    

    ;PING darstellen
    If ping>0
      Circle(690,12,3,RGB(ping,255,0))
    Else
      Circle(690,12,3,RGB(0,0,0))
    EndIf
    
    StopDrawing()
    
    ;Rest darstellen, bla
    SetGadgetText(3,Str(Freeram/(1024*1024))+" MB / "+Str(Totalram/(1024*1024))+" MB")
    SetGadgetText(5,Str(FreeMB)+" MB / "+Str(TotalMB)+" MB")
    SetGadgetText(8,"Ping: "+Str(ping))
     
    ;ZEIT darstellen
    SetGadgetText(6, FormatDate("%hh:%ii:%ss", Date()))
    
    
    ;Popup-Menü managen
    
    Event = WaitWindowEvent()
    
    Select Event
      Case #WM_RButtonDown
        DisplayPopupMenu(0,WindowID())
        Debug "bla"
      Case #PB_EventMenu
        Select EventMenuID()   
          Case 1 : Debug "Menu: Info"
          Case 2 : Debug "Menu: Options"
        EndSelect     
    EndSelect  
    
    
    
  Sleep_(100)
  Until EventGadgetID()=1
meep?
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von memdee »

*up*
Jaja, erstmal den Code verlangen und dann nicht gewillt sein weiterzuhelfen /:->

;)

Nein, ich will ja nicht verlangend klingen...also hat niemand ne Idee worans liegen könnte?
meep?
Antworten