Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi edit soll nur zahle annehmen (https://www.delphipraxis.net/75760-edit-soll-nur-zahle-annehmen.html)

magic87 24. Aug 2006 15:48


edit soll nur zahle annehmen
 
hallo!
Ich habe ein Problem. Und zwar soll mein Editfeld nur Zahlen annehmen. Das ganze soll ich über ein Feld array machen und mit einer funktion in die ich eine Schleife einsetze. Mein bisheriger Quelltext sieht so aus:
Delphi-Quellcode:

const
  Ziffern : array[1..10] of char = ('0','1','2','3','4','5','6','7','8','9');
...
function IsOK(Key : char) : boolean;
...
function TForm1.IsOK(Key : char) : boolean;
begin
//Hier müsste eine Schleife die überprüft ob Zeichen in array oder nicht und wenn nicht ihr verbieten das Zeichen ins Editfeld zu schreiben
end;
Ich hoffe mir kann geholfen werden. Bin dankbar für jeden Tipp.
Liebe Grüße
Magic

Luckie 24. Aug 2006 15:51

Re: edit soll nur zahle annehmen
 
Och man, so langsam habe ich echt keine Lust mehr, hier zu helfen, wenn`die Leute anscheinend nicht bereit sind zu versuchen sich selber erstmal zu helfen. Gerade dieses Thema wird aktuell hier im Forum diskutiert und wurde auch schon in der Vergangenheit oft genug diskutiert. Warum gibt es eigentlich die Suche, wenn sie eh keiner benutzt? :?

Schaedel 24. Aug 2006 15:53

Re: edit soll nur zahle annehmen
 
Im Grunde hat Lucky recht...
Aber ich bin mal nicht so :-/

Also ... du gehst ins on Keypress.... oder on KeyDown von dem Edit... und läufst dann in der Schleife das Array durch...
Wenn das eingegebene im Array steht .... dann lass es zu ... wenn nicht schmeiß das eingegebene mit #0 wieder weg...

Den Quelltext erspar ich mir ... weil das nach Hausaufgabe aussieht...

Viel Spass


Schaedel
ps: bemüh die Hilfe...

magic87 24. Aug 2006 15:55

Re: edit soll nur zahle annehmen
 
ich hab die Suche schon benutzt! Tut mir leid.. aber ich habe schon versucht mir selber dadurch zu helfen. Aber ich habe nichts dazu gefunden.. jedenfalls nicht wie ich es gebrauchen könnte. Naja..hoffe trotzdem mir kann dazu jemand weiterhelfen.

mkinzler 24. Aug 2006 15:56

Re: edit soll nur zahle annehmen
 
Ich schmeiß mal wieder den TMaskEdit in die Runde.

Schaedel 24. Aug 2006 15:57

Re: edit soll nur zahle annehmen
 
Ich hab dir die Lösung oben angegeben ...
Schreiben werde ich dir den Quelltext nicht ;)
Ist ja ne Hausaufgabe und bei solchen Dingen soll man ja was lernen ;)

mkinzler :
Na ja ... kann er auch machen ... aber das käme ja nicht der AUfgabenstellung nach ;)

DGL-luke 24. Aug 2006 16:00

Re: edit soll nur zahle annehmen
 
Hier im Forum suchenedit nur zahlen

da is eigentlich alles was man braucht...

Luckie 24. Aug 2006 16:00

Re: edit soll nur zahle annehmen
 
Ich weiß ja nicht, wie du gesucht hast, aber wenn ich das eingebe: Hier im Forum suchenedit nur zahlen, dann find eich zum Beispiel das:
http://www.delphipraxis.net/internal...ht=edit+zahlen oder das
http://www.delphipraxis.net/internal...ht=edit+zahlen

Und wenn man die Suche noch etwas ausweitet, dann findet man bestimmt noch mehr Beiträge.

robinWie 24. Aug 2006 16:53

Re: edit soll nur zahle annehmen
 
man könnte auch vor abruf des Textes aus dem Edit alle Buchstaben entfernen. Ist aber nicht sehr elegant :D
Delphi-Quellcode:
var
 S: string;
 i: integer;
begin
S := Edit1.Text;
for i := 1 to length(Edit1.Text) do
 if not (S[i] = ['0'..'9'] then
   Delete(S, 1, 1);
Edit1.Text := S;
So müsste das irgendwie gehen. Habs aber nicht getestet

faux 24. Aug 2006 16:56

Re: edit soll nur zahle annehmen
 
@robinWie:
Bei deiner if-Abfrage darfst du nicht = schreiben, denn ein String kann nicht mit einer Liste ident sein, sondern du musst das Schlüsselwort in benutzen.

Grüße
Faux

Klaus01 24. Aug 2006 16:59

Re: edit soll nur zahle annehmen
 
Mußt denn Du mit einem Array arbeiten?

Ein Set würde praktischer sein

Delphi-Quellcode:
var
  numbers: set of '0'..'9';
dann in der OnkeyPress Routine

Delphi-Quellcode:
if not key in numbers then
  key:=#0;
Grüße
Klaus

A-M-X 24. Aug 2006 22:04

Re: edit soll nur zahle annehmen
 
Ich muss zwar zustimmen, dass man mehr suchen könnte, aber helfe trotzdem:

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then Key:= #0;
end;
Du kannst auch noch "Decimalseperator" für einen "." (Punkt), "Thousandseperator" für ein "," (Komma) und "VK_Back" für das Erlauben zum Drücken der Backspacetaste einbauen.

Delphi-Quellcode:
if not (key in ['0'..'9', DecimalSeparator, ThousandSeparator, Char(VK_BACK)]) then key:= #0;

Wie das mit deinem Code funtzen soll, kA sry ^^

magic87 25. Aug 2006 08:00

Re: edit soll nur zahle annehmen
 
Guten Morgen! danke erstmal für die ganzen Tipps! Habe die Möglichkeit mit Setof und der anderen Variante getestet. Hat alles super geklappt. Nur Leider muss ich es mit einem array und einer Schleife die sich in der function befindet programmieren. Hätte dazu auch noch jemand einen Lösungsvorschlag?
Liebe Grüße
Dennis

Jürgen Thomas 25. Aug 2006 08:24

Re: edit soll nur zahle annehmen
 
Zitat:

Zitat von magic87
Nur Leider muss ich es mit einem array und einer Schleife die sich in der function befindet programmieren. Hätte dazu auch noch jemand einen Lösungsvorschlag?

Zitat:

Zitat von Schaedel
Schreiben werde ich dir den Quelltext nicht ;)
Ist ja ne Hausaufgabe und bei solchen Dingen soll man ja was lernen ;)

Also in Umgangssprache codiert: Durch Delphi-Referenz durchsuchenfor, Delphi-Referenz durchsuchenwhile und Delphi-Referenz durchsuchenrepeat werden Schleifen erläutert:
Delphi-Quellcode:
for Zähler := Anfangswert to Endwert do Anweisung
//  Anfangswert: erster Index des Array
//  Endwert: letzter Index des Array
//  Anweisung: prüfe und notiere, ob das durch Key übergebene Zeichen mit dem Zeichen am jetzigen Index übereinstimmt
In dieser Situation ist for nicht geeignet, sondern while ist besser. Bitte überlege selbst, warum. Jürgen

Tipp: Formuliere Dir bei solchen Aufgabenstellungen selbst die Umsetzung in Code der Alltagssprache; das klappt auch bei komplizierten Fragen!

Schaedel 25. Aug 2006 08:31

Re: edit soll nur zahle annehmen
 
Delphi-Quellcode:
const Myarray : array[0..9] of char = ('0','1','2','3','4','5','6','7','8','9');


implementation

{$R *.DFM}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (IsKeyInArray(key)) then begin
    key := #0;
  end;
end;

function TForm1.IsKeyInArray(key: char): boolean;
var
  i :integer;
begin
  result := false;
  for i := 0 to 9 do begin
    if key = Myarray[i] then begin
      result := true;
      break;
    end
  end;
end;
Du solltest aber noch ein paar Tasten zulassen... wie z.b. Backspace und so ;)
das überlasse ich jetzt dir...

An die anderen:
Ich weiß das ich gerade die Lösung gepostet habe....
Sicher kann er diese nun kopiere und einfügen ... bringt ihm aber in der Klassenarbeit wenig...
Ich hoffe er schreibt es nach ... und kopiert es nicht nur ...


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