Seite 1 von 1

Codefehler bei Repeatschleife

Verfasst: 06.06.2007 15:52
von kreeph
Hallo Leute, heute möchte ich mich kurz fassen. Im folgenden Code ist ein Fehler, den ich nicht zu beheben weiß. Es soll in der Systray-Leiste ein Symbol angezeigt werden jenachdem ob man eine Verbindung mit dem Internet oder nicht hat. InternetGetConnectedState_(0,0) funtioniert sonst bei mir gut (1=Verbindung,0=keine) aber im Code scheint etwas zu fehlen oder nicht zu stimmen:

Code: Alles auswählen

OpenWindow(0,0,0,0,0,0,""):HideWindow(0,1)
On=LoadImage(0,"On.ico")
Of=LoadImage(0,"Of.ico")
AddSysTrayIcon(0,WindowID(0),Of)
Repeat

If InternetGetConnectedState_(0,0)=1:ChangeSysTrayIcon(0,On):Else:ChangeSysTrayIcon(0,Of):EndIf
Select WaitWindowEvent():
Case #PB_Event_SysTray:
Select EventGadgetID():
Case 1:
If EventType() = 2:
End:
EndIf:
EndSelect:
EndSelect

ForEver
Zu den Icons: Ganz normale 16x16 Icons. Ach ja, kann ich per IncludeBinary auch irgentwie Icons einbauen die ich mit einer Catch-Funktion wieder verwenden kann? Bei 3.30 geht damit nur .bmp.
Danke schonmal für eure Antworten!

Verfasst: 06.06.2007 16:11
von STARGÅTE
da passiert nix was die Schleife an dem PUNKT stehen bleibt :

Code: Alles auswählen

...
Select WaitWindowEvent()
...
und erst weiter läuft wenn es ein Event gibt, was bei einem HideWindow() schwer wird ^^.
Also läuft die schleife erst weiter wenn z.B. das #PB_Event_SysTray eintritt.

mach einfach mal das :

Code: Alles auswählen

OpenWindow(0,0,0,0,0,0,""):HideWindow(0,1) 
On=LoadImage(0,"On.ico") 
Of=LoadImage(0,"Of.ico") 
AddSysTrayIcon(0,WindowID(0),Of) 
Repeat 

If InternetGetConnectedState_(0,0)=1:ChangeSysTrayIcon(0,On):Else:ChangeSysTrayIcon(0,Of):EndIf 

Delay(10)

Select WindowEvent(): 
 Case #PB_Event_SysTray: 
  Select EventGadgetID(): 
   Case 1: 
    If EventType() = 2: 
     End: 
    EndIf: 
  EndSelect: 
EndSelect 

ForEver 

Verfasst: 06.06.2007 16:22
von D@nte
>Ach ja, kann ich per IncludeBinary auch irgentwie Icons einbauen die ich mit einer Catch-Funktion wieder verwenden kann?

Code: Alles auswählen

;- IncludeBinary Section
;{
Global Image0

Image0 = CatchImage(0, ?Image0)

DataSection
  Image0:
    IncludeBinary "C:\Programme\PureBasic\Examples\Sources\Data\CdPlayer.ico"
EndDataSection
;}

Code: Alles auswählen

AddSysTrayIcon(0,WindowID(0),Image0) 

Verfasst: 06.06.2007 16:45
von kreeph
Hi Leute, danke erstmal für die Antworten, aber es gibt da immer noch ein Problem. Die Icons werden einfach nicht gewechselt und bleiben wie beim Start. Ich habe das Gefühl, dass irgendetwas mit den ImageIDs nicht stimmt. Also die On und Of.

Verfasst: 06.06.2007 17:03
von STARGÅTE
ach so ja ^^

On=LoadImage(0,"On.ico")
Of=LoadImage(0,"Of.ico")

mach das mal zu

On=LoadImage(1,"On.ico")
Of=LoadImage(2,"Of.ico")

Verfasst: 06.06.2007 17:37
von kreeph
Ach Mist...
edit: Vorsichtshalber ein :mrgreen:


Der Code sieht bis jetzt so aus:

Code: Alles auswählen

OpenWindow(0,0,0,0,0,0,""):HideWindow(0,1) 
On=LoadImage(0,"1.ico") 
Of=LoadImage(1,"0.ico") 
AddSysTrayIcon(0,WindowID(0),Of)
Repeat 

If InternetGetConnectedState_(0,0)=1
ChangeSysTrayIcon(0,On)
Alpha=1
Else
ChangeSysTrayIcon(0,Of)
Alpha=0
EndIf 

If Alpha<>Beta:For k=10 To 50:beep_(k*10,1):Next:EndIf
Beta=Alpha

Delay(10) 
ForEver 
Es enststeht aber eine ca. 20sec Verzögerung bei mir bis sich was tut. Wie kann ich das beheben? UNd wie kann ich jetzt in 3.30 die Icons in die exe packen und im Systray anzeigen? Per catchimage gehts nicht.