2012-07-20 11 views
1

Essayez d'obtenir une boîte de dialogue personnalisée pour utiliser les noms de bouton weapon1, weapon2 et cancel. Mais avec ce code, il donne une erreur sur le résultat non défini comme lorsque je tente de compiler Le message d'erreur estBoîte de dialogue personnalisée

[Erreur DCC] ssClientHost.pas (760): E2003 identificateur undeclared: « Résultat »

Le code est:

 with CreateMessageDialog('Pick What Weapon', mtConfirmation,mbYesNoCancel) do 
     try 
      TButton(FindComponent('Yes')).Caption := Weapon1; 
      TButton(FindComponent('No')).Caption := Weapon2; 
      Position := poScreenCenter; 
      Result := ShowModal; 
     finally 
    Free; 
    end; 
    if buttonSelected = mrYes then ShowMessage('Weapon 1 pressed'); 
    if buttonSelected = mrAll then ShowMessage('Weapon 2 pressed'); 
    if buttonSelected = mrCancel then ShowMessage('Cancel pressed'); 
+0

Est-ce que 'Result' est indéfini ou 'ShowModal' est-il indéfini? –

+0

[Erreur DCC] ssClientHost.pas (760): E2003 Identificateur non déclaré: 'Résultat' –

+4

Ensuite, vous n'êtes pas dans une fonction. Le résultat est le résultat d'une fonction, il n'a pas de sens dans une procédure donc il n'est pas disponible. –

Répondre

6

Le code affiché ci-dessus a beaucoup d'erreurs, à moins que des pièces que vous ne nous montrez. Pour une chose, s'il n'y a pas de variables de chaîne Weapon1 et Weapon2, alors vous ne pouvez pas vous référer à de telles variables! Deuxièmement, s'il n'y a pas de variable Result (il y a si le code est dans une fonction, par exemple), alors c'est aussi une erreur. En outre, dans votre code ci-dessus, buttonSelected est une variable que vous avez peut-être oublié de déclarer également. Enfin, d'abord vous parlez de Yes et No, alors vous parlez de Yes et Yes to all.

Les travaux de code suivants (autonomes):

with CreateMessageDialog('Please pick a weapon:', mtConfirmation, mbYesNoCancel) do 
    try 
    TButton(FindComponent('Yes')).Caption := 'Weapon1'; 
    TButton(FindComponent('No')).Caption := 'Weapon2'; 
    case ShowModal of 
     mrYes: ShowMessage('Weapon 1 selected.'); 
     mrNo: ShowMessage('Weapon 2 selected.'); 
     mrCancel: ShowMessage('Cancel pressed.') 
    end; 
finally 
    Free; 
end; 

Avertissement: L'auteur de cette réponse ne aime pas les armes.

+9

J'aime l'avertissement ;-). –

+0

Ahh vous avez, merci pour l'aide les armes sont définies ailleurs, et l'utilisation de cas au lieu de résultat fonctionne très bien! ..Egalement ses armes pour un jeu; D –

+0

@Glen: Je sais que! :) –

1

Le résultat est que défini dans une fonction:

function TMyObject.DoSomething: Boolean; 
begin 
    Result := True; 
end; 

procedure TMyObject.DoSomethingWrong; 
begin 
    Result := True; // Error! 
end; 

Alors, vous obtenez quelque chose comme:

function TMyForm.PickYourWeapon(const Weapon1, Weapon2: string): TModalResult; 
begin 
    with CreateMessageDialog('Pick What Weapon', mtConfirmation,mbYesNoCancel) do 
    try 
     TButton(FindComponent('Yes')).Caption := Weapon1; 
     TButton(FindComponent('No')).Caption := Weapon2; 
     Position := poScreenCenter; 
     Result := ShowModal; 
    finally 
    Free; 
    end; 
    // Debug code? 
{$IFDEF DEBUG) 
    if Result = mrYes then 
    ShowMessage('Weapon 1 pressed'); 
    if Result = mrAll then 
    ShowMessage('Weapon 2 pressed'); 
    if Result = mrCancel then 
    ShowMessage('Cancel pressed'); 
{$ENDIF} 
end; 
+0

maintenant que je pense à ce sujet, je savais que: D ... mais ce code a été posté comme un exemple d'utilisation de CreateMessageDialog. Je suis confus sur quelque chose ici. –

+0

Nous avons tous nos moments blonds ... –

Questions connexes