Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^ (https://www.delphipraxis.net/119162-edit-eingabe-nur-auf-zahlen-beschraenken-probleme-mit-%5E.html)

gfjs 21. Aug 2008 09:27


Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Hallo, Allerseits.

Ich schon wieder - mit einem neuen Problem:

Mit
Delphi-Quellcode:
procedure TFStart.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key in [48..57] then
  begin
    Edit2.SetFocus;
    Memo11.Text := Text2;
  end else
  begin
    Edit1.Clear;
    MessageBeep(1000);
  end;
end;
versuche ich, meine Anwendung dazu zu bewegen, nur Eingaben von '0' bis '9' zu akzeptieren. Bis eben dachte ich auch, das wäre mir gelungen - bis ich aus Versehen auf die Taste ganz links oben kam: ^

Erstaunlicherweise - zumindest für mich - werden die Anweisungen aus dem if-Block und nicht die aus dem else-Block ausgeführt und es kommt auch noch eine Fehlermeldung.

Wie immer bin ich dankbur für Eure Unterstützung.

gruß Jürgen

[edit=Luckie]Titel geändert. Mfg, Luckie[/edit]

Maja Jessica 21. Aug 2008 09:35

Re: Probleme mit dem da ==> ^
 
Hi,

wenn du nur Zahlen von 0 - 9 erlauben möchtest (inkl. Punkt, Komma, Entf., etc) geht es auch so:

Delphi-Quellcode:
 if not (key in ['0'..'9',#13,#8, '.' , ',' ]) then key := #0;
Lass dir doch mal den TastenCode anzeigen, dann weist du warum welche Bedingung zutrifft.

MJ

Luckie 21. Aug 2008 09:39

Re: Probleme mit dem da ==> ^
 
Würdest du bitte deinem Thread einen aussagekräftigen Titel geben? Danke.

Sharky 21. Aug 2008 09:40

Re: Probleme mit dem da ==> ^
 
Hai gfjs,

ich würde die Prüfung nicht in das KeyUp sondern OnKeyPress Ereigniss schreiben.
So oder so hast Du aber ein Problem. Der Anwender kann noch immer beliebige Zeichen aus der Zwichenablage in das TEdit einfügen.

grips-net 21. Aug 2008 09:43

Re: Probleme mit dem da ==> ^
 
Zitat:

So oder so hast Du aber ein Problem. Der Anwender kann noch immer beliebige Zeichen aus der Zwichenablage in das TEdit einfügen.
...aus diesem Grunde auch das angebotene ShiftState verwenden und alles wird gut.

Schöne Grüße

Michael

gfjs 21. Aug 2008 10:07

Re: Probleme mit dem da ==> ^
 
@ Luckie

Tut mir leid, aber mir ist kein besserer Titel eingefallen - das Problem ist ja wirklich das da: ^ und ich dachte mein Titel würde das kurz und prägnant zeigen.

@ Maja Jessika + Sharky + grips-net

Vielen Dank für Eure Hinweise, aber:

"Ich bin dann mal weg!" - Aber sobald ich zurück bin, werde ich mich damit befassen.

Erst mal Dank an alle und noch einen schönen Tag!

Luckie 21. Aug 2008 10:15

Re: Probleme mit dem da ==> ^
 
Zitat:

Zitat von gfjs
@ Luckie

Tut mir leid, aber mir ist kein besserer Titel eingefallen - das Problem ist ja wirklich das da: ^ und ich dachte mein Titel würde das kurz und prägnant zeigen.

"Probleme mit Eingabe von ^ in einem Edit"
"Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^"
Das wären jetzt mal so zwei mögliche Titel, die mir ohne längeres Nachdenken so einfallen. :?

s.h.a.r.k 21. Aug 2008 10:46

Re: Probleme mit dem da ==> ^
 
*lol* wenn jemand mit oracle was zu tun hat, dann stößt er auch ab und zu auf ein ^, um spezielle zeichen zu maskieren, usw., usw., usw...

darf deine anwendung global nur zahlen empfangen oder willst du das auf edits beschränken!? dafür hätte ich dir eine komponente, die ich mir schon mal passend erzeugt. bei bedarf einfach eine pn schicken, dann kann ich sie hier posten.

Luckie 21. Aug 2008 10:48

Re: Probleme mit dem da ==> ^
 
Zitat:

Zitat von s.h.a.r.k
dafür hätte ich dir eine komponente, die ich mir schon mal passend erzeugt. bei bedarf einfach eine pn schicken, dann kann ich sie hier posten.

Du darfst sie auch gerne ohne Bitte von gfjs hier vorstellen. ;)

s.h.a.r.k 21. Aug 2008 18:41

Re: Probleme mit dem da ==> ^
 
Liste der Anhänge anzeigen (Anzahl: 1)
soll ich, soll ich nicht, soll ich, soll ich nicht... :D

hier habt ihr es... wenn ich änderungen vornehmen soll, dann bite eine pn, sonst wird es hier zu OT!

[edit]
sollte wohl noch als feature dazu sagen, nachdem es keine passende dokumentation gibt:
- man kann über die eigenschaft ClearOnEscape steuern, ob das feld beim drücken des esacpe-taste geleert werden soll
- und es werden beim einfügen (strg+v) nur zahlen aus dem einzufügenden string entnommen.
[/edit]

gfjs 22. Aug 2008 08:03

Re: Probleme mit dem da ==> ^
 
So! Jetzt habe ich mir das Ganze noch einmal angeschaut.

Das einzig erfreuliche: Das Einfügen mit Ctrl-v macht keine Probleme - das wird abgefangen, weil ja der Key-Code von 'v' gesendet wird.

Was mir absolut schleierhaft bleibt ist, wieso ^ und ´ Probleme machen. Es wird hier ja keine weitere Taste gedrückt, so dass kein virtueller Tastaturcode ins Spiel kommt und der Wert von key ist 94 bzw. 180, sollte also durch "if key in [48..57]" abgefangen werden.

Was mir in diesem Zusammenhang noch Probleme macht, sind die virtuellen Tastaturcodes. Ich kann zwar feststellen, ob z.B. Ctrl oder Tab gedrückt wurde, habe aber noch nicht rausgefunden, wie ich das Drücken der Tasten Shift, Ctrl, Alt und AltCltrl abfangen kann.

Es wäre schön, wenn Ihr mir weiterhelfen könntet.

Gruß Jürgen

s.h.a.r.k 22. Aug 2008 08:51

Re: Probleme mit dem da ==> ^
 
meinst du meine komponente damit!?

Sherlock 22. Aug 2008 09:03

Re: Probleme mit dem da ==> ^
 
Glaube ich kaum. Übrigens, die Komponente find ich Klasse, werde ich gleich mal verwenden, ich brauche sowas immer wieder.

:thumb:

Sherlock

Luckie 22. Aug 2008 09:11

Re: Probleme mit dem da ==> ^
 
Zitat:

Zitat von gfjs
So! Jetzt habe ich mir das Ganze noch einmal angeschaut.

Aber den Titel deines Threads hast du immer noch nicht geändert. :? Falls du nicht weißt, wie das geht, Frag doch einfach. Du musst dazu nur deine rstes Posting editieren.

TonyR 22. Aug 2008 09:13

Re: Probleme mit dem da ==> ^
 
Zitat:

Zitat von gfjs
...Das einzig erfreuliche: Das Einfügen mit Ctrl-v macht keine Probleme - das wird abgefangen, weil ja der Key-Code von 'v' gesendet wird...

Und was ist mit RECHTSKLICK > EINFÜGEN ???

Link: Virtual key codes

ATSV 22. Aug 2008 10:04

Re: Probleme mit dem da ==> ^
 
Zitat:

Zitat von TonyR
Zitat:

Zitat von gfjs
...Das einzig erfreuliche: Das Einfügen mit Ctrl-v macht keine Probleme - das wird abgefangen, weil ja der Key-Code von 'v' gesendet wird...

Und was ist mit RECHTSKLICK > EINFÜGEN ???

Link: Virtual key codes

das lässt sich doch mit MouseDown abfangen würd ich sagen

TonyR 22. Aug 2008 10:54

Re: Probleme mit dem da ==> ^
 
Zitat:

Zitat von ATSV
das lässt sich doch mit MouseDown abfangen würd ich sagen

Stimmt, klingt gut, ich habs grad probiert, hat nicht geklappt -.-
als einzig funktionierende Variante hab ich es hinbekommen das Edit mit einem leeren PopUpMenü zu verknüpfen, gibts da noch eine sauberere Variante?

Edit @ s.h.a.r.k:
Warum kann ich folgende Zeichen in dein Edit eingeben? - #

ATSV 22. Aug 2008 11:22

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Delphi-Quellcode:
procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
  begin
    ShowMessage('Stop!');
  end;
end;
also so gehts

Angel4585 22. Aug 2008 11:40

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
und wenn man auf der tastatur diese List taste drückt?

ATSV 22. Aug 2008 11:48

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Zitat:

Zitat von Angel4585
und wenn man auf der tastatur diese List taste drückt?

dann würd ich sagen man amcht das ganze so:
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 93 then begin
    ShowMessage('Stop!');
  end;
end;

DeddyH 22. Aug 2008 12:04

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Demnächst gibt es ein NumberEdit in der VCL, damit dürften sich diese Probleme erledigt haben.

Angel4585 22. Aug 2008 12:16

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Also man soll nur Zahlen eingeben können?
Ich mach das immer so:
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9'])then Key:=#0;
end;
Also in die KeyPress un nich KeyDown

DeddyH 22. Aug 2008 12:17

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Und die Zwischenablage?

Angel4585 22. Aug 2008 12:20

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Delphi-Quellcode:
procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
begin
Handled:=true;
end;
Das man au immer erst den Holzhammer rausholen muss :lol:

TonyR 22. Aug 2008 12:24

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Die Variante mit dem Showmessage hatte ich im Übrigen auch schon, die is aber doof.

Ich will ja keine nachricht aufploppen lassen.

Da is das mit dem PopupMenü besser finde ich.

DeddyH 22. Aug 2008 12:27

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
So, Backspace geht nicht, also müsste #8 mit in die Menge, und über SHIFT-EINFG kann ich immer noch aus der Zwischenablage einfügen.

ATSV 22. Aug 2008 12:45

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 45 then begin
    ShowMessage('');   // oder sonst irgendwas
  end;
end;
dann geht auch Shift + Einfg nicht mehr wenn du das meinst

Reinhardtinho 22. Aug 2008 13:08

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Jedi installiert?

Wenn ja, dann Komponente TJvValidateEdit nehmen.

Properties setzen:
CheckChars = 0123456789
DisplayFormat = dfInteger
MaxLength (=1) oder MaxValue (=9) einstellen

Fertig!

MFG
Lorenz


Nachtrag:

Funktioniert auch, wenn man über Strg+V oder rechte Maustaste->Einfügen einen Text einfügt, der Zahlen und Buchstaben enthält. Es werden nur die Zahlen eingetragen.

Glühwürmchen 22. Aug 2008 13:36

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Macht richtig Spaß zu lesen, was Euch alles für Tricks einfallen, um die angebotenen Lösungen auszuhebeln.
Bin gespannt, was gegen meine übliche Vorgehensweise spricht....:

Delphi-Quellcode:
procedure TfrmMain.Edit1Exit(Sender: TObject);
begin
  try
    StrToInt(Edit1.Text);
  Except
    Edit1.Text := '0';
    Edit1.SetFocus;
    Edit1.SelectAll;
  end;
end;

Edit: Gerne auch mit StrToFloat...

TonyR 22. Aug 2008 13:39

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Zitat:

Zitat von Glühwürmchen
...Bin gespannt, was gegen meine übliche Vorgehensweise spricht....: ...

Das finde ich ansich gar nicht so schlecht, aber vllt. sollte man nicht alles auf NULL setzen, sondern nur die ungültigen zeichen per Schleife aus dem Edit entfernen ;-)

DeddyH 22. Aug 2008 13:44

Re: Edit Eingabe nur auf Zahlen beschränken, Probleme mit ^
 
Eine Exception zur Eingabeprüfung? Vielleicht besser so:
Delphi-Quellcode:
procedure TfrmMain.Edit1Exit(Sender: TObject);
var dummy: integer;
begin
  if not TryStrToInt(Edit1.Text, dummy) then
  begin
    Edit1.Text := '0';
    Edit1.SetFocus;
    Edit1.SelectAll;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 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