Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Abfragen (https://www.delphipraxis.net/49741-abfragen.html)

cell 15. Jul 2005 09:54


Abfragen
 
ähmm ich bins nochmal :mrgreen:

wie kann ich denn aus einem Editfeld abfragen ob das was drinnen steht buchstaben oder zahlen sind ???

thx 4 help

Sharky 15. Jul 2005 09:57

Re: Abfragen
 
Hai cell,

die Frage ist eigentlich falsch gestellt. In einem Edit stehen immer nur Zeichen.

Du möchtest jetzt wissen ob Du diese Zeichen in eine Zahl umwandeln kannst.
Dafür gibt es zwei möglichkeiten:

a) Try und Error. Du versuchst also die Umwandlung und reagiert auf Fehler.
b) Du lässt einfach nur Zeichen in dem Edit zu ['0'..'9',Dezimalseperator] welche auch in eine Zahl konvertiert werden können.

s.h.a.r.k 15. Jul 2005 09:59

Re: Abfragen
 
du kannst aber auch die Funktion val(...) nutzen! Kenne leider die genauen Parameter nicht auswenidig!!!

marabu 15. Jul 2005 10:00

Re: Abfragen
 
Delphi-Quellcode:
function IsNumeric(s: string): boolean;
var
  i: integer;
begin
  Result := TryStrToInt(s, i);
end;
Grüße vom marabu

cell 15. Jul 2005 10:14

Re: Abfragen
 
ich hba isNumeric mal hineingeschrieben und auf F1 gedrückt und er kennt des ned ?
was muss ich da in de uses schrieben??

ibp 15. Jul 2005 10:15

Re: Abfragen
 
schau mal nach tryinttostr!

Sharky 15. Jul 2005 10:16

Re: Abfragen
 
Ähmm.... hallo?

Das ist eine Funktion die marabu geschrieben hat mit der Du prüfen kannst ob ein String in eine Zahl gewandelt werden kann.

Kompon Ente 15. Jul 2005 10:20

Wie wär's mit Ord und Chr?

cell 15. Jul 2005 10:22

Re: Abfragen
 
Was is Ord und Chr ??
kannst a bissi mehr dazu sagen bitte

Sharky 15. Jul 2005 10:22

Zitat:

Zitat von Kompon Ente
Wie wär's mit Ord und Chr?

Was soll das in diesem Fall denn bringen?

Kompon Ente 15. Jul 2005 10:24

Den Wert, der im Editfeld steht umwandeln und überprüfen, welche Zahl es in der ASCII-Tabelle ist -> dementsprechend handeln!

cell, schau mal in die DH - dort findest Du alles über Chr und Ord!

cell 15. Jul 2005 10:26

Re: Abfragen
 
ich will nur schauen ob es 1,2,3,4,5,6,7,8,9,0 is und wenn ja dann soll er es in die datenbank schreiben, wenn nein dann soll er eine fehelermeldung heruasgeben

Kompon Ente 15. Jul 2005 10:39

Was hälst Du

Delphi-Quellcode:
if Ord(Edit1.Text[1]) in [48..57] then // Zahlen im Editfeld?
  {schreibe die Zahlen in die DB}
davon? ;)

Jasocul 15. Jul 2005 10:45

Re: Abfragen
 
Geht nicht.
Du musst Inhalt des Edit-Feldes vorher einer String-Variablen zuweisen, weil du aif die Text-Eigenschaft nicht generell wie auf ein String zugreifen kannst. Dies ist einer der Fälle.
Delphi-Quellcode:
var
  s : String;
...
s := Edit1.Text;
if Ord(s[1]) in [48..57] then // Zahlen im Editfeld?
  {schreibe die Zahlen in die DB}

Sharky 15. Jul 2005 10:46

Ich glaube ich gebe es auf.

Es wurden drei Vorschläge gemacht wie man das ganze richtig lösst. Aber anscheinend scheint cell sich für Lösungsvorschläge nicht zu interessieren. :gruebel:

Kompon Ente 15. Jul 2005 10:47

Lass ihn doch, vllt. kennt er sich noch nicht so gut aus. ;)

Wir haben alle mal klein angefangen.. :)

Vor 4 Monaten wusste ich nicht mal, was 'ne Prozedur ist und jetzt bin ich bald mit meinem Game fertig! :thumb:

Treffnix 15. Jul 2005 10:48

Zitat:

Zitat von Kompon Ente
Was hälst Du

Delphi-Quellcode:
if Ord(Edit1.Text[1]) in [48..57] then // Zahlen im Editfeld?
  {schreibe die Zahlen in die DB}
davon? ;)

Ja suuuuper Idee, oder du vergleichst es so
Delphi-Quellcode:
Ord(Edit1.Text[1]) in [$30..$39]
damits noch kryptischer wird. Weil wie von Sharky vorgeschlagen die Chars zu vergleichen wäre ja viel zu übersichtlich. :roll:

Benutz die Hilfe such wie vorgeschlagen nach tryinttostr und dann benutz deinen Kopf.

turboPASCAL 15. Jul 2005 11:25

Re: Abfragen
 
Hier gibt es eine Numeric Edit Komponente http://www.delphiforfun.org/...

oder:
Delphi-Quellcode:
// als Decimal-Separator wird nur "." akzeptiert
function TestOfNumeric(S: String) : Boolean;
var
  r: Real;
  c: Integer;
begin
  val(s, r, c);
  Result := Boolean(c = 0);
end;

// if not TestOfNumeric(Edit1.Text) then Error...
das gibt es ja noch die Möglichkeit die Keys zu testen die gedrückt werden:
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  ...
  if Key in ['0'..'9', '.', ',' ] then ok else NichtOk; ...
  ...
end;
//Edit: PS.: Dein Titel ist ein bissel dünn "Abfragen" ?!?

Jasocul 15. Jul 2005 11:34

Re: Abfragen
 
Geht vielleicht ein einfaches TMaskEdit? Ich persönlich benutze die zwar nicht, aber für einen Anfänger doch eine praktikable Sache.

r2c2 15. Jul 2005 11:46

Re: Abfragen
 
Ich glaube wir sollten das mal zusammenfassen:

1.) n MaskEdit benutzen(Jasocul)

2.) nicht Zahl-Zeichen abfangen(turboPASCAL) Das würde ich dann aber noch etwas verbessern:
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  ...
  if not (Key in ['0'..'9', '.', ',', #8 ]) then
  begin
    Beep;
    Key := #0;
  end;
  ...
end;
3.)TryStrToInt(marabu)

4.) Selbst ne Funktion schreiben.(wurde von mehreren vorgeschlagen)
Das hat aber den Nachtteil, dass man so auch sowas berücksichtigen muss:
Code:
,,99,,,,,,2....5,9.,5,.
Is das ne Zahl, wenn ja, welche? :mrgreen:

Ich hoffe ich hab niemanden vergessen. Möglichkeiten sollten das jetzt auch genug sein. Ich persönlich würde Version 2 oder 3 nehmen.

mfg

Christian

Catbytes 15. Jul 2005 11:55

Re: Abfragen
 
Zitat:

Zitat von r2c2
2.) nicht Zahl-Zeichen abfangen(turboPASCAL) Das würde ich dann aber noch etwas verbessern:
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  ...
  if not (Key in ['0'..'9', '.', ',', #8 ]) then
  begin
    Beep;
    Key := #0;
  end;
  ...
end;

"Key" ist vom Typ "Word". Richtigerweise moniert Delphi dann:
"[Fehler] Unit1.pas(30): Inkompatible Typen: 'Word' und 'Char'"

r2c2 15. Jul 2005 11:59

Re: Abfragen
 
Zitat:

Zitat von Catbytes
"Key" ist vom Typ "Word". Richtigerweise moniert Delphi dann:
"[Fehler] Unit1.pas(30): Inkompatible Typen: 'Word' und 'Char'"

Das kommt davon, wenn man zu viel Copy&Paste benutzt! :mrgreen:

Das ganze mit OnKeyPress und es funktioniert!

mfg

Christian

Catbytes 15. Jul 2005 12:03

Re: Abfragen
 
Zitat:

Zitat von r2c2
Das ganze mit OnKeyPress und es funktioniert!

Soweit so gut - aber wenn ich mit Copy&Paste (wo wir schon beim Thema sind :mrgreen:) was einfüge, klappt es auch nicht.

Das "kleine" Problem ist komplexer als erwartet...

Edit: Vielleicht hilft auch das weiter.

r2c2 15. Jul 2005 13:49

Re: Abfragen
 
Zitat:

Zitat von Catbytes
Zitat:

Zitat von r2c2
Das ganze mit OnKeyPress und es funktioniert!

Soweit so gut - aber wenn ich mit Copy&Paste (wo wir schon beim Thema sind :mrgreen:) was einfüge, klappt es auch nicht.

Das "kleine" Problem ist komplexer als erwartet...

Edit: Vielleicht hilft auch das weiter.

Jo, is mir klar, das mit dem Copy&Paste. Wr das verhindern will nimmt entweder Möglichkeit Nr. 3,folgt deinem Link oder bastelt sich selbst was(Das wäre Nr. 4). Bei letzterem muss man Nr. 2 so erweitern, dass falsche Punkte/Kommas, etc. auch abgefangen werden und zusätzlich muss man Copy&Paste(per OnChange) noch abfragen und ggf. alles rausnehmen, was da nicht hingehört.

mfg

Christian


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