Probs mit Popup-Menü

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Da zappelt viel zu viel rum

pack die visualisierungssachen in einen thread

like so

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 

Procedure anzeige()
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())) 
  Delay(100)
ForEver  
EndProcedure
CreateThread(@anzeige(),0)
  ;Popup-Menü managen 
  Repeat
    
  Select  WaitWindowEvent() 
  
    Case #WM_RBUTTONDOWN 
      Debug "rechter Mausknopf" 
      DisplayPopupMenu(0,WindowID()) 
    Case #PB_EventMenu 
      Select EventMenuID()    
        Case 1 : Debug "Menu: Info" 
        Case 2 : Debug "Menu: Options" 
      EndSelect      
  EndSelect
  
  
  Sleep_(0) 
Until EventGadgetID()=1
weiß aber nicht ob das im weiteren Programmverlauf Auswirkungen hat auf die im Thread benutzten Strings. ..siehe dazu (string und thread) in der hilfe oder im ollen Forum
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von memdee »

Hm, danke soweit schonmal, die Popups funzen jetzt :)
Hatte mich mit Threads noch nicht beschäftigt, deshalb kam ich da nicht drauf ;)

Gibt zwar noch ein paar kleinere Probs, aber die krieg ich auch so hin :)

Hab Dank!
meep?
Antworten