OpenNetworkConnection & OpenWindow

Anfängerfragen zum Programmieren mit PureBasic.
EDI
Beiträge: 4
Registriert: 06.06.2006 20:41

OpenNetworkConnection & OpenWindow

Beitrag von EDI »

Hallo alle zusammen,

wenn ich den u.g. Code anwende, verschwindet bei einen zu langen Connect im Fenster das Wort " Bitte warten..." Wie kann ich das verhindern ?

Code: Alles auswählen

Global FontID1
FontID1 = LoadFont(2, "Arial", 12, #PB_Font_Bold)
 If OpenWindow(2, 390, 255, 217, 46, "",  #PB_Window_WindowCentered)
    If CreateGadgetList(WindowID(2))
      TextGadget(2, 10, 15, 200, 20, "Bitte warten...", #PB_Text_Center)
      SetGadgetFont(2, FontID1)
        EndIf
  EndIf
If (OpenNetworkConnection("www.google.de",80))<>0 
MessageRequester("Info","Online",0) 
Else
    MessageRequester("Info","Offline",0) 
EndIf
Gruss, EDI
cofter
Beiträge: 84
Registriert: 10.03.2006 19:07
Wohnort: Berlin
Kontaktdaten:

Beitrag von cofter »

Funktioniert bei mir wunderbar.
In deinem Snippet fehlt aber InitNetwork().
Wenn das so sein sollte hab ich nix gesagt. ^^

mfg
Cofter
Was ich nicht kenne das mach ich kaputt! :D
----------------------------------------------------
Purebasic v4.0
EDI
Beiträge: 4
Registriert: 06.06.2006 20:41

Beitrag von EDI »

cofter hat geschrieben:Funktioniert bei mir wunderbar.
In deinem Snippet fehlt aber InitNetwork().
Wenn das so sein sollte hab ich nix gesagt. ^^

mfg
Cofter
Ja aber wenn der Connect zu lange dauert sprich es kann kein Internet gefunden werden und ich das Fenster bewege, dann verschwindet das Wort "Bitte warten..."

Hierbei verschwinden auch die Wörter im Fenster...

Code: Alles auswählen

Global FontID1
FontID1 = LoadFont(2, "Arial", 12, #PB_Font_Bold)
 If OpenWindow(2, 390, 255, 217, 46, "",  #PB_Window_WindowCentered)
    If CreateGadgetList(WindowID(2))
      TextGadget(2, 10, 15, 200, 20, "Bitte warten...", #PB_Text_Center)
      SetGadgetFont(2, FontID1)
        EndIf
  EndIf
Delay(20000)
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

EDI hat geschrieben:Ja aber wenn der Connect zu lange dauert sprich es kann kein Internet gefunden werden und ich das Fenster bewege, dann verschwindet das Wort "Bitte warten..."
Dann reagierst du zu lange nicht auf WindowEvent()s. Genau dieses Problem hatte ich auch, aber nirgendwo steht einmal vernünftig beschrieben, wei man (s)ein Fenster refresht (PB 3.94).

Ich bin erst auf UpdateWindow_(hWnd) heringefallen, aber das sendet nur ein #WM_REPAINT, die Konstante, die mein PB nicht mal kennt, an das übergebene Fenster.

Versuchs mal hiermit, das ist das Beste, das ich gefunden habe und nutze:

Code: Alles auswählen

InvalidateRect_(a, 0, b)
Für a setzt du null ein, wenn du den gesamten Desktop refreshen willst oder die WindowID() des zu refreshenden Fensters (also deine Fenster-ID).
Für b setzt du entweder 0 oder 1 ein, wenn du 1 einsetzt, wird so refreshed, dass dre Hintergrund dabei gelöscht wird. Um das zu unterbinden habe ich 0 eingesetzt.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
cofter
Beiträge: 84
Registriert: 10.03.2006 19:07
Wohnort: Berlin
Kontaktdaten:

Beitrag von cofter »

Also ich habe beides nochmal ausprobiert und bei mir verschwindet nichts.
Was ich nicht kenne das mach ich kaputt! :D
----------------------------------------------------
Purebasic v4.0
EDI
Beiträge: 4
Registriert: 06.06.2006 20:41

Beitrag von EDI »

AND51 hat geschrieben:
EDI hat geschrieben:Ja aber wenn der Connect zu lange dauert sprich es kann kein Internet gefunden werden und ich das Fenster bewege, dann verschwindet das Wort "Bitte warten..."
Dann reagierst du zu lange nicht auf WindowEvent()s. Genau dieses Problem hatte ich auch, aber nirgendwo steht einmal vernünftig beschrieben, wei man (s)ein Fenster refresht (PB 3.94).

Ich bin erst auf UpdateWindow_(hWnd) heringefallen, aber das sendet nur ein #WM_REPAINT, die Konstante, die mein PB nicht mal kennt, an das übergebene Fenster.

Versuchs mal hiermit, das ist das Beste, das ich gefunden habe und nutze:

Code: Alles auswählen

InvalidateRect_(a, 0, b)
Für a setzt du null ein, wenn du den gesamten Desktop refreshen willst oder die WindowID() des zu refreshenden Fensters (also deine Fenster-ID).
Für b setzt du entweder 0 oder 1 ein, wenn du 1 einsetzt, wird so refreshed, dass dre Hintergrund dabei gelöscht wird. Um das zu unterbinden habe ich 0 eingesetzt.
das hilft mir leider nicht weiter.... das war irgendwie in BlitzPlus besser :-/
wenn ich das Fenster mit der Maus bewege geht der Inhalt weg :-(

gruss, EDI
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Was macht dein Programm während es versucht zu einem Server eine
Verbindung auf zu bauen?

Genau, warten ... warten das der Befehl einen wert zurück gibt.
Während dieses wartens passiert also ansonnsten nichts.
Wird aber (Wait)WindowEvent() nicht in einer schleife aufgerufen, kann
das Fenster nciht mehr geupdatet werden. Das hat AND51 schon richtig
gemerkt ... was also tun.

*Grübel*, wenn ein Befehl das Programm anhält, muss also ein Thread
her :D ... das bedeutet Prozedur erstellen in welchem zu einem Server
Verbunden wird. Dann Fenster erstellen, die angesprochende Prozedur als
Thread starten und darunter die Schleife mit (Wait)WindowEvent() und
was da noch so rein soll.

Weitere Infos zu Threads sind im Forum zu genuge auffindbar :D

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
EDI
Beiträge: 4
Registriert: 06.06.2006 20:41

Beitrag von EDI »

PMV hat geschrieben:Was macht dein Programm während es versucht zu einem Server eine
Verbindung auf zu bauen?

Genau, warten ... warten das der Befehl einen wert zurück gibt.
Während dieses wartens passiert also ansonnsten nichts.
Wird aber (Wait)WindowEvent() nicht in einer schleife aufgerufen, kann
das Fenster nciht mehr geupdatet werden. Das hat AND51 schon richtig
gemerkt ... was also tun.

*Grübel*, wenn ein Befehl das Programm anhält, muss also ein Thread
her :D ... das bedeutet Prozedur erstellen in welchem zu einem Server
Verbunden wird. Dann Fenster erstellen, die angesprochende Prozedur als
Thread starten und darunter die Schleife mit (Wait)WindowEvent() und
was da noch so rein soll.

Weitere Infos zu Threads sind im Forum zu genuge auffindbar :D

MFG PMV
Hallo PMV & AND51,

super danke... genau so ein Tipp habe ich gebraucht. Jetzt klappt alles, so wie ich es haben möchte. Danke

gruss, EDI
Antworten