【问题标题】:Pascal and Delphi Syntax Error?帕斯卡和德尔福语法错误?
【发布时间】:2011-02-03 15:41:12
【问题描述】:

这是来自 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;

请告诉我在哪里更改..

【问题讨论】:

    标签: delphi inno-setup pascal


    【解决方案1】:

    在 Pascal 中,thenelse 之后必须跟一个语句或块。

    解析器是这样解释你的代码的:

    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;
    

    【讨论】:

      【解决方案2】:

      非常简单。在then 之后添加begin ... end 子句。

      
      if CheckBox.Checked then
      BEGIN
         CheckBox.State := cbUnchecked;
         Box2.State := cbChecked;
      END
      else                                
      

      【讨论】:

        猜你喜欢
        • 2013-03-19
        • 1970-01-01
        • 2021-04-14
        • 1970-01-01
        • 2010-11-19
        • 2018-08-18
        • 1970-01-01
        • 2014-07-08
        • 1970-01-01
        相关资源
        最近更新 更多