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

Composants VCL Delphi Discussion :

ComboBox et procédure onClick


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 4
    Par défaut ComboBox et procédure onClick
    Bonjour,

    J'ai une application assez complexe que je migre de D4 à D7.

    Pour faire court, j'ai une comboBox qui me lance une procédure onclick sans qu'aucun click n'ait été effectué...
    Cette procédure onClick n'est pas lancée sous delphi 4.

    Comment savoir ce qui lance cette procédure ?

    Merci d'avance pour votre aide.

  2. #2
    rbh
    rbh est déconnecté
    Membre chevronné Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Par défaut
    Salut
    Certain composant mélange un petit peu le Onclick et le OnChange, c'est peut-être quand tu remplis ta Combo.
    Autrement, avec D7, en pas à pas, tu peux demander la pile d'appel (le raccourci dépend des choix que tu as fait (dans les options d'environnement).
    Elle est aussi accessible par le menu "Voir|Fenêtre de débogage|Pile d'appel".

    :Edit:
    TicTacToe bizarre je commence à répondre au poste et le valide assez longtemps après, le temps de vérifier ce que je dis...

  3. #3
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Eventuellement en 1er, tu peux faire un point d'arret sur ta méthode et regarder en fenetre de debogage, l'histo des fonctions appelées ? ca vient peut etre d'une fonction et pas de ton evt ?


    :EDIT:
    ah... rbh a validé son post avant moi
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 4
    Par défaut
    Effectivement, c'est quand je remplis ma combo...

    Quand je tape la première lettre, ça lance onKeyDown, puis le onKeyPress, puis le onClick avant de lancer le onChange.
    Normalement j'ai un timer lancé par le onKeyUp qui permet d'attendre avant de lancer la recherche. Mais ce timer est court-circuité par le onClick, ce qui rend délicat l'utilisation des points d'arrêt pour débugger en pas à pas... (je sais pas si je suis bien clair...)

    Par contre, ce qui m'intrigue, c'est que le onClick n'est pas lancé lors de la première saisie dans la combo (quand celle-ci n'a pas déjà été chargée, ça lance bien la procédure prévue : onkeyDown, onKeypress, onChange, onKeyUp puis le timer.
    Ce n'est que si la combo est déjà remplie que ça me lance le onClick.

    Par contre dans la pile d'appel je n'ai que ma procédure onclick...

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 4
    Par défaut
    Je me permet de revenir à la charge, désolé.

    Après quelques tests supplémentaires, il semblerait bien que ce soit la comboBox qui s'emmèle les pinceaux et lance la procédure onClick avant la procédure onChange lorsque je change le texte.

    Quelqu'un sait-il s'il y a un correctif là dessus ? Ou le cas échéant, y a-t-il moyen de vérifier que le bouton de la souris à bien été enfoncé au début de la procédure onClick ?

    Merci d'avance encore une fois...

  6. #6
    Membre expérimenté

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Salut,
    onKeyDown ne permet-il pas de tester si le bouton souris est enfoncé, genre VK_LBUTTON, VK_RBUTTON ?
    Si c'est une touche clavier tu désactives le ONClick avec un test en entrée, par ex:
    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
     
    proc onKeyDown();
     begin
      if Key <> click then
        NoClick = true
      else
        NoClick := true;
      .... // traitement
     end;
    proc OnClick();
     begin
      if NoClick then
        Exit;
      ... // traitement
     end;
    Il existe le même problème quand on initialise des TEdit lors du Create, cela lance le OnChange du TEdit avec des traitements quelquefois source d'erreurs... Il suffit alors de créer une var globale boolean, bInit = true lors du OnCreate que l'on remet à false en sortie. Et un test dans OnChange du TEdit, active ou désactive le traitement.
    @+
    Fabrice

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 4
    Par défaut
    Bonjour,

    Je viens clore ce sujet, j'ai finalement résolu le problème.
    C'était tout con... enfin... presque...

    En fait le souci venait de la propriété "AutoComplete" du composant TComboBox sous Delphi 7 qui était à TRUE.
    Cette propriété n'existait pas sous Delphi 4 et à donc due être programmée par les développeur d'origine l'application. L'apparition de cette propriété faisant double emploi avec les développements, ça faussait complètement le comportement de la combobox.

    Par souci de simplicité, j'ai mis la propriété à False et mon appli à retrouvé son comportement d'origine.

    Par ailleurs, la propriété onClick n'est plus appelée, j'en déduis que c'est le fait de réussir l'autocomplétion dans la combobox (lorsque la propriété est à TRUE) qui lançait cette procédure (exactement comme si l'utilisateur avait en fait cliqué sur l'Item trouvé).

    Merci à tous pour votre aide...

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

Discussions similaires

  1. ACCESS Combobox (IHM) + SQL SERVEUR procédure stockée (DATABASE)
    Par thieuma2010 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 18/05/2011, 10h41
  2. [D7] Evénement OnClick dans une procédure partagée
    Par alainvh dans le forum Débuter
    Réponses: 9
    Dernier message: 28/01/2011, 19h04
  3. Procédure onclick sur sous-menus dynamique
    Par julesclaude dans le forum Langage
    Réponses: 3
    Dernier message: 29/06/2008, 21h43
  4. un evennement onclick sur combobox par code
    Par Mihalis dans le forum Delphi
    Réponses: 6
    Dernier message: 10/06/2007, 15h57
  5. [VBA]Execution d'une procédure avec un ComboBox sur Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/01/2006, 09h27

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