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 :

Evènement qui ne se déclenche pas


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Evènement qui ne se déclenche pas
    Bonjour,

    Je cherche à créer un petit executable qui aura pour but d'ouvrir un popupMenu à l'endroit où se trouve la souris. Il contiendra deux Items. Je souhaite avoir simplement (pour démarrer) un showmessage lors d'un clic sur un Item.

    Par contre, je ne veux pas utiliser de TForm dans l'appli. Mon problème, c'est que du coup, j'ai un mal de chien à faire réagir l'appli à mes clics de souris. Voici mon code :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    program AjusteWave;
     
    {$APPTYPE CONSOLE}
     
    uses
      Windows,
      Classes,
      Types,
      Menus,
      Dialogs;
     
    type
     
      TMonPopupMenu = class(TPopupMenu)
      private
        { Déclarations privées }
        Item1, Item2: TMenuItem;
        FOnClick : TNotifyEvent;
        procedure Item1Click(Sender: TObject);
      published
        property OnClick: TNotifyEvent read FOnClick write FOnClick;
      end;
     
    var
      Position: TPoint;
      ppMnu: TMonPopupMenu;
     
    procedure TMonPopupMenu.Item1Click(Sender : TObject);
    begin
      ShowMessage('J''ai cliqué sur l''Item1 !');
    end;
     
    begin
      ppMnu := TMonPopupMenu.Create(nil);
      try
        ppMnu.Item1 := TMenuItem.Create(nil);
        ppMnu.Item2 := TMenuItem.Create(nil);
        try
          ppMnu.Item1.MenuIndex := 1;
          ppMnu.Item2.MenuIndex := 0;
          ppMnu.Item1.Caption := '66 %';
          ppMnu.Item2.Caption := '15 %';
          ppMnu.Items.Add(ppMnu.Item1);
          ppMnu.Items.Add(ppMnu.Item2);
          GetCursorPos(Position);
          ppMnu.Item1.OnClick := ppMnu.Item1Click;
          ppMnu.Popup(Position.X, Position.Y);
        finally
          ppMnu.Item1.Free;
          ppMnu.Item2.Free;
        end;
      finally
        ppMnu.Free;
      end;
    end.
    Qu'ai-je oublié pour que cela fonctionne ?

    Je vous remercie par avance.
    Max.

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Un menu en mode console...

    tu vas avoir du mal à le faire...
    Bidouilleuse Delphi

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    A la limite, je peux mettre la directive {$APPTYPE GUI} au lieu de CONSOLE... bon enfin bref, mon problème reste entier

  4. #4
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    quel est ton problème ? ça ne compile pas ?
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  5. #5
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Ca ne peut pas marcher comme ça... Soit tu surcharges la méthode Click déjà existante soit, il faut que tu dises à ton composant quand déclencher l'évènement. Là en l'occurence, tout est prêt (ou presque) pour que l'évènement se déclenche sauf... le déclenchement!
    En fait, tu devrais avoir quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TMonPopupMenu.Click;
    begin
      if Assigned(FOnClick) then FOnClick(self);
    end;
    Ce qui déclenche l'évènement OnClick.
    Mais explique nous mieux ce que tu veux faire parce que visiblement, tu pars vers une mauvaise direction...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Pedro
    Mais explique nous mieux ce que tu veux faire parce que visiblement, tu pars vers une mauvaise direction...
    Je vais essayer d'être le plus concis possible :

    1) Je double-clique sur l'exe pour le lancer.
    2) A l'endroit où se trouve la souris, un popupmenu apparait avec deux items.
    3) Je sélectionne l'item que je souhaite (jusque là ça va )
    4) Je clique sur cet item, le menu se ferme et le programme m'affiche un showmessage "J'ai cliqué sur l'item 1" (par exemple)... sauf que... rien ne se passe.

    Je saurai faire ce programme très facilement en créant une Form, etc... mais je ne veux pas car je souhaite alléger au maximum mon executable. Si vous souhaitez d'autres renseignements qui pourraient vous aider à la résolution, n'hésitez pas.

    Merci d'avance.
    Max.

  7. #7
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    si ce n'est qu'une question de taille, essaie de faire ton Popup dans une form classique (ce sera bien plus facile) ensuite tu compile et tu compresse le tout avec un packer style upx http://delphi.developpez.com/faq/?pa...sserexecutable
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  8. #8
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    J'ai enquété sur ce problème
    Verdict : En fait, le problème, c'est que l'application console ne dispatche jamais le message WM_COMMAND vers le menu item, et là...
    Pour les autres messages, ça passe et je ne sais pas pourquoi...
    Bidouilleuse Delphi

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    tu n'as pas instancier le tapplication pour la gestion des evenements
    dans ce cas c'est a toi de les gerer
    avec une petite boucle et toi le tintouin c'est a dire le dispatch et autre methode de gestion d'evenement

    voila un exemple de code a ecrir pour gerer des evenements

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    function WndProc(hWnd: HWND; Msg: UINT;  wParam: WPARAM;  lParam: LPARAM): LRESULT; stdcall;
    begin
      case (Msg) of
        WM_CREATE:
          begin
            //inserer le code du debut de programe
          end;
        WM_CLOSE:
          begin
            PostQuitMessage(0);
            Result := 0
          end;
        WM_KEYDOWN
          begin
             // le code lors de l'appui d'une touche
             Result := 0;
          end;
        WM_KEYUP:   
          begin
             // le code lors de relachement d'une touche
            Result := 0;
          end;
        WM_SIZE:      
          begin
           //message de redimensionement de fenetre 
            Result := 0;
          end;
        else
          Result := DefWindowProc(hWnd, Msg, wParam, lParam);    // Redefinir les message le cas echeant
      end;
    end;
     
    // le winproc sert a remplacer celui de la fenetre 
    c'est a dire du menu 
     
    function WinMain(hInstance : HINST; hPrevInstance : HINST;
                     lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
    var
      msg : TMsg;
    begin
      Finished := false
     
      // Main message loop:
      while not finished do
      begin
        if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then 
       // verifie l'arrive des messages
        begin
          if (msg.message = WM_QUIT) then  
            finished := True
          else
          begin    
              TranslateMessage(msg);
              DispatchMessage(msg);
          end;
        end
      end;
       Result := msg.wParam;
    end;
     
    begin
      WinMain( hInstance, hPrevInst, CmdLine, CmdShow );
    end.
    bon le code est fait de tete donc pas tout a fait parfait
    mais le principe est la

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. Evénement "onclick" qui ne se déclenche pas sur un gadget windows
    Par CryoCid dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/12/2013, 11h55
  2. [SWING] Evenement qui ne se déclenche pas
    Par LordBob dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 15/06/2006, 15h57
  3. onmouseover qui ne se déclenche pas sous IE...
    Par narnou dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/03/2006, 17h26
  4. Un JOB qui ne se déclenche pas
    Par blids dans le forum Oracle
    Réponses: 15
    Dernier message: 09/02/2005, 21h14
  5. [trigger] ... qui ne se déclenche pas
    Par bozo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/01/2004, 11h31

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