Seite 1 von 2

Probs mit Popup-Menü

Verfasst: 12.09.2004 23:07
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 )?

Verfasst: 12.09.2004 23:20
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:

Verfasst: 12.09.2004 23:28
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.

Verfasst: 12.09.2004 23:45
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...

Verfasst: 13.09.2004 01:19
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

Verfasst: 13.09.2004 13:17
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. :|

Verfasst: 13.09.2004 16:13
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.

Verfasst: 13.09.2004 16:37
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 :)

Verfasst: 13.09.2004 16:59
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

Verfasst: 15.09.2004 11:31
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?