Avatar billede monie Nybegynder
27. april 2004 - 18:36 Der er 26 kommentarer og
1 løsning

Try, except og finally for dummies

Ved klik på RadioButton3 skal der tjekes for om variablerne indholder værdier og gør der det, skal programmer forsætte
ellers fejlmeddelse.

Som det er nu fås fejmeddelsen når der trykkes på RadioButton3,
hvis variablerne ikke har fået tildelt nogen værdi:
Se her: www.sunwind.dk/einvalidop.jpg

Forsøger med Try, except og finally men uden held.

Se mine koder her:

procedure TfmProfilValg.RadioButton3Click(Sender: TObject);
var
  n:  Integer;
begin
Try
if (Form1.OpenDialog1.FileName = '') or (Radius <=0) or (P <=0)
then
except
  on EInvalidOp do
  begin
  Showmessage('Der er ikke fortaget nogen input af talværdier');
  end;
end;

Memo1.Clear;
frmProfil.seZoom.Value:=0;
frmProfil.seVinkel.Value:=0;
Memo1.Font.Name:='courier new';
Memo1.Font.Size:=9;

  for n:=1 to 18 do begin

Er der ikke en der er mand for, at få koderne her til,
at virke og mindst indskrive kommentar hvad der sker og hvorfor.
Så selv jeg kan forstå det.

Mvh
Avatar billede snowball Novice
27. april 2004 - 19:06 #1
Hvis jeg ellers har forstået dit spørgsmål rigtigt, så prøv med nedenstående:

procedure TfmProfilValg.RadioButton3Click(Sender: TObject);
var
  n: Integer;
begin
if (Form1.OpenDialog1.FileName = '') or (Radius <=0) or (P <=0) then
  Showmessage('Der er ikke fortaget nogen input af talværdier');
else begin
  Memo1.Clear;
  frmProfil.seZoom.Value:=0;
  frmProfil.seVinkel.Value:=0;
  Memo1.Font.Name:='courier new';
  Memo1.Font.Size:=9;

  for n:=1 to 18 do begin
    //Indhold af for løkke
  end;
end;
end;

Try / except bruges til at "fange" de fejl der evt. måtte komme når du gør noget i dit program så du f.eks. kan vise en "pænere" fejlmeddelelse end den du linker til. Hvis du endelig skal bruge Try / excpet i dit eksempel, så prøv med nedenstående (går ud fra at din beregning bliver lavet i for løkken!):

  Try
    for n:=1 to 18 do begin
      //Indhold af for løkke
    end;
  Except
    ShowMessage('Der skete en fejl under udregningen!');
  End;
Avatar billede monie Nybegynder
27. april 2004 - 19:15 #2
Det er det her sted, jeg mener!
Når jeg klikker på RadioButton3 og der ikke er indskrevetnoget i OpenDialog1.FileName
eller Radius eller P

begin
Try
if (Form1.OpenDialog1.FileName = '') or (Radius <=0) or (P <=0)
then
except
  on EInvalidOp do
  begin
  Showmessage('Der er ikke fortaget nogen input af talværdier');
  end;
end;

Håber dette giver beder forståle af problemmet!
Avatar billede snowball Novice
27. april 2004 - 19:27 #3
Det er også det jeg har svaret på. Du kan som sådan ikke bruge try / except til det formål. En normal If / then / else er alt hvad der skal til.
Avatar billede monie Nybegynder
27. april 2004 - 19:33 #4
Vil du ændre nedstående kode, gerne indskrive forklaringer!
Eller har du en bedere måde?

procedure TfmProfilValg.RadioButton3Click(Sender: TObject);
var
  n:  Integer;
begin
Try
if (Form1.OpenDialog1.FileName = '') or (Radius <=0) or (P <=0)then
except
  on EInvalidOp do
  begin
  Showmessage('Der er ikke fortaget nogen input af talværdier');
  end;
end;
Avatar billede snowball Novice
27. april 2004 - 19:37 #5
Det har jeg allerede gjort. Se min kommentar 27/04-2004 19:06:27 :)
Avatar billede monie Nybegynder
27. april 2004 - 19:45 #6
procedure TfmProfilValg.RadioButton3Click(Sender: TObject);
var
  n:  Integer;
begin
if (Form1.OpenDialog1.FileName = '') or (Radius <=0) or (P <=0) then
  Showmessage('Der er ikke fortaget nogen input af talværdier');
else

Når der nu klikkes og der ingen værdier tilføjet, fås Showmessage.
Men så kommer www.sunwind.dk/einvalidop.jpg denne fejmeddelse igen?
Avatar billede monie Nybegynder
27. april 2004 - 19:50 #7
Det var der for jeg ville fange fejmeddelse EInvalidOp med Try, except og finally
Avatar billede snowball Novice
27. april 2004 - 19:56 #8
www.sunwind.dk/einvalidop.jpg fejlen vil ikke komme fordi du med "if (Form1.OpenDialog1.FileName = '') or (Radius <=0) or (P <=0) then" tjekker om betingelserne er til stede for at udføre en korrekt udregning.

Nu ved jeg så ikke hvad du laver i din for løkke, men hvis du sætter en try / except ind som vist i min første kommentar, så vil en evt. fejl blive fanget og "Showmessage('Der er ikke fortaget nogen input af talværdier');" vil blive udført.
Avatar billede monie Nybegynder
27. april 2004 - 20:01 #9
Når den har fanget fejlen og vist Showmessage skal den kalde denne procedure:
Form1.Profilvalg1Click(Sender); og ikke gå videre.
Avatar billede snowball Novice
27. april 2004 - 20:05 #10
Prøv med nedenstående.

procedure TfmProfilValg.RadioButton3Click(Sender: TObject);
var
  n: Integer;
begin
if (Form1.OpenDialog1.FileName = '') or (Radius <=0) or (P <=0) then begin
  Showmessage('Der er ikke fortaget nogen input af talværdier');
  Form1.Profilvalg1Click(Sender);
end
else begin
  Memo1.Clear;
  frmProfil.seZoom.Value:=0;
  frmProfil.seVinkel.Value:=0;
  Memo1.Font.Name:='courier new';
  Memo1.Font.Size:=9;

  for n:=1 to 18 do begin
    //Indhold af for løkke
  end;
end;
end;
Avatar billede monie Nybegynder
27. april 2004 - 20:11 #11
Når jeg nu compile, forsætte curseren ned til næste Procedure
Avatar billede snowball Novice
27. april 2004 - 20:16 #12
Øh, er ikke helt med på hvad du mener !?
Avatar billede monie Nybegynder
27. april 2004 - 20:18 #13
Får stadig fejmeddelse EInvalidOp efter Showmessage meddelsen
Avatar billede snowball Novice
27. april 2004 - 20:20 #14
Prøv lige og kopiere hele din TfmProfilValg.RadioButton3Click procedure herind. Måske sker fejlen i din for løkke som du ikke har vist al koden til.
Avatar billede monie Nybegynder
27. april 2004 - 20:24 #15
Her koden:
procedure TfmProfilValg.RadioButton3Click(Sender: TObject);
var
  n:  Integer;
begin
if (Form1.OpenDialog1.FileName = '') or (Radius <=0) or (P <=0) then begin
  Showmessage('Der er ikke fortaget nogen input af talværdier');
  Form1.Profilvalg1Click(Sender);
end else

Memo1.Clear;
frmProfil.seZoom.Value:=0;
frmProfil.seVinkel.Value:=0;
Memo1.Font.Name:='courier new';
Memo1.Font.Size:=9;

  for n:=1 to 18 do begin
    Naca4415X[n]:= 0.00;  Naca4415OP[n] := 0.00;  Naca4415NED[n] := 0.00;
  end;
  for n:=1 to 18 do
  Naca4415X[0]  :=  0.00;  Naca4415OP[0]  :=  0.00;  Naca4415NED[0]  :=  0.00;
  Naca4415X[1]  :=  1.25;  Naca4415OP[1]  :=  2.44;  Naca4415NED[1]  :=  -1.43;
  Naca4415X[2]  :=  2.50;  Naca4415OP[2]  :=  3.39;  Naca4415NED[2]  :=  -1.95;
  Naca4415X[3]  :=  5.00;  Naca4415OP[3]  :=  4.73;  Naca4415NED[3]  :=  -2.49;
  Naca4415X[4]  :=  7.50;  Naca4415OP[4]  :=  5.76;  Naca4415NED[4]  :=  -2.74;
  Naca4415X[5]  :=  10.00;  Naca4415OP[5]  :=  6.59;  Naca4415NED[5]  :=  -2.86;
  Naca4415X[6]  :=  15.00;  Naca4415OP[6]  :=  7.89;  Naca4415NED[6]  :=  -2.88;
  Naca4415X[7]  :=  20.00;  Naca4415OP[7]  :=  8.80;  Naca4415NED[7]  :=  -2.74;
  Naca4415X[8]  :=  25.00;  Naca4415OP[8]  :=  9.41;  Naca4415NED[8]  :=  -2.50;
  Naca4415X[9]  :=  30.00;  Naca4415OP[9]  :=  9.76;  Naca4415NED[9]  :=  -2.26;
  Naca4415X[10] :=  40.00;  Naca4415OP[10] :=  9.80;  Naca4415NED[10] :=  -1.80;
  Naca4415X[11] :=  50.00;  Naca4415OP[11] :=  9.19;  Naca4415NED[11] :=  -1.40;
  Naca4415X[12] :=  60.00;  Naca4415OP[12] :=  8.14;  Naca4415NED[12] :=  -1.00;
  Naca4415X[13] :=  70.00;  Naca4415OP[13] :=  6.69;  Naca4415NED[13] :=  -0.65;
  Naca4415X[14] :=  80.00;  Naca4415OP[14] :=  4.89;  Naca4415NED[14] :=  -0.39;
  Naca4415X[15] :=  90.00;  Naca4415OP[15] :=  2.71;  Naca4415NED[15] :=  -0.22;
  Naca4415X[16] :=  95.00;  Naca4415OP[16] :=  1.47;  Naca4415NED[16] :=  -0.16;
  Naca4415X[17] := 100.00;  Naca4415OP[17] :=  0.13;  Naca4415NED[17] :=  -0.13;
  Naca4415X[18] := 100.00;  Naca4415OP[18] :=  0.00;  Naca4415NED[18] :=  -0.00;

  Rkonstant:= serRadius.Value/100;
  //Sektion[n]:= (Rkonstant/10)*radius;

  //Memo1.Lines.Add('Rkonstant r/R: '+  FormatFloat('#0',Rkonstant));
  Memo1.Lines.Add('VingeProfil Type NACA 4412 ');
  Memo1.Lines.Add('VingeRadius '+  FormatFloat('#0',radius)+' mm');
  Memo1.Lines.Add('Afstand fra vingerod '+ FormatFloat('#0',(Rkonstant)* radius)+' mm');
  Memo1.Lines.Add('ProfilBredde '+ FormatFloat('#0.0',(5.6*radius)/(i*1.0*Rkonstant*(power(5,2))))+' mm');
  Profilbredde[18]:= (5.6*radius)/(i*1.0*Rkonstant*(power(5,2)));
  Profilbreddemaal:= FloatToStr(Profilbredde[18]);
  Memo1.Lines.Add(' ');

  for n:=1 to 18 do
  begin

  //SektionBredde[n]:= (16*pi*power(5000,2))/(9*i*1.0*2500*(power(5,2)));
  SektionBredde[n]:= (5.6*radius)/(i*1.0*Rkonstant*(power(5,2)));

    X[n]  := (SektionBredde[n] * Naca4415X[n]);
    Yop[n] := (SektionBredde[n] * Naca4415OP[n]);
    Yned[n]:= (SektionBredde[n] * Naca4415NED[n]);

    sx:= Format('%8.1f',[X[n]/100]);
    sYo:= Format('%8.1f',[Yop[n]/100]);
    sYn:= Format('%8.1f',[Yned[n]/100]);

    Memo1.Lines.Add('X[Hen]:'+sx+'  Y[op]:'+sYo+'  Y[Ned]:'+sYn);

    Panel1.Caption:=(' Vingebredde: '+ FormatFloat('#,##0.00;;Zero', SektionBredde[n])+' mm.');
    // Afstanden fra rod til NACA-profilet beregnes
    Label3.Caption:=('Afstand fra vingerod '+ FormatFloat('#0',(Rkonstant)* radius)+' mm');
    //Får Memo1 til øverste linje
    Linescroll_Op;
    end;
end;
Avatar billede monie Nybegynder
27. april 2004 - 20:30 #16
Hallo.
Ved at sætte en ekstre "end;" i slutningen af proceduren virkede det.
Du skal havde mange tak, for din hjælp og ikke mindst din tolmodighed med mig.

Mange tak snowball

Med venlig hilsen
Monie Jacobsen
Avatar billede snowball Novice
27. april 2004 - 20:31 #17
Prøv med nedenstående. Tjek evt. selv lige om jeg har fået afsluttet for lækkerne de rigtige steder.

Du manglede bla. en begin helt i starten sådan så den kun lavede alle beregningerne hvis de rigtige betingelser var opfyldt.

procedure TfmProfilValg.RadioButton3Click(Sender: TObject);
var
  n:  Integer;
begin
  if (Form1.OpenDialog1.FileName = '') or (Radius <=0) or (P <=0) then begin
    Showmessage('Der er ikke fortaget nogen input af talværdier');
    Form1.Profilvalg1Click(Sender);
  end
  else begin
    Memo1.Clear;
    frmProfil.seZoom.Value:=0;
    frmProfil.seVinkel.Value:=0;
    Memo1.Font.Name:='courier new';
    Memo1.Font.Size:=9;

    for n:=1 to 18 do
      Naca4415X[n]:= 0.00;  Naca4415OP[n] := 0.00;  Naca4415NED[n] := 0.00;

    for n:=1 to 18 do begin
      Naca4415X[0]  :=  0.00;  Naca4415OP[0]  :=  0.00;  Naca4415NED[0]  :=  0.00;
      Naca4415X[1]  :=  1.25;  Naca4415OP[1]  :=  2.44;  Naca4415NED[1]  :=  -1.43;
      Naca4415X[2]  :=  2.50;  Naca4415OP[2]  :=  3.39;  Naca4415NED[2]  :=  -1.95;
      Naca4415X[3]  :=  5.00;  Naca4415OP[3]  :=  4.73;  Naca4415NED[3]  :=  -2.49;
      Naca4415X[4]  :=  7.50;  Naca4415OP[4]  :=  5.76;  Naca4415NED[4]  :=  -2.74;
      Naca4415X[5]  :=  10.00;  Naca4415OP[5]  :=  6.59;  Naca4415NED[5]  :=  -2.86;
      Naca4415X[6]  :=  15.00;  Naca4415OP[6]  :=  7.89;  Naca4415NED[6]  :=  -2.88;
      Naca4415X[7]  :=  20.00;  Naca4415OP[7]  :=  8.80;  Naca4415NED[7]  :=  -2.74;
      Naca4415X[8]  :=  25.00;  Naca4415OP[8]  :=  9.41;  Naca4415NED[8]  :=  -2.50;
      Naca4415X[9]  :=  30.00;  Naca4415OP[9]  :=  9.76;  Naca4415NED[9]  :=  -2.26;
      Naca4415X[10] :=  40.00;  Naca4415OP[10] :=  9.80;  Naca4415NED[10] :=  -1.80;
      Naca4415X[11] :=  50.00;  Naca4415OP[11] :=  9.19;  Naca4415NED[11] :=  -1.40;
      Naca4415X[12] :=  60.00;  Naca4415OP[12] :=  8.14;  Naca4415NED[12] :=  -1.00;
      Naca4415X[13] :=  70.00;  Naca4415OP[13] :=  6.69;  Naca4415NED[13] :=  -0.65;
      Naca4415X[14] :=  80.00;  Naca4415OP[14] :=  4.89;  Naca4415NED[14] :=  -0.39;
      Naca4415X[15] :=  90.00;  Naca4415OP[15] :=  2.71;  Naca4415NED[15] :=  -0.22;
      Naca4415X[16] :=  95.00;  Naca4415OP[16] :=  1.47;  Naca4415NED[16] :=  -0.16;
      Naca4415X[17] := 100.00;  Naca4415OP[17] :=  0.13;  Naca4415NED[17] :=  -0.13;
      Naca4415X[18] := 100.00;  Naca4415OP[18] :=  0.00;  Naca4415NED[18] :=  -0.00;

      Rkonstant:= serRadius.Value/100;
      //Sektion[n]:= (Rkonstant/10)*radius;

      //Memo1.Lines.Add('Rkonstant r/R: '+  FormatFloat('#0',Rkonstant));
      Memo1.Lines.Add('VingeProfil Type NACA 4412 ');
      Memo1.Lines.Add('VingeRadius '+  FormatFloat('#0',radius)+' mm');
      Memo1.Lines.Add('Afstand fra vingerod '+ FormatFloat('#0',(Rkonstant)* radius)+' mm');
      Memo1.Lines.Add('ProfilBredde '+ FormatFloat('#0.0',(5.6*radius)/(i*1.0*Rkonstant*(power(5,2))))+' mm');
      Profilbredde[18]:= (5.6*radius)/(i*1.0*Rkonstant*(power(5,2)));
      Profilbreddemaal:= FloatToStr(Profilbredde[18]);
      Memo1.Lines.Add(' ');
    end;

    for n:=1 to 18 do begin
      //SektionBredde[n]:= (16*pi*power(5000,2))/(9*i*1.0*2500*(power(5,2)));
      SektionBredde[n]:= (5.6*radius)/(i*1.0*Rkonstant*(power(5,2)));

      X[n]  := (SektionBredde[n] * Naca4415X[n]);
      Yop[n] := (SektionBredde[n] * Naca4415OP[n]);
      Yned[n]:= (SektionBredde[n] * Naca4415NED[n]);

      sx:= Format('%8.1f',[X[n]/100]);
      sYo:= Format('%8.1f',[Yop[n]/100]);
      sYn:= Format('%8.1f',[Yned[n]/100]);

      Memo1.Lines.Add('X[Hen]:'+sx+'  Y[op]:'+sYo+'  Y[Ned]:'+sYn);

      Panel1.Caption:=(' Vingebredde: '+ FormatFloat('#,##0.00;;Zero', SektionBredde[n])+' mm.');
      // Afstanden fra rod til NACA-profilet beregnes
      Label3.Caption:=('Afstand fra vingerod '+ FormatFloat('#0',(Rkonstant)* radius)+' mm');
      //Får Memo1 til øverste linje
      Linescroll_Op;
    end;
end;
Avatar billede monie Nybegynder
27. april 2004 - 20:36 #18
Har du fået dine Point?
Avatar billede monie Nybegynder
27. april 2004 - 20:38 #19
Det med der manglede begin, var fordi jeg forsøgte med og uden begin
Avatar billede snowball Novice
27. april 2004 - 20:44 #20
Ja, men når du manglede en begin helt i toppen så bevirkede det at dine beregninger ville blive udført under alle omstændigheder  - altså også selvom dine variabler indeholdte 0.
Avatar billede snowball Novice
27. april 2004 - 20:44 #21
Og ja, jeg har fået mine point, tak :)
Avatar billede hrc Mester
29. april 2004 - 09:20 #22
En lille Try-Finally, Try-Except tutorial:

Try-finally bruges til at sikre tingene når tilbage til udgangspunktet - også selvom der sker fejl:

Screen.Cursor := crHourglass;
try
  // En tung operation
finally
  Screen.Cursor := crDefault;
end;

Try-except bruges til at håndtere fejlsituationer:

Table1.BeginTransaction;
try
  // En database operation som risikerer at gå galt
  Table1.CommitTransaction;
except
  Table1.RollbackTransaction;
  Raise;
end;

Hvis der sker en fejl i databaseoperationen så "raises" en exception og programmet går til except-delen og ruller det hele tilbage igen. Derefter (vha. "raise") sender den exceptionen videre.

Du kan også selv definere dine exceptions eller naturligvis bruge de eksisterende (såsom "exception"):

try
  st := InputBox('Indtast','Skriv "Hej"','');
  if st <> 'Hej' then
    raise Exception.Create('Du skrev ikke "Hej"!');
except
  on e: Exception do
    MessageDlg('Fejl opstået!+#13#10+e.Message,mtError,[mbOK],0);
end;

Her starte man selv en exception fordi brugeren ikke skriver hvad der forlanges.

Endelig kan man kombinere det:

Screen.Cursor := crHourGlass;
try
  Table1.BeginTransAction;
  try
    // En tung databaseoperation der risikerer at gå galt.
    Table1.CommitTransAction;
  except
    Table1.RollbackTransAction;
  end;
finally
  Screen.Cursor := crDefault;
end;

... Sådan gør man det.

Jeg fik det indtryk at du ville have koden til at starte en exception hvis det indtastede ikke var korrekt, såsom dette:

procedure TfmProfilValg.RadioButton3Click(Sender: TObject);
var
  n:  Integer;
begin
  try
    if (Form1.OpenDialog1.FileName = '') or (Radius <=0) or (P <=0) then
      raise EInvalidOP.Create('Der er ikke fortaget input af talværdier');
   
    // Resten af koden hvis der ER indtastet tal
  except
    on e: EInvalidOp do // Bemærk e: (grim syntaks), men skal bruges nedenfor "e.message"
      Showmessage(e.Message);
end;
Avatar billede monie Nybegynder
29. april 2004 - 17:18 #23
Til hrc
Du har ret det var den sidste procedure du beskriver jeg ønskede.
Men hvor er det svært, at beskrive problemmer og hvad man eksakt ønsker
af funktioner eller løsning skal værer.

Flot beskrevet, og nu nogen funktioner jeg vil arbejde vider med. Tak

Ps:
Det her og så godt du har beskrevet det, burde du havde Point for!
Håber du kan vente til end anden gang?

Med venlig hilsen
monie
Avatar billede monie Nybegynder
29. april 2004 - 17:50 #24
Til hrc

Du skal kun tage dette indlæg som indlæring.
Har fået det til, at virke men uden Try-Finally, Try-Except.
Men får fejl ved nedstående procedure:

procedure TfmProfilValg.RadioButton3Click(Sender: TObject);
var
  n:  Integer;
begin
//if (Form1.OpenDialog1.FileName = '') then Exit;
//if not (Form1.OpenDialog1.Execute) then begin;
  try
    if not(Radius >1) or (P >1) then
      raise EInvalidOP.Create('Der er ikke fortaget input af talværdier');

    // Resten af koden hvis der ER indtastet tal
  except
    on e: EInvalidOp do // Bemærk e: (grim syntaks), men skal bruges nedenfor "e.message"  Showmessage(e.Message);
end;


Denne her funktion virker, men uden Try-Finally, Try-Except.

procedure TfmProfilValg.RadioButton3Click(Sender: TObject);
var
  n:  Integer;
begin
//if (Form1.OpenDialog1.FileName = '') then Exit;
//if not (Form1.OpenDialog1.Execute) then begin;

if not (radius >1) or not (p >1) then begin
Showmessage('Der er ikke indtastet nogen talværdier for NACA 4412');
  Form1.Profilvalg1Click(Sender);
end else begin
Avatar billede hrc Mester
29. april 2004 - 17:54 #25
Det er helt i orden det med pointsene. Er stor fortaler af try-except/finally og havde lige lyst til at lave et belærede "skrift" om det.

Exceptions skal i øvrigt bruges med omtanke for de er relativt tunge og det er dødirriterende at debugge kode hvor der er exceptions - prøv du bare at se med ovenstående. Der dukker en exception op. Den trykker man OK til. Dernæst trykker man f9 og fortsætter, hvorefter man standses af endnu en meddelelse. Det er tungt og irriternde og man kan slå det fra i Delphi: Tools, Debugger Options, Language Exceptions, Stop on Delphi Exceptions, men så mister man også de "rigtige" exceptions.

Hvis man har en tidskritisk løkke med mange iterationer så er det smartere at undgå dem.
Avatar billede monie Nybegynder
29. april 2004 - 18:14 #26
Til hrc

Se indlægget/tråden:
Via IndputBox, at tildele variablen en værdi
under Kommentar 29/04-2004 17:57:11 Ang. TSpinEdit, der har jeg en kommentar.
Der kan jeg så give dig nogle Point.

Et andet vigtig indlæg:
Konverter til 3D formatet dxf, dwg eller ipt Filer.
Jeg ar bejder meget med autocad 2004 og inventor 6
Og det vingeprofil-program jeg har lavet,hvis resultst, vil jeg gerne havde konvertert til dwg file. Ønsker, at kunne tegne en vinge færdig med alle sektioner
af profiler og med en overflade, så det ligner en rigtig møllevinge.
Mvh
monie
Avatar billede monie Nybegynder
29. april 2004 - 18:52 #27
Jeg får 2 fejl ved kørslel af koderne her?
  try
    if not (Radius >1) or (P >1) then
Får fejl her -->raise EInvalidOP.Create('Der er ikke fortaget input af talværdier');

    // Resten af koden hvis der ER indtastet tal
  except
    on e: EZeroDivide do
    begin
Får fejl her -->    Showmessage('Fejl:'+e.Message'); // Bemærk e: (grim syntaks), men skal bruges nedenfor "e.message"  Showmessage(e.Message);
    end;
end;
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