Bildaufbau und Abarbeitung ...

Anfängerfragen zum Programmieren mit PureBasic.
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

Bildaufbau und Abarbeitung ...

Beitrag von der-sigi »

Hi, habe noch eine "dumme" Frage zu der ich keine Info gefunden habe.

Ich mach ein Fenster auf, schiebe Textfelder, Eingabefelder, Bilder und Knöpfe hinein - mache also das komplette Aussehen fertig - und schaue dann nach ob eine Netzwerkverbindung steht. Dann gehts weiter ...

Code: Alles auswählen

If OpenWindow()
  If CreateGadgetList(WindowID())
    TextGadget()
    ImageGadget()
    ButtonGadget()
  EndIf
EndIf
SetGadgetText()
...
If InitNetwork()
  ...
In Kürze sieht das so aus wie dargestellt. Wenn ich jetzt die Netzwerkverbindung abklemme und das Programm starte, dann baut sich das Fenster auf, die Texte werden gesetzt, die Bilder gemalt, nur die Knöpfe und Eingabefelder fehlen! Erst wenn das Kabel wieder drin steckt, malt es auch die Knöpfe und die Eingabefelder hinzu. Das kann man auch unter Windows mit einer Firewall nachvollziehen. Erst wenn die freigibt, werden die Knöpfe und Eingabefelder gemalt.

Das Ganze sieht ein wenig "besch...eiden" aus und von der Programmabfolge hätte ich gedacht, daß das so nicht sein sollte. Habe ich was übersehen oder mißverstanden?
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Naja, das Fenster wird erst durch ein WindowEvent geupdatet:
--> 3 Möglichkeiten:
1. Netzwerkaufbau vor dem Fenster machen
2. Das Fenster erst mit #PB_Window_Invisible (Flag von OpenWindow()) nicht anzeigen lasse und es nach erfolgreicher netzwerkabfrage mit HideWindow() wieder sichtbar machen
3. Nach dem fertigen Fensteraufbau erstmal mit while WindowEvent() : Wend alle Ereignisse abfangen und das Fenster aktualisieren.
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

Beitrag von der-sigi »

Hallo benpicco

Danke für deine Hilfe.

> Naja, das Fenster wird erst durch ein WindowEvent geupdatet

Daß die Eingabefelder und Knöpfe zu einem Update gehören und nicht gleich gemalt werden, wie die anderen Teile, hätte ich jetzt nicht gedacht. Ist für mich auch nicht logisch oder nachvollziehbar.

> 1. Netzwerkaufbau vor dem Fenster machen

Ist wohl nicht sinnvoll, weil man dann startet und nichts passiert.

> 2. Das Fenster erst mit #PB_Window_Invisible (Flag von OpenWindow()) nicht anzeigen lasse ...

Wie bei 1.

> 3. Nach dem fertigen Fensteraufbau erstmal mit while WindowEvent() : Wend alle Ereignisse abfangen und das Fenster aktualisieren.

Aha, das war's. Ich habe es nur einmal abgefragt und da passierte (noch) nichts.

Also, jetzt malt es das komplette Fenster mit allem drum und dran. Bei einer Firewall, kommt dann noch die Meldung, daß "InitNetwork()" erfolgreich war. Danach geht es erst weiter, wenn die Firewall freigibt oder sperrt - wenn man die so eingestellt hat, daß man gefragt werden will. Nach dem "InitNetwork()" habe ich nur ein "If CreateNetworkServer()" drin. Bei dem bleibt es stehen und geht positiv weiter nach der Firewall Auswahl egal was man wählt. Weiß da jemand was dazu?

Optionsfrage: Ob 'ne Firewall mich sperrt, kann man wohl kaum erfragen, oder?

[edit 2006-04-22 10:15:40]
Optionsfrage: Doch, geht: Wenn man folgendes macht.

Code: Alles auswählen

#LoopBack = "127.0.0.1"
ConnectionID = OpenNetworkConnection(#LoopBack,ConnectionPort)
If ConnectionID
  ConnectStatus = 1
  CloseNetworkConnection(ConnectionID)
Else
  ConnectStatus = 0
EndIf
Wenn man eine direkte Zieladresse hat, kann man natürlich die direkt eingeben.
[/edit]

Viele Grüße
Sigi
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

der-sigi hat geschrieben:Hallo benpicco

Danke für deine Hilfe.

> Naja, das Fenster wird erst durch ein WindowEvent geupdatet

Daß die Eingabefelder und Knöpfe zu einem Update gehören und nicht gleich gemalt werden, wie die anderen Teile, hätte ich jetzt nicht gedacht. Ist für mich auch nicht logisch oder nachvollziehbar.

> 1. Netzwerkaufbau vor dem Fenster machen

Ist wohl nicht sinnvoll, weil man dann startet und nichts passiert.

> 2. Das Fenster erst mit #PB_Window_Invisible (Flag von OpenWindow()) nicht anzeigen lasse ...

Wie bei 1.
Schonmal dran gedacht, dass du auch ohne Fenster ExceptionHandling machen könntest? Fenster öffnet sich nicht, Netzwerk klappt nicht --> Messagebox. Reicht doch völlig aus?

MFG
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

Beitrag von der-sigi »

Hallo Tafkadasom2k5

> Schonmal dran gedacht, dass du auch ohne Fenster ExceptionHandling machen könntest? Fenster öffnet sich nicht, Netzwerk klappt nicht --> Messagebox. Reicht doch völlig aus?

1) Sowas mag ich garnicht.

2) Bin ich der Meinung, daß ein gutes Programm auch mit EINEM Fenster auskommen kann und nicht zig Extrafenster aufpoppen muß.

3) Zweitens soll das ein kleines Progrämmchen mit EINEM Fenster werden in das es auch die Fehlermeldungen zeigt und man per Tastendruck dann "wiederholen" kann. Das wäre mit so einem Extrafenster recht unschön.

Somit käme dein netter Beitrag nicht zum Tragen. Trotzdem Danke für die Info.

Viele Grüße
Sigi
Antworten