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 :

TTimer et Dll


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Points : 32
    Points
    32
    Par défaut TTimer et Dll
    Hello everybody,

    Je développe actuellement un bout de code partagé par un exécutable et une dll.
    Ce bout de code utilise un TTimer. Avec l'exécutable, tout se passe bien.
    Le problème est que dans la dll, l'évènement OnTimer n'est jamais appelé. Aprés quelques recherches, il apparait, sauf erreur de comprehension, que le Timer ait besoin d'etre fenetré. Si il n'est pas fenétré, le message Windows WM_TIMER n'est pas intercepté et l'évènement OnTimer n'est donc jamais exécuté.

    Je recherche donc comment utiliser mon bout de code dans ma dll?
    Quelqu'un a-t-il déjà rencontré ce problème?
    Dois-je créer un forme invisible et l'associer comme parent de mon Timer?
    Existe-t-il une autre solution?

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    tu peux aussi remplacer ton timer par un thread dans la DLL et une boucle avec un Sleep qui lance ainsi ton event a peu près régulièrement ...
    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

  3. #3
    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 770
    Points
    2 770
    Par défaut
    Citation Envoyé par user8 Voir le message
    Hello everybody,
    il apparait, sauf erreur de comprehension, que le Timer ait besoin d'etre fenetré. Si il n'est pas fenétré, le message Windows WM_TIMER n'est pas intercepté et l'évènement OnTimer n'est donc jamais exécuté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    constructor TTimer.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FEnabled := True;
      FInterval := 1000;
      FWindowHandle := Classes.AllocateHWnd(WndProc);
    end;
    Référence VCL
    AllocateHWnd, fonction

    Voir aussi Exemple

    Crée une fenêtre qui implémente une procédure de fenêtre spécifiée.

    Unité

    Classes

    Catégorie

    utilitaires de contrôles Windows

    function AllocateHWnd(Method: TWndMethod): HWND;

    Description

    Appelez AllocateHWnd pour créer une fenêtre qui n'est pas associée à un contrôle fenêtré. Généralement, cette méthode est utilisée pour créer des fenêtres non visuelles qui répondent aux messages mais n'apparaissent pas dans l'interface utilisateur. Par exemple, le composant TTimer utilise cette méthode pour créer une fenêtre qui répond aux messages du timer de Windows.

    Le paramètre Method spécifie la procédure de fenêtre que la fenêtre générée utilise pour répondre aux messages.

    AllocateHWnd renvoie le handle de la fenêtre créée.

    Remarque*: Utilisez la procédure DeallocateHWnd pour libérer les fenêtres créées à l'aide de AllocateHWnd.
    alors c'est bizzar
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Il s'avère que le timer n'était pas la source du problème... désolé

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Edam, remarque très intéressante, d'ailleurs, le code de AllocateHWnd est très éducatif !

    User8, sinon, le TTimer n'est pas d'une grande précision ... comment notifies-tu ton application appelante ?

    Serait-ce intéressant de connaître ton problème, cela pourrait aider du monde pour les pièges à ce sujet ... sauf si cela n'avait rien à voir ...
    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. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Dans mon cas, j'ai besoin d'un top toutes les 4 secondes environ donc le timer est bien assez précis pour moi.

    Pour le problème que j'avais, en faites, cela n'a rien à voir! C'était juste une erreur de ma part ...

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

Discussions similaires

  1. [CR] Infos sur l'utilisation de dll
    Par step dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 09/08/2002, 11h35
  2. Declarer une dll Delphi ?
    Par DelphiCool dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 10h07
  3. Débug de DLL
    Par Bayard dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/07/2002, 15h08
  4. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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