08. september 2008 - 16:54Der er
11 kommentarer og 1 løsning
Beregner: Fejl
Jeg er ved at lave et lille program der sal bruges til at beregne hvad de forskellige ting koster.
her er en lille kode: ________________ procedure TForm1.Edit1Change(Sender: TObject); begin label2.caption := inttostr(strtoint(edit1.text) * (2000)); label8.caption := inttostr(strtoint(edit1.text) * (2000)); label9.caption := inttostr(strtoint(edit1.text) * (0)); label10.caption := inttostr(strtoint(edit1.text) * (4000) div (100) * (30)); end; ________________ når jeg åbner programmet og skriver noget i den første edit "edit1.text" køre det hele som det skal, og den regner ud som den skal. men så når jeg sletter det tal jeg har skrevet i den textboxen kommer den med en fejl: '' is not a valid integer value
er der en der kan hjælpe mig med dette lille problem?
det er selvfølgelig fordi editen ikke indeholder noget, og "ingenting" kan du ikke konventere til et tal.
Du bør nok tjekke om edit1 indeholder et gyldigt tal uanset hvad, fx. med denne funktion:
function IsInteger(S: String): Boolean; var I, Code: Integer; begin Val(S, I, Code); Result := Code = 0; end;
procedure TForm1.Edit1Change(Sender: TObject); begin if not IsInteger(edit1.text) then begin showmessage('kun tal!'); end else begin label2.caption := inttostr(strtoint(edit1.text) * (2000)); label8.caption := inttostr(strtoint(edit1.text) * (2000)); label9.caption := inttostr(strtoint(edit1.text) * (0)); label10.caption := inttostr(strtoint(edit1.text) * (4000) div (100) * (30)); end; end;
og kan man ikke lave så den er en label hvor det hele bliver lagt sammen til sidst? fx: label77.caption := inttostr(strtointdef(label2.Caption) + strtointdef(label3.Caption),ffnumber,10,0);
altså hvor label2 fx bliver til 2.000, og label3 bliver til 3.000. kan man ikke så lægge det sammen så den skriver 5.000? med punktum (.) hver tredje tal???
function isNumeric(const s:str):boolean; var p:pChar;ln:longInt; begin ln:=length(s);result:=false;if ln=0 then exit;p:=pointer(s); while p^>#0 do begin if (p^<'0') or (p^>'9') then exit;inc(p) end;result:=true end;
function asIntSafe(const s:str;const aDefaultValue:longInt=0):int64; begin if isNumeric(s) then result:=strToInt(s) else result:=aDefaultValue end;
Det er rigtigt den nøjagtig samme løsning får du ved at skrive StrToIntDef(Edit1.Text, 0)
Mit lille indlæg var ikke for at komme med en anden løsning blot for at oplyse om TryStrToXXX ... Man har jo før hørt om Delphi programmører der ikke kendte StrToXXX .. Vi nævner ikke navne ....
Ja jeg har prøvet flere gange at have "opfundet noget" og så flere år efter finder man ud af at det er opfundet i forvejen *lol*
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.