Zitat von Frank Church <vfcli...@gmail.com>:

I will be upgrading to 2.4.0 soon.

It shouldn't be an error then.

2010/7/1 Guillermo Martínez Jiménez <gmarti...@burdjia.com>

> procedure TfrmHometel.SetSplitterSizes;
> var
>  i: integer;
> begin
>  for i:=3D 0 to ComponentCount - 1 do
>  begin
>   if Components[i] is TSplitter then
>   begin
>     with TSplitter(Components[i]) do
>     begin
>      if Cursor =3D crHSplit then
>        Width :=3D 7
>      else if Cursor =3D crVSplit then
>        Height :=3D 7;
>      ; // <-- removing this semicolon results in a syntax error. Is it
> syntax error some kind of extra strict compiler check.
>      Color :=3D clBlue;
>     end;
>   end;
>  end;
> end;

Compare with next:

     if Cursor =3D crHSplit then
       Width :=3D 7
     else
       if Cursor =3D crVSplit then
         Height :=3D 7; // <-- This semicolon is for the "if".
     ; // <-- This semicolon is for the "else".

No. A semicolon ends *all* open if/if-else/do statements.
The second semicolon is an empty statement - a 'no operation'.


Is like this:

IF ... THEN
BEGIN
 ...
END
ELSE BEGIN
 IF ... THEN
 BEGIN
   ...
 END;  // <-- This END is for the "IF".
END;  // <-- This END is for the "ELSE".

I recommend to use "BEGIN ... END" blocks in nested "IF" always to
prevent this kind of mistakes.

In general I agree, but in this case there are no nested ifs, so it won't help here.

Mattias


_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to