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