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

C++Builder Discussion :

Edition zone texte du libelle d'un TREENODE / Evenement Echa


Sujet :

C++Builder

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 8
    Par défaut Edition zone texte du libelle d'un TREENODE / Evenement Echa
    Bonjour a tous,

    je developpe avec Bcb6 sur XP.

    J'ai un souci sur un Treeview , plus particulierement sur l'edition du libelle d'un TTreenode.
    En fait l'edition se passe tres bien. J'ai du adapte mon IHM pour pouvoir utiliser Enter lors de l'edition du libelle du noeud.
    En effet, la zone d'edition d'un noeud n'etant pas un composant visuel, les evenements Enter ou echap ne sont pas pris par le noeud mais par les composants par defaut associes a ces evenements: en gros, mes boutons cancel et OK.

    Alors pour faire beneficier de ses deux evenments a la zone d'edition, j'ai rendu enabled=false les deux boutons cancel et ok.

    Jusque là, tout est ok.
    Seulement le souci est qu'une fois l'edition terminee, il faut rendre enabled=true les deux boutons (pour rendre le reste de l'utilisation possible) . Tout va bien tant que je vais jusqu'au bout de l'edition: sur l'event Onedited du tree view, j'ai la possibilite de remettre a true ma prop Enabled des boutons.

    MAIS , quand j'interromps l'edition avec ECHAP .... l'evenement echap capte par la zone d'edition du treenode n'est pas renvoye à un autre composant (par ex: Onkeypress de mon treeview ne recupere rien). Pour que le composant "au dessus" de ma zone d'edition du treenode recupere l'evenement, je dois retaper un deuxieme echap...

    Comment puis je resoudre ce probleme d'echap non renvoye par ma zone d'edition ?
    Ou alors, comment faire pour que les evenements Enter ou Echap soient recus par ma zone d'edition du treenode sans que je sois oblige de rendre la prop Enabled = false des boutons Cancel et OK avant d'entrer en edition.

    Merci par avance pour toutes les idees et propositions.
    Jerome

  2. #2
    Membre éprouvé Avatar de .:morgoth:.
    Profil pro
    Inscrit en
    Février 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 124
    Par défaut
    Plutot que de desactiver tes 2 boutons ce que tu peux faire, c'est intercepter les evenements Enter/Echap (donc OnKeyDown() je suppose) sur ces boutons mais en faisant une condition pour vérifier si une zone de la TreeView est en cours d'edition ou non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::Button1KeyDown (...)
    {
      if (Key==VK_RETURN)
      {
        if (this->ActiveControl==TreeView1 && edition_en_cours) 
            // ...
        else 
            // ...
      }
    }

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 8
    Par défaut
    Merci de ta reponse morgoth,

    Mais ca ne fonctione pas, le treeview prend le pas sur les evenements des boutons. De plus, la touche Echap ne declenche pas le OnkeyPress ou down ou Up des boutons.

    En fait, il ya un pre-requis obligatoire : le bouton OK a sa prop. Default = true, et le bouton Cancel a sa prop. Cancel = true.
    (PS: meme en mettant ces prop. a false, la solution que tu proposes ne fonctionne pas)

    C'est pourquoi j'ai mis la prop. Enabled = false en mode edition.

    Tout serait OK SI, lorsqu'on est en mode edition dans un treenode et que l'on appuie sur Echap, la callback associée a la fin d'edition du noeud se declenchait (Onedited) mais ce n'est pas le cas.

    J'ai retourne ton idee dans tous les sens: je n'ai pas trouve satisfaction.

    Merci encore.
    Jerome

  4. #4
    Membre éprouvé Avatar de .:morgoth:.
    Profil pro
    Inscrit en
    Février 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 124
    Par défaut
    Je vois parfaitement ton probleme mais j'avoue que j'arrive pas a trouver de solution evidente.
    Ce que je peux te proposer a la limite, c'est d'utiliser une astuce super tordue (et qui est pas sure du tout de marcher en plus...) pour pouvoir intercepter l'evenement "clic sur echap" lors de l'edition.
    Pour ca faudrait voir sur le OnEnter du TreeView.
    Je m'explique : en fait la condition pour que ca marche est que le composant lance un evenement OnEnter (c'est a dire activation du composant) qd tu quittes la zone d'edition. Si il considere qu'il est tjs actif c'est mort...
    Tu vois ce que je veux dire ??
    En fait tout depend de ca, faudrait verifier. Si ca marche apres c'est du gateau

  5. #5
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 8
    Par défaut
    Merci de tes indications.
    j'ai tout a fait compris le principe.
    Mais ca ne le fait pas (

  6. #6
    Membre éprouvé Avatar de .:morgoth:.
    Profil pro
    Inscrit en
    Février 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 124
    Par défaut
    Nom d'une pipe en bois !
    Et sur la selection d'un TReeNode il veut pas non plus ?
    (je suppose que t'as essayé avec tous les evenement spossibles et imaginables )

  7. #7
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 8
    Par défaut
    Hello again,
    pareil (onchange, onchanging) !
    j'ai effectivement tout changer.

    J'ai aussi essaye de desactiver mes boutons (Cancel et default a false), ca le fait pas.
    La seule solution que je vois maintenant est d'empecher l'edition du node, et de la remplacer par un TEdit qui se positionne a la bonne place.
    Bonjour la galere!
    Jerome

  8. #8
    Membre éprouvé Avatar de .:morgoth:.
    Profil pro
    Inscrit en
    Février 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 124
    Par défaut
    Oui la je commence a etre a court d'idées...
    Il te faudrait peut etre un composant TTreeView un peu plus évolué qui puisse le gérer. Regarde a tout hasard a cette adresse, y'a toutes les meilleures libraires de composants pour BCB:

    http://delphi.developpez.com/freewares/composants/

  9. #9
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 8
    Par défaut RESOLUTION
    Hello,

    Souci resolu par la methode suivante:
    - on tape enter ou Echap
    - sur l'evenemnt OncloseQuery, on teste si on est en edition via la methode TTreeView::IsEditing().
    Si c'est le cas, on positionne CanClose = false pour eviter la fermeture auto de la fiche (car ModalResult = mrOK en prop).
    - Ensuite, il faut savoir quelle touche a ete tapee (enter, echap).
    Pour cela, dans l'evenement OnClick du bouton OK, on fixe a true un booleen, dont on peut se servir dans OncloseQuery.
    - avec tout cela, on peut ,dans OnCloseQuery, declcnher la methode EndEdit dur le noeud en edition avec le bon argument qui est fonction de la touche K ou echap pressee.

    Merci a Roudoudou, un collegue malin/
    Merci a Moorgoth pour ses conseils.
    Jerome

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/08/2005, 11h27
  2. zone text
    Par aliasss dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 30/06/2005, 09h49
  3. forcer le curseur à ce positionner dans une zone texte
    Par caton dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/04/2005, 14h17
  4. Affichage Données avec Espace ds Zone Texte
    Par dai.kaioh dans le forum ASP
    Réponses: 2
    Dernier message: 22/02/2005, 16h43
  5. zone texte limitée
    Par virtuadrack dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/12/2004, 15h36

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