2010-04-02 5 views
2

Ceci est la section de code d'inno setup.Mon intention est de faire deux case à cocher où à la fois un est en cours de sélection. Mais ce code renvoie une erreur.Erreur de syntaxe Pascal et Delphi?

[code] section:

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; 

S'il vous plaît me dire où changer ..

Répondre

5

Dans Pascal après then et else une seule instruction ou d'un bloc doit suivre.

Voici comment l'analyseur interprète votre code:

  1. Si la condition est vraie, la ligne CheckBox.State := cbUnchecked; sera exécutée. Avec cette déclaration, la clause if est terminée. Ensuite, Box2.State := cbChecked; sera toujours exécuté.
  2. Le else ne fait pas partie à aucune déclaration if actuellement ouvert ->Erreur de syntaxe

Vous devez joindre le code dans un bloc, comme celui-ci:

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; 
+0

Eh bien mon mauvais, merci. –

0

très simple. Ajoutez une clause begin ... end après votre then.


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