Codefehler bei Repeatschleife

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Codefehler bei Repeatschleife

Beitrag 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!
Ich benutze PureBasic 3.30
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag 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) 
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Beitrag 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.
Ich benutze PureBasic 3.30
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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")
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Beitrag 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.
Ich benutze PureBasic 3.30
Antworten