Синтаксическая ошибка Pascal и Delphi?

Это раздел кода из inno setup. Я намерен сделать два флажка, где одновременно выбирается один. Но этот код возвращает ошибку.

раздел [код]:

procedure CheckBoxOnClick(Sender: TObject);
var
Box2,CheckBox: TNewCheckBox;
begin
if CheckBox.Checked then
   CheckBox.State := cbUnchecked;
   Box2.State := cbChecked;
else                                //THIS LINE RETURNS AN ERROR: "Identifier Expected."
   CheckBox.State := cbChecked;
   Box2.State := cbUnchecked;
end;

procedure Box2OnClick(Sender: TObject);
var
Box2,CheckBox: TNewCheckBox;
begin
if Box2.Checked then
   CheckBox.State := cbChecked;
   Box2.State := cbUnchecked;
else                               //same error
   CheckBox.State := cbUnchecked;
   Box2.State := cbChecked;
end;

procedure CreateTheWizardPages;
var
  Page: TWizardPage;
  Box2,CheckBox: TNewCheckBox;
begin
  { TButton and others }

  Page := CreateCustomPage(wpWelcome, '', '');

  CheckBox := TNewCheckBox.Create(Page);
  CheckBox.Top :=ScaleY(8)+ScaleX(50);
  CheckBox.Width := Page.SurfaceWidth;
  CheckBox.Height := ScaleY(17);
  CheckBox.Caption := 'Do this';
  CheckBox.Checked := True;
  CheckBox.OnClick := @CheckBoxOnClick;
  CheckBox.Parent := Page.Surface;

  Box2 := TNewCheckBox.Create(Page);
  Box2.Top :=ScaleY(8)+ScaleX(70);
  Box2.Width := Page.SurfaceWidth;
  Box2.Height := ScaleY(17);
  Box2.Caption := 'No,Thanks.';
  Box2.Checked := False;
  Box2.OnClick := @Box2OnClick;
  Box2.Parent := Page.Surface;
end;


procedure InitializeWizard();
//var
begin
  { Custom wizard pages }
  CreateTheWizardPages;
end;

Подскажите где поменять..


person Omar    schedule 02.04.2010    source источник


Ответы (2)


В Паскале после then и else должен следовать один оператор или блок.

Вот как анализатор интерпретирует ваш код:

  1. В случае истинности условия будет выполнена строка CheckBox.State := cbUnchecked;. С этим утверждением предложение if закончено.
  2. Тогда Box2.State := cbChecked; всегда будет выполняться.
  3. else не принадлежит ни одному открытому оператору if -> Синтаксическая ошибка

Вы должны заключить код в блок, например:

procedure CheckBoxOnClick(Sender: TObject);
var
  Box2,CheckBox: TNewCheckBox;
begin
  if CheckBox.Checked then
  BEGIN
     CheckBox.State := cbUnchecked;
     Box2.State := cbChecked;
  END else                               
  BEGIN
     CheckBox.State := cbChecked;
     Box2.State := cbUnchecked;
  END;
end;
person Daniel Rikowski    schedule 02.04.2010

очень простой. Добавьте пункт begin ... end после вашего then.


if CheckBox.Checked then
BEGIN
   CheckBox.State := cbUnchecked;
   Box2.State := cbChecked;
END
else                                
person Etamar Laron    schedule 02.04.2010