IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

If et close; incompatible ?


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 16
    Points : 7
    Points
    7
    Par défaut If et close; incompatible ?
    bonjour,

    Voici une portion de code tres simple que delphi refuse de compilé, c'est pas la premiere fois que ça m'arrive mais j'ai toujours trouver une solution alternative.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If Condition Then
       Begin
       instructions
       closeFile(F);
       close; // LE PROBLEME EST ICI.
       end else
       begin
       instructions quelconque;
       end;
    Au moment ou je veux CLOSE; la form, il me repond :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [Erreur] rFrigo.pas(1539): '(' attendu(e) mais ';' trouvé(e)
    J'ai un peu l'impression qu'il considere le close pour autre chose, il me demande en effet de rentrer une chaine de type FILE.

    Si quelqu'un a une solution...
    Merci d'avance.

  2. #2
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    Bonjour,

    et en essayant Self.close;

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    quand je fais SELF. il ne veut pas generer le reste du code...

    donc ça marche pas

    Si il y a d'autre solution.. ?

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    La portée du mot-clé Self est limité au corps d'une méthode de classe.
    Ce qui ne doit pas être le cas dans ton code.
    Dans ce cas adapte ton code, c'est à dire crée une méthode ou utilise ceci

  5. #5
    Membre du Club

    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 61
    Points
    61
    Par défaut
    Le message d'erreur que tu obtiens signifie que le compilateur confond la méthode Close de TCustomForm et la procedure Close(File) de l'unité system. Il est étonnant qu'il ne veuille pas compiler avec un Self.Close.
    N'aurais-tu pas une clause With qui pourrait entrainer la confusion ?
    Une façon simple de contourner le problème est de remplacer ton close par l'appel à une procédure que tu crées et qui contient uniquement un appel à close :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Procedure TForm1.Fermer;
    begin
    Close;
    end;
     
     
    If Condition Then
       Begin
       instructions
       closeFile(F);
       Fermer;
       end else
       begin
       instructions quelconque;
       end;

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    re,

    J'avais deja essayé MaForm.close; ou Maform.self.close, mais ça ne marhcais pas.

    Le plus troublant est que meme si je crée une procedure fermer();
    Au moment de la compilation, le compilateur me renvoiela meme erreur, il pense que mon close est un closefile. (il me demande en effet une chaine de type FILE).

    D'autre solution... ?

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Communique-nous la méthode ou la procédure dans son intégralité, la déclaration de la classe et les clauses uses.

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Voila les USES

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Mask, CheckLst,
      ComCtrls, dateutils, Buttons,Math;
    Voila la procedure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
     
    AssignFile(Z, VersFichierStock);
    reset(Z);
    readln(Z, InfoSU);
    if infosu='' then
       begin
       ShowMessage('Il n''y a plus de client dans le stock');
       closeFile(Z);
       exit;
       end else
       begin
       Jedecrypte(InfoSU);
       // Creation du tableau 'tabl' avec les elements de la ligne
          while(pos(#9, retourCrypT) <> 0 ) do
          begin
          SetLength(Tabl, Length(Tabl) +1); // Augmentation de la taille du tableau d'un
          Tabl[Length(Tabl) -1] := Copy(retourCrypT, 1, pos(#9, retourCrypT) -1); // Contenu avant la tabulation
          Delete(retourCrypT, 1, pos(#9, retourCrypT));
          end;
       end;
    CloseFile(Z);
     
    APRES C'est QUE DE L'AFFICHAGE DU TYPE :
     
    EDIT.TEXT:=TABL[];
    Voili voilou, si quelqu'un a une solution

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Quel est le prototype de la procédure/méthode ?

  10. #10
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    procedure

  11. #11
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kymine
    procedure
    Ok
    elle n'est donc pas rattachée à un objet.
    As-tu essayé

  12. #12
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    re,

    Je viens d'essayer et ça ne marche pas
    il est vraiment etrange se probleme...

    Quand je fais MonUnit.Maform, il y a aucun probleme mais quand je me le . pour faire apparaitre le reste, le CLOSE n'y ait pas.

  13. #13
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Crée une nouvelle unité et place cet appel dans une procédure.
    Tu références uniquement l'unité de ta fiche concernée.

  14. #14
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure fermer();
    begin
    close;
    end;
    Dans une nouvelle unité et il me renvoie la meme erreur...
    ça pousse au suicide

  15. #15
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Essaie avec

  16. #16
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    pareil, par contre, j'ai du mettre uses MonUnit; pour pouvoir y acceder a partir de ma nouvell unité.

    donc ça ne marche toujours pas

  17. #17
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kymine
    donc ça ne marche toujours pas
    Tu es sûr d'adapter le code donné en exemple ?
    Donne-moi le code complet de cette unité et la déclaration de la forme que tu souhaites utiliser.

  18. #18
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Oui je suis sur d'adapter le code

    Je peux pas copier la fiche, il y a plus de 2500 lignes.

    J'ai trouver une solution toute bete qui s'adapte bien dans ce cas mais qui ne serait pas propre dans d'autre cas.
    J'avais un bouton QUITTER avec comme code a l'interieur Close; qui fonctionne, j'appel donc ce bouton la ou je voulais fermer ma fiche et tout vas bien.

    C'est vraiment bizarre quand meme.
    Des que je trouve pourquoi ça ne marchais pas, j'en ferai part a tout le monde sans hesiter.
    En tout Cas, merci a tous et un merci particulier a Laurent Dardenne.

  19. #19
    Membre du Club

    Inscrit en
    Juillet 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 48
    Points : 58
    Points
    58
    Par défaut
    Existe t il une fonction close qui est re-définie dans ton code ?

  20. #20
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Qu'est ce que tu veux dire par REdefinie ?

    Tu me demande si j'ai crée une fonction close? Si c'est cela, la reponse est non, de toute façon, le compilateur me refuser ce nom je pense.

Discussions similaires

  1. [LG]Problême "types incompatibles"
    Par pierrOPSG dans le forum Langage
    Réponses: 7
    Dernier message: 23/04/2004, 21h34
  2. [debutant][bdd] pb avec resultSet is closed
    Par mexong dans le forum JDBC
    Réponses: 5
    Dernier message: 22/03/2004, 16h42
  3. [Socket]Incompatible type ?
    Par Edouard Kaiser dans le forum Réseau
    Réponses: 30
    Dernier message: 21/02/2004, 20h58
  4. Utilisation de x.close et set x=nothing
    Par kayser dans le forum ASP
    Réponses: 3
    Dernier message: 05/12/2003, 08h49
  5. Réponses: 8
    Dernier message: 21/11/2003, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo