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/)
-   -   ein Edit-Feld über eine Funtion/Procedure ändern (https://www.delphipraxis.net/129248-ein-edit-feld-ueber-eine-funtion-procedure-aendern.html)

cRayZo 15. Feb 2009 14:41


ein Edit-Feld über eine Funtion/Procedure ändern
 
Hallo, ich habe mir eine procedure geschireben, mit der ich ein edit-Feld auf seinen Inhalt prüfen kann.
Wenn der Inhalt inkorrekt ist, soll dieser gelöscht werden. Er wird aber nicht gelöscht, alles andere funktioniert ohne Probleme.
Wäre super wenn ihr mir helfen könnt!
Gruß cRayZo

Delphi-Quellcode:
procedure intcheck(LabelName:string);
var
i:     integer;
begin

 for i := 1 to length(LabelName) do begin
      if not (LabelName[i] in ['0','1','2','3','4','5','6','7','8','9']) then begin
         showmessage('ungültiges Zeichen');
         LabelName:='';        //<--- diese Zeile funktionier nicht
         exit;
      end;
   end;

if LabelName='' then exit else
if strtoint(LabelName)>15 then begin  
      showmessage('bitte Zahlen bis 15 eingeben');
      LabelName:='';           //<--- diese Zeile auch nicht nicht, ansonsten alles paletti
      exit; end;

end;

DeddyH 15. Feb 2009 14:42

Re: ein Edit-Feld über eine Funtion/Procedure ändern
 
Die Zeile funktioniert wahrscheinlich schon, nur weist Du den Leerstring ja nirgends dem Text des Edits zu.

mkinzler 15. Feb 2009 14:44

Re: ein Edit-Feld über eine Funtion/Procedure ändern
 
Du übergibst ja den String an die Prozedur. Dort arbeitest du mit einer Kopie. Änderungen daran wirken sich natürlich nicht auf das Original aus.

himitsu 15. Feb 2009 14:44

Re: ein Edit-Feld über eine Funtion/Procedure ändern
 
Wenn ein Parameter veränderbar sein voll, dann mußt du diesen als solchen kennzeichnen

Code:
procedure IntCheck([b]var[/b] LabelName: String);

[edit] man kann das Ganze aber auch kürzen

Delphi-Quellcode:
procedure intcheck(var LabelName: String);
var i: integer;
begin
  i := StrToIntDef(LabelName, -1);
  if (i < 0) or (i > 15) then begin  
    showmessage('bitte Zahlen bis 15 eingeben');
    LabelName := '';
  end;
end;

// bzw.

procedure intcheck(var LabelName: String);
var i: integer;
begin
  if not TryStrToInt(LabelName, i)
      or (i < 0) or (i > 15) then begin  
    showmessage('bitte Zahlen bis 15 eingeben');
    LabelName := '';
  end;
end;
PS: wenn du mit der ersten Schleife eine Exception in StrToInt verhindern wolltest, dann versuch mal '1234567890123456789' an StrToInt zu übergeben :zwinker:

DP-Maintenance 15. Feb 2009 14:55

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Laut Titel geht es um ein TEdit -> VCL

cRayZo 15. Feb 2009 15:02

Re: ein Edit-Feld über eine Funtion/Procedure ändern
 
super vielen Dank für eine Antworten!

nur noch eine Frage:
wenn ich die Procedure aufrufe habe ich bis jetzt zB. folgendes benutzt:
Delphi-Quellcode:
intcheck(lk14.Text);
wenn ich jetzt aber das mache, was himitsu sagt
Zitat:

Wenn ein Parameter veränderbar sein voll, dann mußt du diesen als solchen kennzeichnen
Delphi-Quellcode:
procedure IntCheck(var LabelName: String);

dann funktioniert das (logischer Weise) nicht mehr.
Der Fehler sieht dann wie folgt aus:

Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen

wie kannn ich das jetzt beheben?
Gruß cRayZo

mkinzler 15. Feb 2009 15:08

Re: ein Edit-Feld über eine Funtion/Procedure ändern
 
.Text ist kein normaler String sondern eine Property. Mach mal eine Funktion daraus.

jaenicke 15. Feb 2009 15:11

Re: ein Edit-Feld über eine Funtion/Procedure ändern
 
Oder du musst den Text in eine Stringvariable legen, die dann verändert werden kann, und danach wieder zurück.

Du kannst aber auch einfach nur das Editfeld selbst übergeben.

himitsu 15. Feb 2009 15:14

Re: ein Edit-Feld über eine Funtion/Procedure ändern
 
Delphi-Quellcode:
procedure intcheck(var LabelName: String);
var i: integer;
begin
  i := StrToIntDef(LabelName, -1);
  if (i < 0) or (i > 15) then begin  
    showmessage('bitte Zahlen bis 15 eingeben');
    LabelName := '';
  end;

var s: String;

s := lk14.Text;
intcheck(s);
lk14.Text := s;
oder du übergist direkt das Edit
Delphi-Quellcode:
procedure intcheck(Edit: TEdit);
var i: integer;
begin
  i := StrToIntDef(Edit.Text, -1);
  if (i < 0) or (i > 15) then begin  
    showmessage('bitte Zahlen bis 15 eingeben');
    Edit.Text := '';
  end;

intcheck(lk14);
[add] jetzt hat sich jaenicke vorgeschlichen :shock:


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