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 :

Nos petits trucs utiles de développeurs


Sujet :

Delphi

  1. #161
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 111
    Points : 171
    Points
    171
    Par défaut
    Bonjour
    Alors moi j'ajoute un petit truc en programmation.
    Des fois, on peut supprimer quelquestests. Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
    a     : integer;
    test : Boolean;
    begin
    if a = 0 then test = true else test = false;
    end;
    On peut remplacer ça avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
    a : integer;
    test Boolean;
     
    begin
    test := a=0;
    end ;
    a=0 retourne une valeur logique test reçoit cette valeur
    et merci pour tout vos trucs..

  2. #162
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    mon showmessage;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function MShowmessage(s:string;But:integer=MB_YESNO+MB_ICONQUESTION):integer;
    begin
        result:=Application.MessageBox(pchar(s),Pchar(NomApplic),But);
    end;
    Procedure MessageInfo(s:string);
    begin
        MShowmessage(s,MB_OK+MB_ICONASTERISK);
    end;
    Procedure MessageErreur(s:string);
    begin
        MShowmessage(s,MB_OK+MB_ICONEXCLAMATION);
    end;

  3. #163
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par Golgotha Voir le message
    L'astuce qui me viens spontanément et que j'utilise pour 90% des mes problèmes, la dichotomie.

    Exemple, j'ai une requête qui ne marche pas avec 10 lignes :

    0 -------------------------------------------------------------
    1 -------------------------------------------------------------
    2 -------------------------------------------------------------
    3 -------------------------------------------------------------
    4 -------------------------------------------------------------
    5 -------------------------------------------------------------
    6 ---------------------x erreur x-----------------------------
    7 -------------------------------------------------------------
    8 -------------------------------------------------------------
    9 -------------------------------------------------------------

    La méthode la plus efficace pour trouver l'erreur n'est pas de la chercher directement, mais de faire un découpage et de la localiser.

    Ainsi, je fait le test suivant :

    j'enlève la moitié de la requête.

    0 -------------------------------------------------------------
    1 -------------------------------------------------------------
    2 -------------------------------------------------------------
    3 -------------------------------------------------------------
    4 -------------------------------------------------------------

    La requête fonctionne. Je sais que l'erreur se trouve dans la deuxième moitié, je fait donc de même avec l'autre moitié :

    5 -------------------------------------------------------------
    6 ---------------------x erreur x-----------------------------
    7 -------------------------------------------------------------

    de même avec le reste... Je finirais par tomber sur l'erreur, grosse comme le nez au milieux de la figure !

    6 ---------------------x erreur x-----------------------------

    C'est une technique qui marche avec tout et n'importe quoi, surtout quand on cherche une aiguille dans une meule de foins.
    si FB, j'utilise flamerebin pour tester mes raquettes avant de les insérer dans delphi

  4. #164
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Bonjour,

    Comme Alainvh Je participe au niveau "ras des pâquerettes" :

    BUT : Comment localiser une erreur de logique qui ne provoque pas forcément un plantage ou un message d'erreur:

    1 ) Je crée une Form qui comporte un RichEdit si je manque de place dans les Forms du projet.

    2) Avant et après le ou les groupes d'instructions que je soupçonne fautives je place des RicheEdit.lines.Add() et des RicheEdit.upDate pour pouvoir suivre l'évolution de valeurs ou de résultats critiques.

    3) Pour éviter d'envoyer trop d'infos dans le RichEdit je les précède, si possible, de if ... then pour n'envoyer à la fin de chaque procédure franchie qu'une simple ligne disant par exemple "Procedure tartanpion : bien passé"

    4) Avant l'essai suivant suivant je supprime l'envoi des infos inutiles et je rétrécis le domaine des recherches jusqu'à ce que j'arrive à cerner la ligne où cela commence à dérailler.

    (un TRichEdit et non un TMemo car on a la possibilité offerte par RichEdit.Print en cas de besoin).

    Parfois c'est rapide, parfois c'est la galère, mais comme les compilos ne savent pas détecter toutes les erreurs qu'on peut faire autant se servir de la bécane pour localiser les erreurs.

    A+
    je préfére Tmemo sur la forme principal, moin lourd, et avec savetofile

  5. #165
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 704
    Points : 25 574
    Points
    25 574
    Par défaut
    Pour les versions PRO et plus
    OutputDebugString et le journal (Ctrl + Alt + V) intégré dans Delphi fait la même chose et permet aussi d'exporter !

    Pour les versions Perso, le Journal, c'est probablement le genre d'outil non fourni

  6. #166
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Points : 1 935
    Points
    1 935
    Par défaut


    Voici un petit truc, mais tout petit alors, l'autre fois dans une unité de milliers de lignes, je ne vous dis pas...

    S'agit tout bêtement d'éviter de mettre des accolades en guise de commentaire.

    Pourquoi me direz-vous ?

    Hé bien justement : imaginez que vous avez à neutraliser par exemple pour tests des milliers de lignes comportant ce genre de commentaires.

    Désormais avant de mettre sous {...} je réfléchis à deux fois et préfère les //

  7. #167
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message


    Voici un petit truc, mais tout petit alors, l'autre fois dans une unité de milliers de lignes, je ne vous dis pas...

    S'agit tout bêtement d'éviter de mettre des accolades en guise de commentaire.

    Pourquoi me direz-vous ?

    Hé bien justement : imaginez que vous avez à neutraliser par exemple pour tests des milliers de lignes comportant ce genre de commentaires.

    Désormais avant de mettre sous {...} je réfléchis à deux fois et préfère les //
    il reste possible de faire deux choses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    (* commentaire 1
     
    { commentaire 2
     
    // commentaire 3
     
    }
     
    fin du premier commentaire *)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {$IFDEF NON}
    (* commentaire 
     
    { autre commentaire }
     
    fin du premier commentaire *)
    {$ENDIF}

  8. #168
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Sinon tout autre chose mais très utile (que je viens de découvrir), sur windows :

    Shift + click droit sur un répertoire = accès à un menu spécial qui permet :
    - D’ouvrir une fenêtre cmd dans le dit rép
    - De copier le chemin d’accès absolu

    Troooooop bien ...

  9. #169
    Futur Membre du Club
    Femme Profil pro
    technicien supérieur en information option gestion
    Inscrit en
    Juillet 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : technicien supérieur en information option gestion
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2015
    Messages : 3
    Points : 6
    Points
    6
    Par défaut kamelia
    je suis débutante en programmation sur delphi

    alors ce site je le trouve très intéressant surtout ici c'est comme si un travail de groupe (question-réponse)
    alors j'ai pensée de vs contacter pour changer et améliorer mes connaissance grâce à votre aide

    merci d'avance

  10. #170
    Membre habitué
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Points : 144
    Points
    144
    Par défaut
    Mon petit truc de développeur même si j'aime pas me nommer comme ça vu que je ne suis pas un pro, c'est de dormir un peu des fois (en ce moment je ne le fais pas trop).

  11. #171
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Dès qu'une routine ou des routines devient difficile à déverminer, j'indique dans le form1.caption, j'inscris le nom de la routine entrante ainsi que le contenue des variables. Alors si le programme plante, je sais immédiatement où chercher, et pratiquement aucune erreur n'affecte ou ne modifie form1.caption. Ensuite j'insère alors du code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i:=0 to 500000 do begin;
        if i=253217 //valeur qui a planté le programme précédemment
            then sleep(1);//ici je met un point d'arrêt, qui permet de tracer ensuite
        ...
    end;
    J'insère parfois en phase développement, (parfois de façon permanente) dans form1.caption une barre de progression qui indique... la progression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function BarreProgression(Encours,Maximum:word;Longueur:word=20;Cars:string=':.'):string;//Éviter les caractères de largeurs différentes
    var i,p:integer;
    begin
        if length(cars)<2 then cars:=':.';
        if Maximum>0
            then p:=Encours*Longueur div Maximum
            else p:=1;
        setlength(result,longueur);
        for i:=1 to longueur do if i<=p
            then result[i]:=Cars[1]
            else result[i]:=Cars[2];
        result:=' '+result;
    end;
    On peut ajouter cette barre dans application.title. Ainsi juste en survolant l'icône de la barre de tâche l'utilisateur sait l'avancement sans avoir à basculer sur l'application en question. (Méthode peut-être archaïque maintenant avec les barres de progression superposées sur les icônes de la barre de tâches... )


    J'utilise rarement des procédures et presque toujours des fonctions qui envoie comme résultat Vrai ou Faux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function FaisTraitement(SurCetteDonnee:string):boolean;
    ...
     
    begin
        ...
        if not FaisTraitement(AutreDonnee) then exit;
        ...
    Écrire des procédures comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure val ( const NumberString : string; var NumberVar : Number Type; var ErrorCode : Integer ) ;
    est à proscrire mais plutôt utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function val ( const NumberString : string; var NumberVar : Number Type; var ErrorCode : Integer ) :boolean;overload;
    function val ( const NumberString : string; var NumberVar : Number Type) :boolean;overload;

    J'utilise des versions qui fournissent des messages d'erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function FaisTraitement(SurCetteDonnee:string):boolean;overload;
    function FaisTraitement(SurCetteDonnee:string;MessageErreur:string):boolean;overload;
    ...
     
    begin
        ...
        if not FaisTraitement(AutreDonnee,Message) then begin
            memoErreur.lines.add(Message);
            exit;
        end;
        ...
    J'essaie d'avoir la description complète de la fonction de par sa déclaration : le nom de la fonction est un verbe ou une groupe verbal, quant aux variables déclarées, elles indiques la teneur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function RemplaceDans(Chaine,Ca,ParCa:string):string;
    function Telecharge(URL:string):string;overload;
    function Telecharge(URL, DansCeFichier:string):boolean;overload;
    function Cree(CeRepertoire:string):boolean;
    function ListeFichiers(DansCeRepertoire:String;Fichiers:tstringlist):boolean;
    function EnumereLesFichiersPresents(DansCeRepertoire:String;Fichiers;tStringlist):integer;//résultat est le nombre de fichiers recensés enregistré dans Fichiers

    A+

  12. #172
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par sgmsg Voir le message
    Dès qu'une routine ou des routines devient difficile à déverminer, j'indique dans le form1.caption, j'inscris le nom de la routine entrante ainsi que le contenue des variables. Alors si le programme plante, je sais immédiatement où chercher, et pratiquement aucune erreur n'affecte ou ne modifie form1.caption. Ensuite j'insère alors du code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i:=0 to 500000 do begin;
        if i=253217 //valeur qui a planté le programme précédemment
            then sleep(1);//ici je met un point d'arrêt, qui permet de tracer ensuite
        ...
    end;
    Tu peux aussi utiliser un point d’arrêt conditionnel/compteur.
    1ere étape, tu mets un point d’arrêt , click droit > propriétés du point d’arrêt > compteur > passes > 999999999
    ensuite, lors du plantage, tu ouvres la fenêtre des points d’arrêt (voir > fenêtres de débogage > points d’arrêt ), et tu regarde la valeur de compteur de ton point d'arret
    2eme étape, tu remplaces 999999999 par cette valeur et tu redémarres.

    autre possibilité pour remplacer juste ton cas, tu vires ton if, et dans les propriétés du point d’arrêt , tu mets dans condition i=253217

  13. #173
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    Tu peux aussi utiliser un point d’arrêt conditionnel/compteur.
    1ere étape, tu mets un point d’arrêt , click droit > propriétés du point d’arrêt > compteur > passes > 999999999
    ensuite, lors du plantage, tu ouvres la fenêtre des points d’arrêt (voir > fenêtres de débogage > points d’arrêt ), et tu regarde la valeur de compteur de ton point d'arret
    2eme étape, tu remplaces 999999999 par cette valeur et tu redémarres.
    Ouah super le truc!

    Citation Envoyé par guillemouze Voir le message
    autre possibilité pour remplacer juste ton cas, tu vires ton if, et dans les propriétés du point d’arrêt , tu mets dans condition i=253217
    C'est parce que, si tu démarres à un autre endroit le problème peux tout aussi bien apparaître plus loin.

  14. #174
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message


    Voici un petit truc, mais tout petit alors, l'autre fois dans une unité de milliers de lignes, je ne vous dis pas...

    S'agit tout bêtement d'éviter de mettre des accolades en guise de commentaire.

    Pourquoi me direz-vous ?

    Hé bien justement : imaginez que vous avez à neutraliser par exemple pour tests des milliers de lignes comportant ce genre de commentaires.

    Désormais avant de mettre sous {...} je réfléchis à deux fois et préfère les //
    Il y a une logique dans tout ça:

    http://docwiki.embarcadero.com/RADSt...ler_Directives

  15. #175
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Citation Envoyé par sgmsg Voir le message
    Dès qu'une routine ou des routines devient difficile à déverminer, j'indique dans le form1.caption, j'inscris le nom de la routine entrante ainsi que le contenue des variables. Alors si le programme plante, je sais immédiatement où chercher, et pratiquement aucune erreur n'affecte ou ne modifie form1.caption. Ensuite j'insère alors du code du genre : [CODE]for i:=0 to 500000 do begin;
    J'utilise des versions qui fournissent des messages d'erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function FaisTraitement(SurCetteDonnee:string):boolean;overload;
    function FaisTraitement(SurCetteDonnee:string;MessageErreur:string):boolean;overload;
    ...
     
    begin
        ...
        if not FaisTraitement(AutreDonnee,Message) then begin
            memoErreur.lines.add(Message);
            exit;
        end;
        ...
    Je préfère ce genre d'écriture , mais ça reste un avis perso :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function FaisTraitement(SurCetteDonnee:string{$IFDEF DEBUG};MessageErreur:string{$ENDIF}):boolean;
    begin
      // ...
     
      {$IFDEF DEBUG}
      ShowMessage(MessageErreur);
      {$ENDIF}
    end;

  16. #176
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Ne pas oublier qu'il y a plusieurs types de points d'arrêt ...

    http://docwiki.embarcadero.com/RADSt...ng_Breakpoints

  17. #177
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Je préfère ce genre d'écriture , mais ça reste un avis perso :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function FaisTraitement(SurCetteDonnee:string{$IFDEF DEBUG};MessageErreur:string{$ENDIF}):boolean;
    begin
      // ...
     
      {$IFDEF DEBUG}
      ShowMessage(MessageErreur);
      {$ENDIF}
    end;
    J'utilisais ça auparavant. Mais dès que le traitement est complexe et que le programme fonctionne en temps réel, le showmessage arrête ton programme net, et il prend du retard. Mais comme tu dis, c'est aussi une question de goût.

    Merci pour les types de point d'arrêt :

  18. #178
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Comme le dit ShaiLeTroll un peu plus haut
    Citation Envoyé par ShaiLeTroll Voir le message
    Pour les versions PRO et plus
    OutputDebugString et le journal (Ctrl + Alt + V) intégré dans Delphi fait la même chose et permet aussi d'exporter !
    !qui correspond, je pense, parfaitement à ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function FaisTraitement(SurCetteDonnee:string{$IFDEF DEBUG};MessageErreur:string{$ENDIF}):boolean;
    begin
      // ...
     
      {$IFDEF DEBUG}
      OutputDebugString(PChar(MessageErreur));
      {$ENDIF}
    end;

  19. #179
    Invité
    Invité(e)
    Par défaut
    Je connaissait pas le OutputDebugString, merci

  20. #180
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Selon la version de Delphi, Codesite est aussi bien plus puissant.
    La version de base est gratuite pour les versions XE

Discussions similaires

  1. Thread "Nos petits trucs utiles de.." cadenassé
    Par Droïde Système7 dans le forum Débuter
    Réponses: 8
    Dernier message: 22/02/2012, 12h45
  2. Petit truc utile que j'ai découvert $.each
    Par SpaceFrog dans le forum jQuery
    Réponses: 12
    Dernier message: 27/08/2010, 03h12
  3. Petit truc tout simple que je comprend pas
    Par Olaf MENJI dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/11/2005, 17h56

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