Seite 1 von 1

Erreichen Ende des SLE-Feldes

Verfasst: Do, 30. Jul 2009 17:23
von Rolf Ramacher
Hallo,

ist es möglich beim Erreichen des Endes eines XbpSle() Feldes in das nächste SLE-Feld zu springen ?

Re: Erreichen Ende des SLE-Feldes

Verfasst: Do, 30. Jul 2009 17:28
von AUGE_OHR
Rolf Ramacher hat geschrieben:ist es möglich beim Erreichen des Endes eines XbpSle() Feldes in das nächste SLE-Feld zu springen ?
XbpSLE:autoTab := .T.

Re: Erreichen Ende des SLE-Feldes

Verfasst: Fr, 05. Apr 2019 12:40
von Manfred
so soll es laut Anleitung sein, aber wenn ich Buffer = 4 mache und dann 4 Zeichen eintippe, passiert erst was, wenn ich eine weitere Taste drücke. Wo liegt der Denkfehler?

Re: Erreichen Ende des SLE-Feldes

Verfasst: Fr, 05. Apr 2019 13:35
von Manfred
ich sehe gerade, ist hier
viewtopic.php?f=23&t=862
auch ein Thema

Re: Erreichen Ende des SLE-Feldes

Verfasst: Fr, 05. Apr 2019 14:05
von AUGE_OHR
Manfred hat geschrieben: Fr, 05. Apr 2019 13:35 ich sehe gerade, ist hier
viewtopic.php?f=23&t=862
auch ein Thema
... und hast du es jetzt verstanden :?:
:typeOut- Gibt an, ob der Cursor hinter das letzte Zeichen im Editierpuffer bewegt werden sollte.

Re: Erreichen Ende des SLE-Feldes

Verfasst: Fr, 05. Apr 2019 14:44
von Manfred
es wurde ja geklärt, das Typeout dafür nicht geeignet ist.

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 3:18
von AUGE_OHR
moin
Manfred hat geschrieben: Fr, 05. Apr 2019 14:44 es wurde ja geklärt, das Typeout dafür nicht geeignet ist.
zeige doch mal wie du es verwendet hast ...
SLEOUT.ZIP
pure Xbase++
(1009 Bytes) 277-mal heruntergeladen

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 10:08
von Manfred
soll ich das in SLEOut einmbauen und hier einstellen, oder was meinst Du genau?

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 10:31
von AUGE_OHR
Manfred hat geschrieben: Sa, 06. Apr 2019 10:08 soll ich das in SLEOut einmbauen und hier einstellen, oder was meinst Du genau?
was willst du denn modifizieren um es "unbrauchbar" zu machen :roll:

Ich machen in solchen Fällen ein Demo um zu sehen ob es klappt wie es soll.
wenn es damit klappt aber nicht in der App dann liegt der Fehler wo anders.

Code: Alles auswählen

o:autoTab := .T.
funktioniert wie beschrieben :
Erst "hinter dem letzte Zeichen" geht er dann weiter zum nächsten Control was o:TabStop := .T. hat

wenn du die Länge "bei der Eingabe" brauchst dann wäre ein eigener "Reader" angesagt.

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 11:02
von Manfred
Das ist der Code und der klappt nicht so wie gewollt

Code: Alles auswählen

METHOD fahrer:anmelden(oParent)
       LOCAL aDlgSize   := {oSysPara:skaliereXbParts(300),oSysPara:skaliereXbParts(240)}
       LOCAL lErfolg    := .T.
       LOCAL lExit      := .F.
       LOCAL mp1        := 0
       LOCAL mp2        := 0
       LOCAL nEvent     := 0
       LOCAL nLinks     := oSysPara:skaliereXbParts(5)
       LOCAL nOben      := oSysPara:skaliereXbParts(170)
       LOCAL nPbHoehe   := oSysPara:skaliereXbParts(30)
       LOCAL nPbLaenge  := oSysPara:skaliereXbParts(70)
       LOCAL nSleHoehe  := oSysPara:skaliereXbParts(20)
       LOCAL nSleLaenge := oSysPara:skaliereXbParts(50)
       LOCAL oDialog    := NIL
       LOCAL oPb        := NIL
       LOCAL oPbOk      := NIL
       LOCAL oText      := NIL
       LOCAL oXbp       := NIL

       MEMVAR oSysPara

       DEFAULT oParent TO AppDesktop()

       ::db_oeffnen()
       ::felderleeren()
       oDialog := DialogFenster():new(oParent,,,aDlgSize,,.F.,.F.,,.T.,.T.,"Anmelden:",.F.,.T.,1)

       oText := feldtexte():new(oDialog:drawingarea,,{nlinks,nOben},,,,"L","Personalnummer:")

       nLinks += oText:currentSize()[1]

       ::oNummer               := mk_Sle():new(oDialog:drawingArea,,{nLinks,nOben},{nSleLaenge,nSleHoehe},,,"WWWWW")
       ::oNummer:autoTab       := .T.
       ::oNummer:datalink      := { |x| IIF( x==NIL, ::oNummer, ::oNummer := x) }
       ::oNummer:bufferlength  := 4
       ::oNummer:tabStop       := .T.
       ::oNummer:create(oDialog)

       nOben -= oSysPara:skaliereXbParts(50)
       nLinks := oSysPara:skaliereXbParts(5)

       oText := feldtexte():new(oDialog:drawingarea,,{nlinks,nOben},,,,"L","Pin           :")

       nLinks += oText:currentSize()[1]

       ::oPin               := mk_Sle():new(oDialog:drawingArea,,{nLinks,nOben},{nSleLaenge,nSleHoehe},,,"WWWWW")
       ::oPin:autoTab       := .T.
       ::oPin:datalink      := { |x| IIF( x==NIL, ::oPin, ::oPin := x) }
       ::oPin:bufferlength  := 4
       ::oPin:tabStop       := .T.
       ::oPin:unReadable    := .T.
       ::oPin:create(oDialog)

       oPbOk          := PushButton():new(oDialog,,{oDialog:currentsize()[1]/2-nPbLaenge,10},{nPbLaenge,nPbHoehe})
       oPbOk:caption  := "OK"
       oPbOk:tabStop  := .T.
       oPbOk:create(oDialog)
       oPbOk:activate := { || IF(::satzsuchen(::oNummer:editbuffer(),,"nummer",,,,.T.) .AND. ::oPin:editbuffer() == ::pin,lExit := .T.,(lErfolg := .F.,lExit := .T.)) }

       oPb          := PushButton():new(oDialog,,{oPbOk:currentPos()[1]+oPbOk:currentsize()[1],oPbOk:currentPos()[2]},{nPbLaenge,nPbHoehe})
       oPb:caption  := "Abbruch"
       oPb:tabStop  := .T.
       oPb:create(oDialog)
       oPb:activate := { || lExit := .T., lErfolg := .F. }

       oDialog:show()
       SetAppFocus(::oNummer)
       DO WHILE ! lExit
          nEvent := AppEvent( @mp1, @mp2, @oXbp )
          oXbp:handleEvent( nEvent, mp1, mp2 )
       ENDDO
       ::db_schliessen()
       IF ! lErfolg
          oSysPara:oMessage:anzeigen("Personalnummer/oder Pin falsch. Eingabe ungültig")
       ENDIF
       oDialog:destroy()
       oDialog := NIL
RETURN lErfolg
was verstehst Du unter "hinter dem letzen Zeichen". Wenn ich das 4 zeichen eingetippt habe, dann muß ein weiteres getippt werden (egal Space) dann wird der nächste PArt angesprungen.

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 12:14
von AUGE_OHR
Manfred hat geschrieben: Sa, 06. Apr 2019 11:02 was verstehst Du unter "hinter dem letzen Zeichen".
wenn o:bufferSize := 10 ist was kommt dann mach 10 ... :roll:
Manfred hat geschrieben:Wenn ich das 4 zeichen eingetippt habe, dann muß ein weiteres getippt werden (egal Space) dann wird der nächste PArt angesprungen.
wenn o:bufferSize := 4
genau SO :!:

---

ein EDIT Control kann nur so viele Zeichen aufnehmen wie Platz in einer Box ist :!:

will man "mehr" so muss man den ES_AUTOHSCROLL Style setzen.
der Default Buffer sind 32 und wird erhöht mit EM_SETLIMITTEXT

die Edit Control Notifications findet man hier
https://docs.microsoft.com/en-us/window ... ifications
das sind die Aktionen die ausgelöst werden können

der EN_MAXTEXT Notification Code ist wohl der den o:Typeout() nutzt
Sent when the current text insertion has exceeded the specified number of characters for the edit control.
The text insertion has been truncated.

Code: Alles auswählen

o:typeOut := {| uNIL1, uNIL2, self | ... }  
so ist Windows und das kann man nicht ändern ...

---

nun kann man aber ein "invisible GET" als "Reader" eines SLE nehmen wie es XbpGET() macht. :idea:
\SOURCE\samples\solution\xbpget\xbpget.prg

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 13:40
von Martin Altmann
Jimmy,
ihr schreibt aneinander vorbei! Manfred hat unter eXpress++ das Problem, das bei erreichen der maximalen Länge der Eingabe nicht automatisch das nächste Feld angesprungen wird. Seine Erwartungshaltung ist (und so funktioniert es auch bei mir - allerdings mit XClass++), das nach Eingabe des letzten Zeichens sofort das Eingabefeld verlassen wird.
Also vier Zeichen sind maximal möglich, dann soll nach dem Eingeben des vierten Zeichens das nächste Feld angewählt werden und das fünfte Zeichen dort erscheinen.

Viele Grüße,
Martin

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 13:43
von Manfred
Martin, Du liegst falsch.
Der Code oben zeigt doch, das es xbase++ pur ist. Und wir sind hier nicht im express++ Bereich ;-)

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 13:52
von Martin Altmann
Nun,
dein Codeschnippsel könnte genau so auch in eXpress++ vorkommen - insofern ging ich mal davon aus, dass er aus deiner Hauptanwendung stammt.

Viele Grüße,
Martin

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 13:54
von Manfred
nein, könnte er so nicht. Da steht nirgends irgend was mit DC...... drin.

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 14:02
von AUGE_OHR
hi,
Martin Altmann hat geschrieben: Sa, 06. Apr 2019 13:40 allerdings mit XClass++
ich bin nun kein XClass++ User aber auch dort gibt es IMHO ein InvisibleGet()

p.s. auch mit SLEPIC() geht es nicht nur mit XbpGET()

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 14:04
von Martin Altmann
Manfred hat geschrieben: Sa, 06. Apr 2019 13:54 nein, könnte er so nicht. Da steht nirgends irgend was mit DC...... drin.
Unsinn Manfred,
das sind alles Klassen und Funktionen, die du selber geschrieben hast - da muss auch keine DC vorkommen!

Viele Grüße,
Martin

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 14:08
von Manfred
prima, dass Du Dich so gut mit express++ und dessen Aufbau auskennst

Re: Erreichen Ende des SLE-Feldes

Verfasst: Sa, 06. Apr 2019 14:15
von Martin Altmann
:?: Du sagtest doch, es sei kein eXpress++, weil da nichts mit DC vorkäme.
Ich schrieb, dass das aus deinem Code nicht ersichtlich ist - da kommt nämlich auch nichts mit xbp_ vor.
Also deine Funktionen und Klassen - die von eXpress++ instantiiert sein können - oder auch direkt von Xbase++!

Viele Grüße,
Martin

Re: Erreichen Ende des SLE-Feldes

Verfasst: Mo, 08. Apr 2019 1:31
von brandelh
du könntest ein SLE ableiten, das bei jedem Tastendruck prüft ob die gewünschte Länge im EditBuffer() steht, falls ja noch ein TAB auf das Element senden, oder den Focus in ein anderes setzen.

Re: Erreichen Ende des SLE-Feldes

Verfasst: Mo, 08. Apr 2019 16:06
von Manfred
Hallo Hubert,
hatte ich versucht, aber leider zuerst falsch umgesetzt. Jetzt klappt es. Mal wieder zu einfach um selbst drauf zu kommen..... :angry4: