Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - kein gültiger integer wert


crossit - Fr 25.12.09 02:28
Titel: kein gültiger integer wert
tach alle zusammen,
erstmal frohe weihnachten euch und hier ist gleich mal meine frage
habe mehr als 50 edit felder die summiert werden sollen und überprüft werden ob eine zahl drinn ist. ich habe es mit trytostr ausprobiert und alles hatte auch ganz gut geklappt jedoch habe ich zb 18 editfelder die ausgerechnet werden und das doch eine relativ große schreibarbeit ist vllt kennt jmd eine kürzere variante
hier mein code

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
zahl1,zahl2,zahl3,ergebnis : integer;
begin

if TryStrToInt(edit1.Text, zahl1)  and TryStrToInt(edit2.Text, zahl2) and TryStrToInt(edit3.Text, zahl3) then
begin
edit4.Text := IntToStr(zahl1 + zahl2+ zahl3) ;
end
else
 ShowMessage('Bitte nur Zahlen eingeben!');

end;


BenBE - Fr 25.12.09 02:54


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var 
    X: Integer;
    Summe: Integer;
    E: TEdit;
begin
    For X := 1 to 50 do
    Begin
        E := TEdit(FindComponent('Edit' + IntToStr(X)));
        If E <> nil then
        begin
            Summe := Summe + IntToStrDef(E.Text, 0);
        end;
    end;

    EditErgebnis.Text := IntToStr(Summe);
end;


crossit - Fr 25.12.09 12:55

danke für deine antwort! mir ist ein fehler aufgefallen unzwar mus es strtointdef heißen


elundril - Fr 25.12.09 13:26

wie wäre es im KeyPress bzw KeyDown gleich mal nur zahlen eingeben zu lassen? also das der benutzer gar ned auf die idee kommen kann buchstaben einzugeben. ;)

lg elundril


crossit - Fr 25.12.09 14:04

wäre auch eine variante aber so ists auch in ordnung :D
habe noch eine frage unzwar wie kann ich die beiden zusammen addieren ?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
procedure tform1.r4;
  var
    X: Integer;
    Summe: Integer;
    E: TEdit;
    ergebnis2 : integer;
begin
    For X := 10 to 11 do
    Begin
        E := TEdit(FindComponent('l' + IntToStr(X)));
        If E <> nil then
        begin
            Summe := Summe + strtointdef(E.Text, 0);
        end;
    end;

    ergebnis2 := Summe;
end;

procedure tform1.r5;
  var
    X: Integer;
    Summe: Integer;
    E: TEdit;
    ergebnis3 : integer;
begin
    For X := 12 to 16 do
    Begin
        E := TEdit(FindComponent('l' + IntToStr(X)));
        If E <> nil then
        begin
            Summe := Summe + strtointdef(E.Text, 0);
        end;
    end;

    ergebnis3 := Summe;
end;


Hugo343 - Fr 25.12.09 14:35

Wär das nicht besser wenn man für so viele Felder ein TStringgrid zu nehmen...?


crossit - Fr 25.12.09 15:53

top danke habe es hinbekommen!


Metschu - Fr 25.12.09 20:48

Eine andere Variante wäre noch, das man nur Zahlen in das entsprechende Feld eintragen kann:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
// Freigabe nur von Positiven ganzen Zahlen
procedure Teingabe.NurZahl(Sender: TObject; var Key: Char);
begin
 if not (Key in [#8'0'..'9']) // #8 ist die "Löschtaste"
  then key := #0;
end;


Wenn du Komma-Zahlen brauchst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure Teingabe.Komma_Zahl(Sender: TObject; var Key: Char);
var i:integer;
begin
 if Key = '.' then //wandelt Punkt in Komma um
    Key := ',';
 for i:=1 to length((Sender as TlabeledEdit).Text) do // Verhindert das mehrfache eingeben von Kommas
  if     (copy((Sender as TlabeledEdit).Text,i,1)=',')
     and (key =','
   then key:=#0;
  if NOT (Key in [#8'0'..'9'','])
   then Key := #0;
end;


Gruß

Torsten


elundril - Sa 26.12.09 00:39

user profile iconMetschu hat folgendes geschrieben Zum zitierten Posting springen:

Wenn du Komma-Zahlen brauchst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure Teingabe.Komma_Zahl(Sender: TObject; var Key: Char);
var i:integer;
begin
 if Key = '.' then //wandelt Punkt in Komma um
    Key := ',';
 for i:=1 to length((Sender as TlabeledEdit).Text) do // Verhindert das mehrfache eingeben von Kommas
  if     (copy((Sender as TlabeledEdit).Text,i,1)=',')
     and (key =','
   then key:=#0;
  if NOT (Key in [#8'0'..'9'','])
   then Key := #0;
end;


Gruß

Torsten


wozu so umständlich? ;)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure Teingabe.Komma_Zahl(Sender: TObject; var Key: Char);
var i:integer;
begin
 if Key = '.' then //wandelt Punkt in Komma um
    Key := ',';
 if pos(',', (Sender as TlabeledEdit).Text) > 0 then
   Key := #0;
  if NOT (Key in [#8'0'..'9'','])
   then Key := #0;
end;


Metschu - Sa 26.12.09 13:25

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:

wozu so umständlich? ;)


Form follows Function... :mrgreen:

Danke für den Tip, werde es übernehmen


Bergmann89 - Sa 26.12.09 15:55

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
wozu so umständlich? ;)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure Teingabe.Komma_Zahl(Sender: TObject; var Key: Char);
var i:integer;
begin
 if Key = '.' then //wandelt Punkt in Komma um
    Key := ',';
 if pos(',', (Sender as TlabeledEdit).Text) > 0 then
   Key := #0;
  if NOT (Key in [#8'0'..'9'','])
   then Key := #0;
end;


das musst du aber trotzdem noch prüfen, ob die Komma oder Punkt gedrückt wurden. So kannst du keine Zahl mehr eingeben, wenn ein Komma drin steht ;)

MfG Bergmann.


elundril - Sa 26.12.09 16:22

stimmt, denkfehler, sorry. ich denke aber um diese uhrzeit kann man mir das verzeihen, oder? :)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure Teingabe.Komma_Zahl(Sender: TObject; var Key: Char);
begin
 if Key = '.' then //wandelt Punkt in Komma um
    Key := ',';
 if (Key = ','AND (pos(',', (Sender as TlabeledEdit).Text) > 0then
   Key := #0;
 if NOT (Key in [#8'0'..'9'','])
   then Key := #0;
end;


so sollte es jetzt passen.

lg elundril