Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Buchstaben als Fehlermeldung in Editfeldern (https://www.delphipraxis.net/157844-buchstaben-als-fehlermeldung-editfeldern.html)

wolfaa 26. Jan 2011 20:52

Buchstaben als Fehlermeldung in Editfeldern
 
hallo ich würde gerne wissen wie man eine fehlerabweisung mit einer try-except(?)-schleife schreibt die BUCHSTABEN abweist d.h. wenn man buchstaben in das textfeld eingibt wird eine fehlermeldung gemacht...
und das gleiche mit zahlen im negativen bereich.
ich habe das schon mit 0 geschafft komme aber jetzt nicht weiter.
Delphi-Quellcode:
procedure TForm1.RechenBtnClick(Sender: TObject);
begin
DatenAktualisieren;
MaskeAktualisieren;


if EdGasverbrauch.Text = '0' then
begin
   EdGaspreis.Text:= ' ';
   ShowMessagePos('Bitte geben sie eine Zahl ein, die im Bereich über 0 liegt!', 300, 300);
end;
vielen dank im vorraus den oberen teil mit daten und maske einfach ignorieren:)

Klaus01 26. Jan 2011 20:55

AW: Buchstaben als Fehlermeldung in Editfeldern
 
Guten Abend,

wandele den Text in einen Integer um und prüfe auf >0

Grüße
Klaus

Deep-Sea 26. Jan 2011 22:20

AW: Buchstaben als Fehlermeldung in Editfeldern
 
  1. Ein try-except-Block ist keine Schleife und wird für dein Vorhaben wohl auch nicht benötigt.
  2. Ein TSpinEdit (oder das TJvSpinEdit von den JEDIs) ist für reine Zahleingaben wohl die bessere Wahl :thumb:

DeddyH 27. Jan 2011 07:15

AW: Buchstaben als Fehlermeldung in Editfeldern
 
Und wenn es unbedingt ein Standard-Edit sein muss: man kann mit TryStrToInt prüfen, ob es sich um eine Zahl handelt. Oder man erweitert den Style des Edits um ES_NUMBER (Hinweise von Microsoft beachten):
Delphi-Quellcode:
SetWindowLong(Edit.Handle, GWL_STYLE, GetWindowLong(Edit.Handle, GWL_STYLE) or ES_NUMBER);

rokli 27. Jan 2011 09:18

AW: Buchstaben als Fehlermeldung in Editfeldern
 
Hallo das geht wesentlich einfacher:

Du öffnest Dir die ONKEYPRESS Methode des Feldes, was Du eingrenzen möchtest und fügst ein:

Delphi-Quellcode:
// nur Ziffern im Feld erlauben
if not ((StrScan('0123456789', Key) <> nil) or (Key = Char(VK_BACK))) then
       Key := #0;
Alles was in der StrScan Klammer steht, wird zugelassen und ausserdem kannst Du noch mit der Backspace Taste zurückgehen; alles andere wird ignoriert.

Gruß
Rolf

DeddyH 27. Jan 2011 09:25

AW: Buchstaben als Fehlermeldung in Editfeldern
 
Über die Zwischenablage bekommt man dann aber trotzdem noch Murks hinein.

rokli 27. Jan 2011 09:32

AW: Buchstaben als Fehlermeldung in Editfeldern
 
Zitat:

Zitat von DeddyH (Beitrag 1077577)
Über die Zwischenablage bekommt man dann aber trotzdem noch Murks hinein.

... wenn ich mal für das Pentagon programmiere, überleg ich mir was anderes ... :?

Satty67 27. Jan 2011 10:00

AW: Buchstaben als Fehlermeldung in Editfeldern
 
Für ein Formular hatte ich eine Lösung in der Art (Ereignisse allen Number-Edits zugeordnet):

Delphi-Quellcode:
procedure TestEditValue(AEdit : TEdit; ChangeColor : Boolean);
begin
  try
    StrToInt(AEdit.Text);
    if ChangeColor then
      AEdit.Color := clWindow
  except
    if ChangeColor then
      AEdit.Color := $B0B0FF
    else
      AEdit.Text := '0';
  end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Sender is TEdit then
    TestEditValue(TEdit(Sender), True);
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if Sender is TEdit then
    TestEditValue(TEdit(Sender), False);
end;

Deep-Sea 27. Jan 2011 10:19

AW: Buchstaben als Fehlermeldung in Editfeldern
 
@Satty67:
Wie DeddyH schon sagte, ist TryStrToInt für so eine Lösung die bessere Wahl. Warum auch sinnlos eine Exception auslösen, die man eh sofort wieder abfängt?


@Satty67 & rokli:
Was spricht denn nun gegen den Einsatz von SpinEdit, ggf. MaskEdit oder die von DeddyH genannte Methode? :gruebel:

Sir Rufo 27. Jan 2011 10:46

AW: Buchstaben als Fehlermeldung in Editfeldern
 
Zitat:

Zitat von rokli (Beitrag 1077582)
Zitat:

Zitat von DeddyH (Beitrag 1077577)
Über die Zwischenablage bekommt man dann aber trotzdem noch Murks hinein.

... wenn ich mal für das Pentagon programmiere, überleg ich mir was anderes ... :?

Jo, denn ein normalo Anwender kann mit Murks und dadurch bedingte Exceptions super umgehen.
Nur das Pentagon hat den Bedarf an sauber programmierten Anwendungen :roll:

rokli 27. Jan 2011 11:08

AW: Buchstaben als Fehlermeldung in Editfeldern
 
@Deep-Sea

... wenns funktioniert - doch garnichts - oder!?

@Sir Rufo

... da hast Du natürlich recht, aber wenn der Anwender danach sucht, wird er meist sowieso eine Möglichkeit finden, das Programm zum brennen zu bringen. Für mich ist die beschriebene Möglichkeit schnell und effizent.

Gruß
Rolf

Satty67 27. Jan 2011 11:14

AW: Buchstaben als Fehlermeldung in Editfeldern
 
Zitat:

Zitat von Deep-Sea (Beitrag 1077593)
TryStrToInt für so eine Lösung die bessere Wahl.

Delphi 5 kennt die TryStrTo... Funktionen noch nicht, war nicht sicher, ob es D7 schon kennt.

Meine Lösung hatte ich nur gewählt, weil schnell auch andere Varianten möglich sind (Float, Datum etc. durch Tausch der StrTo... Funktion) und der Benutzer eine Rückmeldung bei der Eingabe bekommt. MaskEdit geht auch, aber finde ich meistens nicht so schön von der Eingabelogik.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 Uhr.

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