Filter für Textfeld

Product :4D - 4D Server
4D : v15.4
OS : Mac OS X

Hallo,

möchte für ein Textfeld unterbinden, dass der Anwender ein Semikolon eingibt.

Wie ich die Filter verstehe, kann man nur definieren, was man eingeben darf, also &“a-z;A-Z”
Umgekehrt, also eine Definition, was NICHT eingegeben werden darf, entdecke ich nicht.

Wenn ich einen Positiv-Filter baue, dann müsste ich wissen, wie ich eine Zeilenschaltung zulasse.
… ?! … grübelrumprobierkeineLösungFind

Jemand einen Hinweis für mich?

Vielen Dank.

probieren Sie es so
<code 4D>
: (Form event=On After Edit)
$char:=Keystroke
$keep_b:=False
Case of
: ($char=";")
: ($char="?")
Else
$keep_b:=True
End case
If ($keep_b=False)
$allText:=Get edited text
Self->:=Substring($allText;1;Length($allText)-1)
BEEP
End if
</code 4D>

Ich würde auch die Lösung von O.Z. empfehlen.

Allerdings hat sie noch ein zwei Schwachstellen:

  • Sie reagiert nur auf das Eintippen. Ein Pasten aus der Zwischenablage wird nicht abgefangen. Drag&Drop ebenfalls nicht.
  • Wenn man das Semikolon nicht am Ende eintippt, sondern in der Mitte, wird nicht das Semikolon gelöscht, sondern der letzte Buchstabe.
    Deshalb würde ich eher folgenden Code nehmen:

<code 4D>
C_LONGINT($p;$h1;$h2)
Case of
: (Form event=On Before Keystroke)
If (Keystroke=";")
FILTER KEYSTROKE("")
End if
: (Form event=On After Edit)
$p:=Position(";";Get edited text)
If ($p>0)
GET HIGHLIGHT(Self->;$h1;$h2)
Self->:=Replace string(Get edited text;";";"")
If ($h1>$p)
HIGHLIGHT TEXT(Self->;$h1-1;$h2-1)
End if
End if
End case

</code 4D>

Hallo ihr zwei,

vielen Dank für eure Mühe.