Einzelnen Beitrag anzeigen

Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
445 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: TEdit NumbersOnly, Meldung nicht anzeigen

  Alt 25. Okt 2016, 11:34
Nicht "statt" sondern "zusätzlich",
sonst komm ich und benutze Strg+V oder Kontextmenü\Einfügen.
Und [Entf] und eventuell [-] und ...
Das ist ja das schöne an der Lösung, NumbersOnly erlaubt kein -, keinen Dezimalpunkt und auch kein + und die Fehlermeldung ist dann auch wieder da!

über on KeyDown hat man das größtenteils selber in der Hand...

Die einfachste Lösung um grundsätzliches Editieren zu erlauben sieht dann so aus:

Delphi-Quellcode:
Uses
  Clipbrd;

Const
  KEY_STRGV = #$16;
  KEY_BACK = #8;
  KEY_STRGC = #3;
  KEY_STRGX = #$18;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
Var
  LBuffer: Array[0..100] Of Char;

  Function IsValid(Const AStr: String): Boolean;
  var
    i: Integer;
  begin
    Result := TRUE;
    for i := 1 to Length(AStr) do
    begin
      if Not CharInSet(AStr[i], ['0'..'9']) then
      begin
        Result := FALSE;
        Break;
      end;
    end;
  end;

begin
  if Not CharInSet(Key, [#3,#8, #$16, #$18,'0'..'9']) then
    Key := #0;
  if Key = KEY_STRGV then
  begin
    If Not IsValid(Clipboard.AsText) Then
      Key := #0;
  end;
end;
Damit kann im Edit ausgeschnitten, eingefügt und gelöscht werden. Zusätzlich kann man dann auch jedes beliebige andere Zeichen erlauben...


Grundsäztlich kann man hier natürlich einfach ein TMaskEdit verwenden allerdings finde ich die Eingabe dort ziemlich unzumutbar.


Persönlich bevorzuge ich es, den Benutzer eingeben zu lassen was er möchte, wenn der das Feld dann verlässt (oder den Dialog schließt) wird er darauf hingewiesen das es ein Eingabeproblem gibt.
Das ist einfach umzusetzen und bringt auch im späteren Verlauf die wenigsten Probleme...
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat