Avatar billede smolle Nybegynder
24. september 2003 - 16:18 Der 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...
Avatar billede tuctoh Nybegynder
24. september 2003 - 16:19 #1
if
editred.Text = 0 then
editred.text :=0;
Avatar billede tuctoh Nybegynder
24. september 2003 - 16:20 #2
øhh... du spørger til om den er 0, men vil sætte den til det samme!?

Måske

if
editred.Text = '' then
editred.text :='0';
Avatar billede morten_s Nybegynder
24. september 2003 - 16:20 #3
if editred.Text = '' then
  editred.text :='0';

Prøv dette
Avatar billede smolle Nybegynder
24. september 2003 - 16:22 #4
undskyld tuctoh... det var en mig der skrev forkert her... har prøvet den mulighed også...
Avatar billede morten_s Nybegynder
24. september 2003 - 16:24 #5
Jeg tror lige vi skal se et par liner mere af din kode, eller nærmere bestemt hvordan du anvender editred.text senere i dit program
Avatar billede smolle Nybegynder
24. september 2003 - 16:24 #6
if editred.Text = '' then
  editred.text :='0';

virker ikke... den har jeg selv prøvet... som sagt lavede jeg en fejl da jeg skrev spørgsmålet her på siden.
Avatar billede tuctoh Nybegynder
24. september 2003 - 16:25 #7
så måske

if
editred.Text = '' then
editred.text :=0;

hvis editred.Text er et tal-felt :s
Avatar billede smolle Nybegynder
24. september 2003 - 16:27 #8
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;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus;

type
  TForm1 = class(TForm)
    ScrollBarRed: TScrollBar;
    ScrollBarGreen: TScrollBar;
    ScrollBarBlue: TScrollBar;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    EditRed: TEdit;
    EditGreen: TEdit;
    EditBlue: TEdit;
    Label4: TLabel;
    Shape1: TShape;
    Label5: TLabel;
    MainMenu1: TMainMenu;
    Filer1: TMenuItem;
    Luk1: TMenuItem;
    Rediger1: TMenuItem;
    Generertilfldigfarve1: TMenuItem;
    Ny1: TMenuItem;
    procedure ScrollBarRedChange(Sender: TObject);
    procedure ScrollBarGreenChange(Sender: TObject);
    procedure ScrollBarBlueChange(Sender: TObject);
    procedure Generertilfldigfarve1Click(Sender: TObject);
    procedure EditRedChange(Sender: TObject);
    procedure EditGreenChange(Sender: TObject);
    procedure EditBlueChange(Sender: TObject);
    procedure Luk1Click(Sender: TObject);
    procedure Ny1Click(Sender: TObject);
  private
    { Private declarations }
    Red, Green, Blue: Byte;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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;

procedure TForm1.Ny1Click(Sender: TObject);
begin
scrollbarred.position := 0;
scrollbarblue.position := 0;
scrollbargreen.position := 0;
end;

end.
Avatar billede morten_s Nybegynder
24. september 2003 - 16:30 #9
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.
Avatar billede smolle Nybegynder
24. september 2003 - 16:32 #10
Det er selvfølgelig også meningen at det skal gøres ud for grøn og blå, men nu skal jeg lige have det til at virke først.
Avatar billede smolle Nybegynder
24. september 2003 - 16:36 #11
Det lyder som en god ide... Det prøver jeg lige...
Avatar billede karmapolice Nybegynder
24. september 2003 - 16:37 #12
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.
Avatar billede morten_s Nybegynder
24. september 2003 - 16:38 #13
Når du skal aflæse værdien bruger du Value

SpinEdit1.Value:= 7;
du kan endvidere sætte minværdien til 0 og max værdien til 255
Avatar billede karmapolice Nybegynder
24. september 2003 - 16:38 #14
Ja, det var så mit svar...
Avatar billede karmapolice Nybegynder
24. september 2003 - 16:39 #15
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.
Avatar billede morten_s Nybegynder
24. september 2003 - 16:41 #16
karnapolice> Der vil altid stå noget i SpinEdit for du assigner selvfølgelig value til f.eks. 0 inden du begynder at bruge den.
Avatar billede karmapolice Nybegynder
24. september 2003 - 16:42 #17
Morten_s>Prøv at fjerne teksten og tryk på pil-op...
Avatar billede morten_s Nybegynder
24. september 2003 - 16:46 #18
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
Avatar billede smolle Nybegynder
24. september 2003 - 16:48 #19
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?
Avatar billede karmapolice Nybegynder
24. september 2003 - 16:48 #20
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:-)
Avatar billede morten_s Nybegynder
24. september 2003 - 16:50 #21
Val var vist nærmest noget vi brugte i Turbo Pascal, idag vil man gøre sådan her

try
  StrToInt(edit1.text);
except
  ShowMessages('Det var ikke et tal som var i Edit1');
end;
Avatar billede karmapolice Nybegynder
24. september 2003 - 16:50 #22
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.
Avatar billede smolle Nybegynder
24. september 2003 - 16:52 #23
numlock er slået til!
Avatar billede smolle Nybegynder
24. september 2003 - 17:01 #24
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.
Avatar billede morten_s Nybegynder
24. september 2003 - 17:04 #25
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
Avatar billede smolle Nybegynder
24. september 2003 - 17:08 #26
Okay. det tror jeg så jeg gør. Tak for hjælpen.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester