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

Delphi Discussion :

Probleme pour passer une Procedure


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 17
    Points
    17
    Par défaut Probleme pour passer une Procedure
    Alors le sujet est un peu ambigue mais je vais essayer d'expliqué correctement.

    J'ai une unité avec des procedures a l'interieur, il y a une procedure LireTarif(parm). Elle fonctionne tres bien, le probleme n'est pas la.

    Quand je fais appelle a cette procedure de façon simple (exemple sur un formcreate), tout fonctionne impeccable. Par contre, si je fais par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if opendialog1.execute then
      begin
       ShowMessage('ok1');
       LireTarifs(MesParams);
       ShowMessage('ok2');
    end;
    Et bien elle ne s'execute pas comme si elle etait ignorer.

    Quelqu'un a-t-il eu un probleme similaire ?

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    T'es certain que ça ne passe pas dans la procédure ? T'as essayé de mettre un showmessage('TEST') au début de la procédure ? Tu pourrais nous donner assez de code pour reproduire le bug ?

    Merci!

  3. #3
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Que vaut MesParams ? Est-ce que tu vois les 2 ShowMessage ?
    Si tu mets un point d'arrêt sur l'appel de la procédure et que tu fais F7 que se passe-t-il ? Et si tu mets le point d'arrêt dans la procédure ?

    Y-a-t-il des try except ou try finally dans la procédure ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Dans L'ordre :

    -> OUI j'ai mis un showmessage dans la procedure mais je ne le vois pas (sauf quand j'appel la procedure avec le if opendialog ou un if paramstr(1)

    -> MEs params, ben c'est juste le nom d'un fichier en faite. Je vais coller la procedure, elle est rikiki comme tout...

    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
    Procedure LireLesTarifs(LeFichier : string);
    var
    i : integer;
    chainons : string;
    begin
    i:=-1;
    SetLength(MonListing,0);
    AssignFile(G,LeFichier);
    reset(G);
    while not eof(G) do
      begin
      inc(i);
      SetLength(MonListing,1+i);
      Readln(G,chainons);
      MonListing[i] := TStringList.Create;
      MonListing[i].Text := StringReplace(chainons, #124, #13#10, [rfReplaceAll]);
      inc(NombreDeProduit);
      ShowMessage(MonListing[i][1]);
      end;
      CloseFile(G);
    end;

  5. #5
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Dans cette procédure, tu utilises beaucoup de variable globale (MonListing, G, NombreDeProduit), il est en général déconseillé de trop en utiliser, mieux vaut créer des variables locales ou passer les variables en paramètre (en var si on besoin de les modifier et que ce ne sont pas des objets).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(MonListing[i][1]);
    Tu ne testes pas auparavant qu'il y a bien 2 élements dans ta TStringList. Peut-être n'y a-t-il qu'un élément et tu as un Index Hors Limite comme message d'erreur.

    Fais-tu en amont un try except ? Si oui, affiches-tu le messages de l'exception ?

    Tu n'as pas dit si même la procédure n'est pas lancée, si tu voyais le ShowMessage( 'ok2' ); si ce qu'il se passait quand tu faisais un débugage dans le code de la procédure.

    Si le curseur du débugage saute à un moment donné, et lance l'application sans le mode débugage, c'est que l'application a créé une exception.

    Si tu n'as pas fait de try except en amont, essaie de le faire en appellant ta procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try
      LireLesTarifs( LesParams );
    except on E : Exception do
      ShowMessage( E.Message );
    end;

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Concernant lireLesTarifs(), elle fonctionne impeccable. Pour les variables, c'est ok, je suivrai ton conseil, en general je les mets en globale pour les testes ensutie, je fais du correcte rangement

    Sinon le Except ne renvoie rien. Le ShowMEsssage('ok2') est bien affiché.

    Je viens de decouvrir (oui si tot le matin! ) qu'il se pourrait que ce soit le fichier passer en parametre qui ne soit pas ouvert lorsque la procedure est executé apresun if paramStr() ou un if openDialog.execute ce qui me parait vraiment bizarre etant donné que c'est la premiere chose que fais le programme.
    Le fichier n'est appellé par aucune autre procedure ou varaible.

    Je viens de voir autre chose. Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    LireLesTarifs('monfichier.txt');
    ShowMessage(Monlisting[0][0]'); //L'affichage fonctionne
    if opendialog1.execute then
    begin
    ShowMessage(Monlisting[0][0]'); //L'affichage NE fonctionne PAS
    ShowMessage('ok');
    end;
    Evidemment l'opendialog est executé correctement

    Jeviens encore de decouvrir une chose.
    Meme si la fonctionne n'est pas dans le if condition, a partir du moment ou ParamStr() ou opendialog et executé, elle ne s'executé pas.

    Autrement dit, le code ci dessus fonctionne si je lance le programme directement. Par contre, si je le lance via un fichier (recuperer if paramstr par exemple), le code ci dessus ne fonctionne plus. Pourtant le fichier n'a rien a voir avec le fichier passer en parametre dans la procedure LireLesTarifs.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 17
    Points
    17
    Par défaut RESOLU A MOITIé
    Alors j'ai trouvé comment resoudre le probleme. J'ai deja du faire face a ce genre de probleme mais je ne sais pas quel en est la cause.

    Avec toute les conditions cité ci-dessus (de fonctionnement ou de non fonctionnement), il suffit de remplacer LireLesTarifs('MonFichier.txt');
    par LireLesTarifs('C:\progam files\monProg\Mofichier.txt'); et tout va bien.

    Pourtant Lexecutable et le fichier MonFichier sont dans le meme repertoire. La preuve en est que ça fonctionne si un Opendialog ou un If ParamStr(0) n'est pas executer.

    De façon generale, j'ai souvent eu des problemes a cause des ses fichus path. Si quelqu'un a une idée...

    MERCI A TOUS ce qui m'ont consacrer du temps en tout cas.

  8. #8
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Citation Envoyé par Kahiba
    Concernant lireLesTarifs(), elle fonctionne impeccable. Pour les variables, c'est ok, je suivrai ton conseil, en general je les mets en globale pour les testes ensutie, je fais du correcte rangement
    Imagines, tu travailles avec des variables globales, tu fais tous les tests, tout marche bien, puis tu ranges correcte et vlan, plus rien ne marche, tu dois faire une seconde série de tests pour que ça remarche, ça fait du travail en double.

    L'application par défaut possède un répertoire par défaut. Si on ne spécifie pas de répertoire pour un fichier, il prend ce répertoire, si tu fais un opendialog.execute, il va changer ce répertoire, et on dirait qu'avec ParamStr c'est la même chose.
    Parfois quand on ne spécifie pas de répertoire, il prend celui de l'application, parfois le répertoire Mes Documents ou le répertoire Windows, cela peut dépendre de la version de Windows. J'ai justement un morceau d'aide sur ce point dans l'aide d'InitialDir du composant OpenDialog, je t'invite à le lire aussi.

    En règle générale, il est bon de toujours spécifier le chemin pour être sûr que c'est celui qu'on souhaite qui soit pris en compte.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    ok merci merci webPac
    Tu parles du repertoire lors de la creation de l'executable ? ou alors d'autre chose ?

  10. #10
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Je parle de la gestion de fichiers dans le code, quand on ne spécifie pas de répertoire, il en prend un suivant la version de Windows et suivant les anciens choix de répertoire dans des dialogues comme OpenDialog ou SaveDialog.

    J'ai eu récement un soucis d'enregistrement de fichier non désiré, il n'y avait pas de répertoire défini, il me le mettait soit dans "Mes Documents", soit dans le répertoire de l'exécutable.

    Si tu veux récupérer le répertoire de l'exécutable tu peux faire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExtractFilePath( Application.ExeName );
    Tu peux aussi définir une fonction qui rajoute toujours le répertoire à un fichier s'il n'a pas été défini afin de ne pas refaire plusieurs le même travail.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Ok ça marche WebPAC.
    Bon, je vais rajouter un petit RESOLU sur le sujet now

    En tout cas merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/06/2007, 11h40
  2. [VB.NET] Probleme pour réutiliser une sockets ??
    Par fdiedler dans le forum Windows Forms
    Réponses: 12
    Dernier message: 10/03/2005, 14h37
  3. [MFC][debutant] probleme pour déclarer une structure
    Par Robleplongeur dans le forum MFC
    Réponses: 10
    Dernier message: 21/02/2005, 13h29
  4. Mkisofs - problème pour créer une image
    Par tomnie dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 04/08/2004, 11h44
  5. Réponses: 2
    Dernier message: 08/08/2003, 17h30

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