Seite 1 von 1

OpenMobileWindow() Rückgabe eines Wertes

Verfasst: 30. März 2018, 14:33
von satmax
Wie kann ich hier einen Rückgabewert erhalten:

sAnswer is string =""
OpenMobileWindow(WIN_GetString,"Name", sAnswer) // Öffnet ein Fenster und fordert zur Texteingabe auf

Eine Globale Variable möchte ich nicht verwenden, result("xy") gibt es bei OpenMobileWindow() nicht, Parameter werden per Value übergeben, also geht das mit sAnswer nicht.

Gibt es da nich andere Möglichkeiten?

Re: OpenMobileWindow() Rückgabe eines Wertes

Verfasst: 31. März 2018, 17:05
von Herbert
Ich sehe keinen anderen Weg. Wobei die globale Variable im aufrufenden Fenster definiert sein kann und so nur ab dem Mutterfenster sichtbar ist.

Re: OpenMobileWindow() Rückgabe eines Wertes

Verfasst: 31. März 2018, 21:20
von satmax
Tja, ich möchte aber einen einfachen wiederverwendbaren Code. In diesem simplen Beispiel einfach ein Fenster öffnen un dem Anwender einen Text eingeben lassen:

EnterText=winGetText("Name")

EnterText sollte der Wert sein der Eingegeben wurde, "Name" ist nur eine Beschriftung.

Das muss doch irgendwie ohne public gehen.
....
Eventuell mit SaveParameter("winGetText", EDT_Text )

Dann könnte man
sText= WinGetText("Passwort")
schreiben

Ich hab's jetzt so gemacht:

Das ganze in einer Funktion kapseln, ist einfach zu handhaben, hier ein Beispielaufruf

Code: Alles auswählen

IF WinGetText("Passwort") = "xxxx" THEN
	nPid is int = ExeRun("com.android.settings",exeActive,exePID) 
	IF 0 >= nPid  THEN 
		ToastDisplay("Fehler beim Starten: " + ErrorInfo())
	END
ELSE
	Info("Falsches Paßwort")
END
Hier kapseln um den Return Wert mit LoadParameter() zu holen:

Code: Alles auswählen

PROCEDURE WinGetText(sName is string = "", sDefaultValue is string ="")
	
OpenMobileWindow(WIN_GetString,sName,sDefaultValue)

RESULT LoadParameter("winGetText")

Code des eigentlichen Fensters:

Code: Alles auswählen

PROCEDURE MyWindow(sBeschriftung,sDefaultValue is string = "")
gbWaitForAnswer is boolean = True

STC_Text=sBeschriftung
EDT_Text=sDefaultValue

// End initialize
SaveParameter("winGetText", "" )  // auf jeden Fall leeren, Wert wir nur mit OK Button gespeichert
WHILE gbWaitForAnswer  // make win modal (Android)
	Multitask(-10)
END

Close()  // und tschüss

Und im OK oder Cancel Button des Fensters einfach:

Code: Alles auswählen

Click Validate
SaveParameter("winGetText", EDT_Text )  // OK? Wert speichern
gbWaitForAnswer = False


Click cancel
SaveParameter("winGetText", "" ) // Abbruch? Wert auf null setzen
gbWaitForAnswer = False
Ich hoffe ich habe mich nicht zu verwirrt ausgedrückt. Es ist schon spät, aber es funktioniert.

Re: OpenMobileWindow() Rückgabe eines Wertes

Verfasst: 3. April 2018, 05:41
von Herbert
Guter Ansatz. Das Problem ist, weil alle Fenster in Android und IOS nicht modal sind. Du weisst eben nicht, wann das Fenster einen gültigen Wert bringt. Bei dir zwingend wohl durch den OK-Button. Eventuell müsstest abfangen, dass der Wert wieder geleert wird, wenn einer bereits eingegeben wurde, der Benutzer das Fenster aber ohne OK schliesst, sofern er das hier kann.

Re: OpenMobileWindow() Rückgabe eines Wertes

Verfasst: 3. April 2018, 07:11
von satmax
Habe das Fenster künstlich "Modal" gemacht und alles außer ok leert den String wieder. Aber so kann ich das Fenster auf einfache Art mehrfach verwenden.

Code: Alles auswählen

SaveParameter("winGetText", "" )  // auf jeden Fall leeren, Wert wir nur mit OK Button gespeichert
WHILE gbWaitForAnswer  // make win modal
	Multitask(-10)
END

Close()  // und tschüss
Wird außerhalb des Fensters geklickt entspricht das einem Abbruch, Fenster wird geschlossen und der Wert ist "".

Re: OpenMobileWindow() Rückgabe eines Wertes

Verfasst: 5. April 2018, 12:32
von klammerauf
Ich würde es mit Input() versuchen.

http://doc.windev.com/en-US/?3021016

Re: OpenMobileWindow() Rückgabe eines Wertes

Verfasst: 6. April 2018, 12:40
von satmax
Ja, Danke. Das ist natürlich für das obige Beispiel perfekt. Damit wollte ich eigentlich nur die Möglichkeit demonstrieren, wie man einen Rückgabewert erhalten kann, dazu habe ich das eigentlich Fenster stark vereinfacht. Allerdings ändert das nichts an dem Dilemma, dass unter Android und iOS Fenster keinen Rückgabewert haben können. Wenn man den benötigt kann man mit obiger Lösung arbeiten. Ist aber eben nur ein Workaround.