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 :

TTaskDialog qui ne s'exécute pas


Sujet :

Langage Delphi

  1. #1
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut TTaskDialog qui ne s'exécute pas
    Bonjour

    Décidément, c'est pas ma journée.
    Après mon problème de menu, j'ai voulu utiliser la très utile TTaskDialog.
    Sur un projet de test, je fais quelques essais et tout se passe à merveille.

    Je transfère le bout de code dans mon appli principale dans le code Execute d'une action de TActionList.
    Et là, le Execute du TTaskDialog passe directement à la ligne Free dans le Finally sans rien faire d'autre.

    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
     
      with TTaskDialog.Create(Self) do
        try
          try
            Caption       := 'Alpha';
            Title         := 'Imprimer';
            Text          := 'Choisissez le mode de regroupement';
            CommonButtons := [tcbOk, tcbCancel];
            MainIcon      := tdiNone;
            RadioButtons.Add.Caption := 'Groupement A';
            RadioButtons.Add.Caption := 'Groupement B';
     
            VerificationText      := 'Se souvenir de mon choix';
            Flags := [tfVerificationFlagChecked, tfUseHiconMain];
            if Execute then   // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
              if ModalResult = mrOk then
              begin
                Ok    := True;
                Choix := RadioButton.Index;
              end;
          except
            on E: Exception do
              ShowMessage(E.Message);
          end;
        finally
          Free;   // <<<<<<<<<<<<<<<<<<<<<<<<<
        end;
    Le code ne passe même pas dans le Except qui pourrait signaler une erreur quelconque.

    Le code étant exécuté dans une TForm modale, j'ai testé dans un appel menu de la form principale et le comportement est le même.

    La seule différence est que le projet de test a été créé directement dans sydney alors que le programme principal est issu de plusieurs migrations successives de Delphi.

    Une autre idée de la cause du problème ??

  2. #2
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    en traçant pas à pas, je suis arrivé dans

    Winapi.CommCtrl
    *function TaskDialogIndirect(const pTaskConfig: TTaskDialogConfig;

    La ligne suivante renvoie nil
    @_TaskDialogIndirect := GetProcAddress(ComCtl32DLL, 'TaskDialogIndirect');

    puisque tout de suite après le Assigned(_TaskDialogIndirect) renvoie False

    Et là, le code est abandonné.

    Maintenant, pourquoi ça fonctionne dans mon projet de test et pas ici ?

    Apparemment, je ne suis pas le seul à avoir un problème du même genre:

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Cela serait surprenant mais vous utilisez un vieux windows ?
    Est-ce qu'il y a bien un manifest dans votre programme, cela change le comportement des ComCtrls de Windows
    Je connais que de nom, je n'ai jamais utilisé ces boites de dialogues
    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

  4. #4
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    Je suis sur un Windows 8.1

    Pour le manifest, il n'y en a pas plus que dans mon projet de test.
    Je pourrais en mettre un mais en ajoutant quel genre de valeur ?

    Et pour en savoir plus: Un descriptif ici

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Points : 75
    Points
    75
    Par défaut
    Et si dans les options du projet tu cochais "utiliser les dcu de debuggage", puis tu construis et tu rendre en debug dans le execute ? (en supposant que tu n'aie pas une version community, auquel cas ça ne marcherais pas évidemment)

  6. #6
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    Citation Envoyé par wchris Voir le message
    Et si dans les options du projet tu cochais "utiliser les dcu de debuggage", puis tu construis et tu rendre en debug dans le execute ? (en supposant que tu n'aie pas une version community, auquel cas ça ne marcherais pas évidemment)
    c'est bien comme ça que je suis arrivé dans

    Assigned(_TaskDialogIndirect) renvoie False

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Points : 75
    Points
    75
    Par défaut
    Oups excuses, visiblement tu l'as déjà fait puisque tu arrives à Assigned(_TaskDialogIndirect)

    mais dans ce cas il y a un "else" qui s'occupes de recharger InitCommonControls il n'y va pas ?

    ps: tu pourrais utiliser sysinternals processmonitor en ne cochant que "fichiers" pour voir a quel comctl32.dll il essaye d'accèder

  8. #8
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    processmonitor c'est une idée.
    ça me permettrait de comparer les appels entre le projet de test et le projet principal.
    Merci pour l'idée !

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Points : 75
    Points
    75
    Par défaut
    si ComCtl32DLL est chargé et que
    @_TaskDialogIndirect := GetProcAddress(ComCtl32DLL, 'TaskDialogIndirect');
    renvoie nil il abandonne

    mais ça voudrait dire qu'il utilise le mauvais ComCtl32DLL qui ne contiens pas la fonction demandée pour le taskdialog

    peut être un pb de path dans windows ? espèrons que processmonitor t'apportera une réponse

    mais ça risque d'être coton car windows utilise le path en dernier, j'ai trouvé ça https://docs.microsoft.com/fr-fr/win...ectedfrom=MSDN

  10. #10
    Membre émérite

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    Eh ben il aura fallu du temps mais le hasard m'a apporté:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="yourapplicationname" type="win32"/>
    <dependency>
    <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0"
    publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/>
    </dependentAssembly>
    </dependency>
    </assembly>
    Ajouté au projet comme manifest et tout fonctionne !

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

Discussions similaires

  1. ms sql server 2000 : ".exe" qui ne s'exécute pas
    Par nyko_kliko dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/08/2006, 16h15
  2. Fichier exécutable qui ne s'exécute pas ?!
    Par bnadem35 dans le forum Linux
    Réponses: 4
    Dernier message: 12/07/2006, 11h35
  3. Réponses: 8
    Dernier message: 08/05/2006, 20h40
  4. probleme de requete mysql qui ne s'exécute pas
    Par anto48_4 dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/03/2006, 10h51
  5. [MySQL] requete sql qui ne s'exécute pas
    Par anto48_4 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 16/03/2006, 09h12

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