Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TEdit NumbersOnly, Meldung nicht anzeigen (https://www.delphipraxis.net/190674-tedit-numbersonly-meldung-nicht-anzeigen.html)

Schwarz 25. Okt 2016 09:12

Delphi-Version: 10 Seattle

TEdit NumbersOnly, Meldung nicht anzeigen
 
Hallo,

kann ich irgendwie verhindern, dass bei einer Falscheingabe in mein Editfeld mit NumbersOnly

die Windowsmeldung ("Unzulässiges Zeichen...") angezeigt wird?

Danke

Whookie 25. Okt 2016 09:22

AW: TEdit NumbersOnly, Meldung nicht anzeigen
 
Statt NumbersOnly zu setzen mach das einfach im OnKeyPress:

Delphi-Quellcode:
procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Not CharInSet(Key, ['0'..'9']) then
    Key := #0;
end;

himitsu 25. Okt 2016 09:40

AW: TEdit NumbersOnly, Meldung nicht anzeigen
 
Nicht "statt" sondern "zusätzlich",
sonst komm ich und benutze Strg+V oder Kontextmenü\Einfügen.

Schwarz 25. Okt 2016 09:46

AW: TEdit NumbersOnly, Meldung nicht anzeigen
 
Danke, wollte halt auf die "schnelle" die Meldung unterdrücken ;-)

Dann muss ich noch den Backspace zulassen und dann sollte es funktionieren

himitsu 25. Okt 2016 09:55

AW: TEdit NumbersOnly, Meldung nicht anzeigen
 
Und [Entf] und eventuell [-] und ...

Whookie 25. Okt 2016 10:34

AW: TEdit NumbersOnly, Meldung nicht anzeigen
 
Zitat:

Zitat von himitsu (Beitrag 1351936)
Nicht "statt" sondern "zusätzlich",
sonst komm ich und benutze Strg+V oder Kontextmenü\Einfügen.

Zitat:

Zitat von himitsu (Beitrag 1351940)
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...

Jim Carrey 25. Okt 2016 10:35

AW: TEdit NumbersOnly, Meldung nicht anzeigen
 
Zitat:

und die Fehlermeldung ist dann auch wieder da!
Ich sehe das weniger als eine "Fehlermeldung" an sondern vielmehr als eine nützliche Information für den Menschen der das Programm bedient.

Der schöne Günther 25. Okt 2016 11:06

AW: TEdit NumbersOnly, Meldung nicht anzeigen
 
Finde ich auch. Entweder lasse ich alles so drin wie es das Betriebssystem vorgibt, oder ich fummele gar nicht dazwischen und blende nur einen Indikator ein dass die momentane Eingabe entweder gültig oder nicht gültig ist. Bei einem Input-Popup wird dann entweder sogar das Ok ausgegraut oder wenn man draufpatscht wird der Edit rot eingefärbt. Das klappt ohne jegliche geschriebene Sprache.

t.roller 25. Okt 2016 11:22

AW: TEdit NumbersOnly, Meldung nicht anzeigen
 
Oder so:
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if not (CharInSet(Key,['0'..'9',#8,#9])) then Abort;
end;

himitsu 25. Okt 2016 11:25

AW: TEdit NumbersOnly, Meldung nicht anzeigen
 
Die Fehlermeldung ... nja, es kommt drauf an.

Entweder man implementiert es im Edit richtig, also nicht nur KeyDown, sondern ALLE wege, wo der Text rein geht.
Oder man mu es unbedingt auch nochmal beim Auslesen validieren.

Und wenn man die Eingabe direkt prüft, dann kommt es auch auf's "Wie" an.
Beim Eingeben selber darf niemals ein Fenster aufgehen, nur Hints oder z.B. die Edit-Farbe.
Und dann beim Verlassen/Auslesen mit Fehlermeldung/Exception prüfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz