Get Focus entziehen aber trotzdem validieren

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

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

Get Focus entziehen aber trotzdem validieren

Beitrag von Manfred »

Hi,

ich versuche gerade etwas im Textmodus:

Der Cursor wartet auf eine Eingabe in einem Getfeld, oder aber auf den Druck einer F-Taste, bei dem genau das Getfeld automatisch gefüllt und abgeschlossen werden soll. Wenn die F-Taste nicht gedrückt wird, dann wird die Eingabe validiert. Das soll aber nach der F-Tastenfunktion auch passieren.

Wenn ich :killfocus() mache, dann wird die Validierung nicht ausgeführt, sondern das Read direkt beendet, weil kein weiteres Getfeld danach kommt.

Ich kriege es nicht hin. Geht das überhaupt?
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Get Focus entziehen aber trotzdem validieren

Beitrag von AUGE_OHR »

hi,
Manfred hat geschrieben:Hi,

ich versuche gerade etwas im Textmodus:

...
Wenn ich :killfocus() mache, dann wird die Validierung nicht ausgeführt, sondern das Read direkt beendet, weil kein weiteres Getfeld danach kommt.

Ich kriege es nicht hin. Geht das überhaupt?
... waren wir nicht schon mal an diesem Punkt mit "read/killread"

solange du in deinen Fx-Tasten Funktionen ein ReadKill() oder "clear gets"
hast klappt das nicht mit der validierung weil er hinter das "read" geht.

du solltes ein "RETURN (KEYBOARD(cRetvar)+CHR(13))" am Ende
deiner Fx-Tasten Funktionen versuchen.

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

und das ganze in GUI

Beitrag von AUGE_OHR »

... und bevor jemand wieder denkt ... "Textmode" hier eine GUI Lösung
wie man Cl*pper ähnlich (deshalb SLEPic) mit Fx-Tasten arbeiten kann.

Code: Alles auswählen

   ::Z31b := SLEPIC():new( ::oPosBox, , {  4,Zeile03}, { 24,20},;
                  { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
   ::Z31b:Picture := "@! AA"
   ::Z31b:XbpSle:Keyboard := {|nKey| IF(nKey = xbeK_F2,;
                    PostAppEvent(xbeP_Activate,,,::PushButton1),NIL  ) }
   ::Z31b:bufferLength := 2
   ::Z31b:tabStop := .T.
   ::Z31b:dataLink := {|x| IIf( PCOUNT()==0, ;
             Trim( (::ZOLLIPOS)->Z31B ), (::ZOLLIPOS)->Z31B := x ) }
    ::Z31b:Validate := {|o| Valtest(o)}

   AAdd( ::editControls, ::Z31b )

   ::PushButton1  := XbpPushButton():new( ::oPosBox, , { 32,Zeile03},;
        {20,20}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE },;
                        { XBP_PP_FGCLR, -58 } } )
   ::PushButton1:caption := 1001
   ::PushButton1:tabStop := .F.
   ::PushButton1:activate := {|| cRet := ZOLLWAHL(;
        ::oPosBox,"31B",::Z31b:getdata()) ,;
         IF(EMPTY(cRet),,::Z31b:setdata(;
             SUBSTR(cRet,1,::Z31b:bufferLength))) ,;
         setAppFocus(::Z31b) }

gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Get Focus entziehen aber trotzdem validieren

Beitrag von Manfred »

Moin,
AUGE_OHR hat geschrieben:hi,

... waren wir nicht schon mal an diesem Punkt mit "read/killread"

solange du in deinen Fx-Tasten Funktionen ein ReadKill() oder "clear gets"
hast klappt das nicht mit der validierung weil er hinter das "read" geht.
Sorry, aber das war ein anderer Schuh. Hier ist kein clear gets vorhanden.
du solltes ein "RETURN (KEYBOARD(cRetvar)+CHR(13))" am Ende
deiner Fx-Tasten Funktionen versuchen.

gruss by OHR
Jimmy
Das klappt auch nicht. Du hast doch Keyboard als Funktion aufgerufen? Oder sehe ich das falsch? Und die Funktion gibt es doch nicht. Andererseits die Methode keyboard() ist zu dem Zeitpunkt auch nocht bekannt.

Keyboard "text" + chr(13) bringt es auch nicht.

Ich schreibe den Wert jetzt über :varput in die Var, mache display() dahinter und lasse es mit RETURN bestätigen, das ist auch OK so. Ich hatte nur gedacht es wäre direkt möglich abzuschließen. Mal sehen was die Zukunft bringt, vielleicht habe ich ja noch eine andere Idee.
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: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Get Focus entziehen aber trotzdem validieren

Beitrag von Martin Altmann »

Hallo Manfred,
Manfred hat geschrieben:... und lasse es mit RETURN bestätigen, das ist auch OK so.
wie meinst Du das? Muss der Nutzer noch zusätzlich Return drücken oder passiert das automatisch?
Wenn letzteres, dann ist doch alles OK!
Wenn ersteres, dann nutze doch PostAppEvent(), um an Dein SLE ein XbeK_RETURN zu senden.

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: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

der User gibt ein RETURN von Hand ein.

Ich habe doch gar kein SLE. Es ist reine Textausgabe am Bildschirm.
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: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Du hast doch von einem GetFeld gesprochen (ist doch ein SLE für Arme ;-) )
Poste doch einfach ein Return an das GetFeld - dann wird es verlassen.

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: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

verflixt, das war es was ich gesucht hatte. Mit KEyboard alleine klappt es nicht, aber mit dem PostAppEvent() geht es. Sowas blödes aber auch. Danke.
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: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
gerne!
Jetzt brauchst Du nur noch 6... Ob Du das noch schaffst vor 12 Uhr (Forumsabschaltung für 1 Stunde...) :?: :D

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: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

was? wer? wo? wie? Forumsabschaltung, klar..... Ich verstehe Dein Posting nicht.

Jou, alles klar. Wink mit dem Zaunpfahl.

Noch 5
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
Schorsch
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 45
Registriert: So, 21. Sep 2008 19:21
Wohnort: Sinsheim im Kraichgau

Re: Get Focus entziehen aber trotzdem validieren

Beitrag von Schorsch »

Hallo Manfred,
Ich habe gerade diese Hinweise von euch gefunden und es scheint, als ob ich nach derselben Lösung suche. Ich muss allerdings zugeben, dass ich den Lösungshinweis nicht verstanden habe ".... mit dem posten an das GET...". Wäre es möglich die Löungszeilen zu veröffentlichen oder zu schicken ?
Ich weiss es ist schon lage her.
Vielen Dank ...
Schorsch
Gruß
Schorsch
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Get Focus entziehen aber trotzdem validieren

Beitrag von Manfred »

Moin Schorsch,

Du hast Recht, es ist wirklich etwas her. Ich weiß auch gar nicht so ad hoc, ob ich es auf die Schnelle gefunden habe, worum es damals ging. Aber das Postappevent an ein Get wäre zunächst sowas:

Code: Alles auswählen

PostAppEvent(xbeK_RETURN)
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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Get Focus entziehen aber trotzdem validieren

Beitrag von brandelh »

Hallo Schorsch,

wenn man in Clipper bzw. Xbase++ in einem GET Feld zur Bearbeitung steht
(also eigentlich im READ) und ENTER drückt, kommt man ins nächste GET Feld.
Davor wird validate aufgerufen.

Möchte man nun mit einer Funktionstaste die Eingabe beenden, kann man
das ENTER mit dem Befehl Keyboard chr(13) erzeugen.
Wenn noch Text dazu soll, kann man den voranstellen:
Keyboard cText+chr(13)

Sobald man aber in Xbase++ die Maus einschaltet oder aber ein XbpPart benutzt,
kann man nicht mehr keyboard und inkey nutzen, sondern muss PostAppEvent nutzen.
Dort wird als erster Parameter der Event und als 2. die Taste übergeben:

PostAppEvent(xbeP_Keyboard,nKeyAscWert,,oXbp)

Ich vermute mal, dass bei GET das GetActive() als oXbp übergeben werden muss,
allerdings arbeite ich schon lange nicht mehr mit Gets ;-)

wie ich gerade sehe hat Manfred schon geantwortet ... und ich hatte doch den speziellen Event glatt vergessen :wink:
Gruß
Hubert
Antworten