AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TEdit NumbersOnly, Meldung nicht anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

TEdit NumbersOnly, Meldung nicht anzeigen

Ein Thema von Schwarz · begonnen am 25. Okt 2016 · letzter Beitrag vom 25. Okt 2016
Antwort Antwort
Seite 1 von 2  1 2      
Schwarz

Registriert seit: 27. Jul 2016
4 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

TEdit NumbersOnly, Meldung nicht anzeigen

  Alt 25. Okt 2016, 10:12
Delphi-Version: 10 Seattle
Hallo,

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

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

Danke
  Mit Zitat antworten Zitat
Whookie

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

AW: TEdit NumbersOnly, Meldung nicht anzeigen

  Alt 25. Okt 2016, 10:22
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;
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#3

AW: TEdit NumbersOnly, Meldung nicht anzeigen

  Alt 25. Okt 2016, 10:40
Nicht "statt" sondern "zusätzlich",
sonst komm ich und benutze Strg+V oder Kontextmenü\Einfügen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Schwarz

Registriert seit: 27. Jul 2016
4 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: TEdit NumbersOnly, Meldung nicht anzeigen

  Alt 25. Okt 2016, 10:46
Danke, wollte halt auf die "schnelle" die Meldung unterdrücken

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

Geändert von Schwarz (25. Okt 2016 um 10:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#5

AW: TEdit NumbersOnly, Meldung nicht anzeigen

  Alt 25. Okt 2016, 10:55
Und [Entf] und eventuell [-] und ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
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
Jim Carrey
(Gast)

n/a Beiträge
 
#7

AW: TEdit NumbersOnly, Meldung nicht anzeigen

  Alt 25. Okt 2016, 11:35
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.
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: TEdit NumbersOnly, Meldung nicht anzeigen

  Alt 25. Okt 2016, 12:06
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.
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#9

AW: TEdit NumbersOnly, Meldung nicht anzeigen

  Alt 25. Okt 2016, 12:22
Oder so:
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if not (CharInSet(Key,['0'..'9',#8,#9])) then Abort;
end;

Geändert von t.roller (25. Okt 2016 um 12:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#10

AW: TEdit NumbersOnly, Meldung nicht anzeigen

  Alt 25. Okt 2016, 12:25
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 Uhr.
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