DCREADGUI und Timeout
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
DCREADGUI und Timeout
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?
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!!
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!!
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: DCREADGUI und Timeout
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.
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
Wolfgang
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: DCREADGUI und Timeout
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.
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!!
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!!
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: DCREADGUI und Timeout
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.
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
Wolfgang
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: DCREADGUI und Timeout
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!!
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!!
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: DCREADGUI und Timeout
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 }}
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
Wolfgang
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: DCREADGUI und Timeout
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!!
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: DCREADGUI und Timeout
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:
Beim Start eines Unterdialogs wird also "ZaehleDialoge(1)" aufgerufen, am Ende "ZaehleDialoge(-1)". Nur wenn die Funktion 0 liefert, darf die Timeout-Funktion zuschlagen.
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
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: DCREADGUI und Timeout
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:
wie müßte denn dann die Abfrage lauten?
ich baue es ja so:
Code: Alles auswählen
DCREAD GUI
TIMEOUT {nZeit,{|| Funktion()}}
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!!
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: DCREADGUI und Timeout
Code: Alles auswählen
DCREAD GUI TIMEOUT {nZeit,{||IF(ZaehleDialoge()=0,.T.,.F.)}}
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: DCREADGUI und Timeout
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.
oder aber ich müßte die SAche noch tiefer verschachteln und die Funktion innerhalb der Zählerabfrage einbauen.
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!!
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: DCREADGUI und Timeout
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
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
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.
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: DCREADGUI und Timeout
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!!
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: DCREADGUI und Timeout
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.
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
Tom