Liebe Gäste des Forums
Danke, dass ihr euch hier auf dem inoffiziellen Windev-Forum umschaut. Hier werden Tipps und Hinweise zu der von PC-Soft angebotenen Software Windev besprochen.
Windev ist eine leistungsstarke, sehr umfangreiche Entwicklersoftware für Webseiten, Handys und Rechner verschiedener Betriebssysteme. Mehr unter http://www.windev.com

OpenMobileWindow() Rückgabe eines Wertes

Hier die gesammelten Bemerkungen
Antworten
satmax
Member
Beiträge: 185
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

OpenMobileWindow() Rückgabe eines Wertes

Beitrag von satmax » 30. März 2018, 14:33

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?

Herbert
Site Admin
Beiträge: 376
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: OpenMobileWindow() Rückgabe eines Wertes

Beitrag von Herbert » 31. März 2018, 17:05

Ich sehe keinen anderen Weg. Wobei die globale Variable im aufrufenden Fenster definiert sein kann und so nur ab dem Mutterfenster sichtbar ist.

satmax
Member
Beiträge: 185
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

Re: OpenMobileWindow() Rückgabe eines Wertes

Beitrag von satmax » 31. März 2018, 21:20

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.

Herbert
Site Admin
Beiträge: 376
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: OpenMobileWindow() Rückgabe eines Wertes

Beitrag von Herbert » 3. April 2018, 05:41

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.

satmax
Member
Beiträge: 185
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

Re: OpenMobileWindow() Rückgabe eines Wertes

Beitrag von satmax » 3. April 2018, 07:11

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 "".

Benutzeravatar
klammerauf
Member
Beiträge: 113
Registriert: 28. November 2010, 15:11
Wohnort: bei Karlsruhe
Kontaktdaten:

Re: OpenMobileWindow() Rückgabe eines Wertes

Beitrag von klammerauf » 5. April 2018, 12:32

Ich würde es mit Input() versuchen.

http://doc.windev.com/en-US/?3021016
--
http://arnoldconsult.de
WinDev 21 mit Oracle und MySQL, WinDevMobile Android Apps und Motorola Windows CE Mobile Barcode Scanners, Python 3 mit Oracle, SQLite und MySQL

satmax
Member
Beiträge: 185
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

Re: OpenMobileWindow() Rückgabe eines Wertes

Beitrag von satmax » 6. April 2018, 12:40

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.

Antworten