24. september 2003 - 16:18Der er
25 kommentarer og 1 løsning
edit1.text må ikke være ingenting!
Jeg er ret ny i det her, så det er måske nok et enkelt spørgsmål, men jeg kan altså ikke få det løst. Problemet er, at jeg har en edit-boks, hvor brugeren skal indtaste noget. Problemet er, at hvis man indtaster "ingenting" altså efterlader feltet blankt, så laver programmet en fejl. Jeg vil så lave det sådan, at hvis man ikke indtaster noget, så kommer det automatisk til at stå 0 i feltet. Hvordan gør jeg? Jeg har prøvet med følgende kode:
if editred.Text = 0 then editred.text :='0';
men der siger Delphi [Error] Unit1.pas(111): Incompatible types: 'String' and 'Integer'. Har så prøvet:
if strtoint(editred.Text) = 0 then editred.text :='0';
men så udføre programmet stadig fejl når man efterlader boksen blank...
jeg har lavet eksemplet fra bogen "Delphi 4 Programmering" hvor man laver en farve mixer. Jeg har så lavet det sådan, at man også kan indtaste en værdi i edit-boksene ved siden af og derved blande farverne på den måde. Nu er det jo ikke sikkert at i lige har bogen, så i får lige hele programkoden: unit Unit1;
procedure TForm1.ScrollBarRedChange(Sender: TObject); begin Red := scrollbarred.Position; editred.text := IntToStr(red); Shape1.Brush.Color := RGB(Red, Green, Blue); if Red <128 then label5.font.color:=clwhite; if Red >=128 then label5.font.color:=clblack; end;
procedure TForm1.ScrollBarGreenChange(Sender: TObject); begin Green := scrollbargreen.Position; editgreen.text := IntToStr(green); Shape1.Brush.Color := RGB(Red, Green, Blue); if Green <128 then label5.font.color:=clwhite; if Green >=128 then label5.font.color:=clblack; end;
procedure TForm1.ScrollBarBlueChange(Sender: TObject); begin Blue := scrollbarblue.Position; editblue.text := IntToStr(blue); Shape1.Brush.Color := RGB(Red, Green, Blue); if Blue <128 then label5.font.color:=clwhite; if Blue >=128 then label5.font.color:=clblack; end;
procedure TForm1.Generertilfldigfarve1Click(Sender: TObject); begin randomize; Red := Random(255); Green := Random(255); Blue := Random(255); shape1.brush.Color := RGB(Red, Green, Blue); Scrollbarred.position := Red; Scrollbargreen.position := Green; scrollbarblue.Position := Blue; end;
procedure TForm1.EditRedChange(Sender: TObject); begin Scrollbarred.Position := Strtoint(editred.text); begin if strtoint(editred.text) >255 then editred.Text :='0'; if editred.Text = '' then editred.text :='0'; end; end;
procedure TForm1.EditGreenChange(Sender: TObject); begin Scrollbargreen.Position := Strtoint(editgreen.text); begin if strtoint(editgreen.text) >255 then editgreen.Text :='0'; end; end;
procedure TForm1.EditBlueChange(Sender: TObject); begin Scrollbarblue.Position := Strtoint(editblue.text); begin if strtoint(editblue.text) >255 then editblue.Text :='0'; end; if editblue.text='' then editblue.text:='0'; end;
procedure TForm1.Luk1Click(Sender: TObject); begin Close; end;
Dit problem opstår når du ikke har en streng som lader sig direkte omsætte til en int ved hjælp af StrToInt, jeg vil foreslå at du bytter dine editbokse ud med en spinedit den finder du under samples, fordelen ved denne er at du altid har en integer værdi.
For det første er der en komponent i "Samples" som er lidt smartere til tal-værdier. Den hedder spinEdit
Den har dog samme problem.
Du skal nok bare lave din kode om til at bruge val() funktionen: i, Code: integer; Val(Editblue.Text, i, Code); if Code = 0 then scrollbarblue.position := i;
Val står for validate og returnerer 0 hvis konveteringen fra streng til tal gik godt.
Sad lige og legede lidt med SpinEdit - den er faktisk RET sart hvis man f.eks. trykker på pil-op og der ikke står noget i feltet. Så får man en exception. Ikke så sejt! Så brug du bare de almindelig edit-felter.
Karnapolice> Det er kun når du kørrer under Delphis debugger at du får en exception, prøv at starte dit program op direkte fra Windows og se så hvad det gir, alternativt slå din debugger fra
Når jeg bruger en spinedit boks, kan jeg slet ikke skrive nogen tal overhovedet i boksen. Jeg kan godt ændre værdien af spinedit boksene ved at bruge de små pile i siden, men jeg kan ikke selv skrive noget. Hvorfor ikke?
OK, jeg gir' mig. Det er nok ikke et stort problem når programmet er færdigt. Men jeg vil stadig gerne fremhæve mit svar med brugen af val() funktionen...det var vist dét det drejede sig om:-)
Hvis du kan ændre værdien med pilene så er det ikke read-only der er sat til. Men er numlock til? Husk at du kun kan skrive tal i en spinedit-komponent.
Jeg tror bare jeg lader være at gøre noget. Som Morten S sagde er problemet ikke så stort, når man kører programmet normalt i Windows. Da får man bare en fejlmeddelelse hvor der står: '' is not a valid interger value. Det kan jo være lige så godt... Hovedsagen er at programmet ikke bryder sammen.
Jamen det er kun fordi at Delphis debugger oplyser dig om at der er en exception at du får en fejlmeddelelse, spinedit håndtere fejlen rigtigt i den virklige verden, eller med andre ord den virker lige som den skal, glem alt andet snik snak
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.