DCREADGUI und Timeout

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

DCREADGUI und Timeout

Beitrag von Manfred »

Hi, nachdem ich mal gerade wieder ein wenig in der Anleitung geblättert habe, weil ich was ganz anderes gesucht habe, bin ich auf den Parameter TIMEOUT gestolpert. Ich sage erstmal, geniale Lösung. Aber leider ist mir jetzt etwas dabei aufgefallen, was ich nicht so gut finde, aber sicherlich irgendwie zu lösen geht. Nur wie?

Wenn ich also im Hauptmenue einen Timeout setze dann klappt es prima, sobald ich aber einen weiteren Menuepunkt aufrufe scheint der Timeout trotzdem weiter zu laufen. Ich habe es mal probiert und eine Nachricht am Bildschirm angezeigt und eine Zeit gewartet. Dann habe ich die Nachricht bestätigt und es kam sofort die Reaktion aus dem Hauptmenue Timeout. Eigentlich hatte ich den Wunsch jedes Unterprogramm mit einem eigenen Timeout zu versehen um bei längerer Nichtnutzung den Teil zu schließen und erstmal ins Hauptmenue zurückzukehren. Dort dann einen anderen Timeout zu haben, der reagiert, wenn sich im Hauptmenue auch nichts tut über eine gewisse Zeit. Gibt es da evtl. eine Möglichkeit zumindest den Timeout im Hauptmenue zu deaktiveren und erst wieder anzuschalten, wenn das Programm sich nur wieder im Hauptmenue befindet? Oder könnte man das noch ganz anders lösen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCREADGUI und Timeout

Beitrag von Wolfgang Ciriack »

Hallo Manfred,
du kannst ja dem timeout im Hauptmenu ein Array als Wert übergeben, {100,{|| MeineFunction()}}.
Nur wenn MeineFunction() ein .T. zurückgibt, wird der timeout aktiv, ansonsten beginnt er von vorn.
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCREADGUI und Timeout

Beitrag von Manfred »

Hi Wolfgang,

das Hauptmenue verzweigt doch auf "unendlich viele" Programmzweige. Wie will ich da alles am Anfang übergeben? Ich möchte eigentlich alle Eingabemasken über diesen Timeout Parameter vor Leerlauf schützen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCREADGUI und Timeout

Beitrag von Wolfgang Ciriack »

Na du müsstest dir eben irgendwo merken oder ermitteln, dass ein Untermenü offen ist, dann liefert die Fkt. .F. zurück.
In allen anderen Untermenü-Funktionen setzt du bei DCGUIREAD ein eigenes Timeout.
Oder ich hab nicht ganz verstanden, was du machen willst.
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCREADGUI und Timeout

Beitrag von Manfred »

genau das. Aber das Hauptmenue soll dann solange ruhig sein. Kann man denn so einen Timeout nachträglich wohl manipulieren? Dann wäre es ja gut. Der Timeout im Hauptmenue wird gesetzt. Und sobald ein Untermenue aufgerufen wird, wird dieser Hauptmenuetimeout "stillgelegt".
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCREADGUI und Timeout

Beitrag von Wolfgang Ciriack »

Na das sag ich doch.
Setze bei jedem Aufruf eines Untermenüs ein Variable xy:=.F., beim Beenden des Untermenüs xy:=.T.
Bei deinem Timeout im Hauptmenü setzt du z.B. TIMEOUT {500,{|| xy }}
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCREADGUI und Timeout

Beitrag von Manfred »

ah, jetzt weiß was Du meinst. Ich hatte das nicht so ganz kapiert, weil ich schon eine andere Funktion in dem jeweiligen Codeblock hatte. Ich wollte nämlich gleichzeitig eine Abfrage machen, die für den Fall der Fälle abfragt, ob das Beenden nicht doch evtl. unerwünscht wäre. Da aber dann auch ein Timeout um in dem Fall das keiner mehr vor dem PC sitzt das beenden doch auslöst. Aber ich denke mal, dass könnte man über eine IIF() Funktion abfangen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCREADGUI und Timeout

Beitrag von Tom »

Man baut einfach eine Get-Set-Funktion, die mitzählt, ob und wie viele Unterdialoge geöffnet sind. Beim Start wird der Zähler erhöht, beim Beenden wieder dekrementiert. Nur, wenn die Zählerfunktion Null zurückliefert, greift der Timeout, ansonsten nicht:

Code: Alles auswählen

FUNCTION ZaehleDialoge(nCount)
STATIC nDialogeCount := 0
IF PCount()>0
  nDialogeCount += nCount
ENDIF
RETURN nDialogeCount

? ZaehleDialoge() // 0
? ZahleDialoge(1) // 1 - Anzahl laufender Dialoge erhöhen
? ZahleDialoge(1) // 2 - Anzahl laufender Dialoge erhöhen
? ZahleDialoge(-1) // 1 - Anzahl laufender Dialoge senken
Beim Start eines Unterdialogs wird also "ZaehleDialoge(1)" aufgerufen, am Ende "ZaehleDialoge(-1)". Nur wenn die Funktion 0 liefert, darf die Timeout-Funktion zuschlagen.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCREADGUI und Timeout

Beitrag von Manfred »

Also kann man den Timeout Parameter währen des Prozesses beeinflussen? Der würde dann in einen Codeblock verbannt, oder wie muß ich das verstehen?

ich baue es ja so:

Code: Alles auswählen

DCREAD GUI
TIMEOUT {nZeit,{|| Funktion()}}
wie müßte denn dann die Abfrage lauten?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCREADGUI und Timeout

Beitrag von Tom »

Code: Alles auswählen

DCREAD GUI TIMEOUT {nZeit,{||IF(ZaehleDialoge()=0,.T.,.F.)}}
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCREADGUI und Timeout

Beitrag von Manfred »

damit erreiche ich aber nur, dass das Programm sofort beendet wird. Ich möchte aber haben, dass vorher noch eine Funktion aufgerufen wird, in der bestätigt, oder nicht bestätigt werden kann, das das Ende wirklich so richtig ist. Es soll ja nur verhindern, dass WS verlassen werden ohne das Programm zu beenden. Wenn ich das jetzt so mache, wie Du es vorschlägst, dann würde ja nur der Timeout greifen oder nicht.

oder aber ich müßte die SAche noch tiefer verschachteln und die Funktion innerhalb der Zählerabfrage einbauen. :-k
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: DCREADGUI und Timeout

Beitrag von Martin Altmann »

Manfred,
Du kannst doch dort, wo Tom ein .T. stehen hat, Deine entsprechende Abfragefunktion einbauen - die .t. zurückliefert, wenn beendet werden soll.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCREADGUI und Timeout

Beitrag von Manfred »

war ja meine Intention. Vielleicht nicht laut genug ;-)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCREADGUI und Timeout

Beitrag von Tom »

Hallo, Manfred.

Logisch. Es müsste auch nicht "ZaehleDialoge" im Timeout abgefragt werden, sondern dort könnte irgendeine Funktion verwendet werden, die 1) ohnehin .F. zurückliefert, wenn "ZaehleDialoge()" mehr als Null antwortet und 2) eine ConfirmBox anzeigt, in der im Fall, dass "ZaehleDialoge" Null liefert, abgefragt wird, ob das Programm wirklich beendet werden soll. Auch dort könnte es wieder ein Timeout geben - wenn der Benutzer nicht innerhalb von x Sekunden reagiert, sitzt er vielleicht nicht am Arbeitsplatz. Je nachdem, was in diesem Fall geschehen soll, müsste dann entsprechend agiert werden.
Herzlich,
Tom
Antworten