+ Répondre à la discussion Actualité déjà publiée
Page 9 sur 10 PremièrePremière ... 5678910 DernièreDernière
  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 857
    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 857
    Points : 2 576
    Points
    2 576

    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;
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  3. #163
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    décembre 2003
    Messages
    1 857
    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 857
    Points : 2 576
    Points
    2 576

    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
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  4. #164
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    décembre 2003
    Messages
    1 857
    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 857
    Points : 2 576
    Points
    2 576

    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
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  5. #165
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 682
    Points : 16 006
    Points
    16 006

    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
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #166
    Membre expérimenté
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    septembre 2003
    Messages
    1 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 1 913
    Points : 1 688
    Points
    1 688

    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
    6 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 565
    Points : 20 652
    Points
    20 652

    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}
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  8. #168
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    mai 2013
    Messages
    145
    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 : 145
    Points : 93
    Points
    93

    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
    Candidat au Club
    Femme Profil pro
    technicien supérieur en information option gestion
    Inscrit en
    juillet 2015
    Messages
    1
    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 : 1
    Points : 3
    Points
    3

    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 : 143
    Points
    143

    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 actif
    Profil pro
    Inscrit en
    janvier 2009
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : janvier 2009
    Messages : 231
    Points : 236
    Points
    236

    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 éprouvé Avatar de guillemouze
    Profil pro
    Inscrit en
    novembre 2004
    Messages
    730
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : novembre 2004
    Messages : 730
    Points : 1 136
    Points
    1 136

    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 actif
    Profil pro
    Inscrit en
    janvier 2009
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : janvier 2009
    Messages : 231
    Points : 236
    Points
    236

    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 chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 2 098
    Points : 1 895
    Points
    1 895

    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 chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 2 098
    Points : 1 895
    Points
    1 895

    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 chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 2 098
    Points : 1 895
    Points
    1 895

    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 actif
    Profil pro
    Inscrit en
    janvier 2009
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : janvier 2009
    Messages : 231
    Points : 236
    Points
    236

    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 éprouvé Avatar de guillemouze
    Profil pro
    Inscrit en
    novembre 2004
    Messages
    730
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : novembre 2004
    Messages : 730
    Points : 1 136
    Points
    1 136

    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
    Membre actif Avatar de retwas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 329
    Points : 285
    Points
    285

    Par défaut

    Je connaissait pas le OutputDebugString, merci

  20. #180
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 2 098
    Points : 1 895
    Points
    1 895

    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ébutant
    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 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