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

Delphi Discussion :

[D7] Treeview - Annuler l'effet d'un double clic


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut [D7] Treeview - Annuler l'effet d'un double clic
    Bonjour à tous,

    J'ai un treeview qui contient un arbre (extraordinaire !!! ).
    Lorsque je double clique sur un élement (treeNode), j'ouvre une fenetre.

    Seulement, il y a un comportement automatique qui fait s'ouvrir ou se refermer l'arborescence du noeud lors du double clic sur celui ci.... Je n'en veut pas.

    Comment l'enlever ?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut
    Salut

    Il faut que tu mettes sa propriété autoexpand à "False"

  3. #3
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    C'est fait, mais ce n'est pas ca.

    Autoexpand, c'est lors du simple clic.
    Cette propiété est à False par défaut...

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut
    Oups, j'ai mal lu le topic....

    Je vais chercher de mon coté...

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut
    Je viens d'essayer cela et ca marche, seulement cela d'oblige à deployer completement tout arborescence à l'ouverture de ta fiche, mais cela peut te convenir
    Voila ce que j'ai fais:

    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
    64
    65
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls;
     
    type
      TForm1 = class(TForm)
        TreeView: TTreeView;
        procedure FormCreate(Sender: TObject);
        procedure TreeViewDblClick(Sender: TObject);
        procedure TreeViewExpanding(Sender: TObject; Node: TTreeNode;
          var AllowExpansion: Boolean);
        procedure TreeViewCollapsing(Sender: TObject; Node: TTreeNode;
          var AllowCollapse: Boolean);
      private
        { Déclarations privées }
        CanExpand : boolean;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     
      //On autorise le deploiement
      CanExpand := true;
      //ici on rempli l'arbre soit manuellement soit automatiquement
     
     
      //On le deploie
      TreeView.FullExpand;
     
      //ensuite on interdit le deploiement automatique
      CanExpand := False;
     
    end;
     
    procedure TForm1.TreeViewDblClick(Sender: TObject);
    begin
      Showmessage('DoubleClicked');
    end;
     
    procedure TForm1.TreeViewExpanding(Sender: TObject; Node: TTreeNode;
      var AllowExpansion: Boolean);
    begin
      AllowExpansion := CanExpand;
    end;
     
    procedure TForm1.TreeViewCollapsing(Sender: TObject; Node: TTreeNode;
      var AllowCollapse: Boolean);
    begin
      AllowCollapse := CanExpand;
    end;
     
    end.

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,
    Je n'ai pas trouvé d'autres solutions que d'hériter TCustomTreeview et d'intercepter la notification de l'expand pour la bloquer dans le cas d'un double-clic.
    Ca m'a intéressé de le faire pour voir, je te donne le fruit de ma recherche :
    (Attention, par défaut le treeview fonctionne normalement, il faut positionner la propriété DblClicEnabled = False pour que ça réagisse comme tu le veux. J'en ai fait une propriété publiée donc tu pourras la changer directement dans l'inspecteur d'objet ...)
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    unit MyTreeView;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Controls, ComCtrls, CommCtrl;
     
    type
      TMyTreeView = class(TcustomtreeView)
      private
        fCanExpand : Boolean;
        fDblClicEnabled: Boolean;
        procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
        procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK;
      public
        constructor Create(AOwner: TComponent); override;
      published
        property Align;
        property Anchors;
        property AutoExpand;
        property BevelEdges;
        property BevelInner;
        property BevelOuter;
        property BevelKind default bkNone;
        property BevelWidth;
        property BiDiMode;
        property BorderStyle;
        property BorderWidth;
        property ChangeDelay;
        property Color;
        property Ctl3D;
        property Constraints;
        // Permet de bloquer le double clic pour ouvrir/fermer arbre :
        property DblClicEnabled : Boolean read fDblClicEnabled write fDblClicEnabled;
        property DragKind;
        property DragCursor;
        property DragMode;
        property Enabled;
        property Font;
        property HideSelection;
        property HotTrack;
        property Images;
        property Indent;
        property MultiSelect;
        property MultiSelectStyle;
        property ParentBiDiMode;
        property ParentColor default False;
        property ParentCtl3D;
        property ParentFont;
        property ParentShowHint;
        property PopupMenu;
        property ReadOnly;
        property RightClickSelect;
        property RowSelect;
        property ShowButtons;
        property ShowHint;
        property ShowLines;
        property ShowRoot;
        property SortType;
        property StateImages;
        property TabOrder;
        property TabStop default True;
        property ToolTips;
        property Visible;
        property OnAddition;
        property OnAdvancedCustomDraw;
        property OnAdvancedCustomDrawItem;
        property OnChange;
        property OnChanging;
        property OnClick;
        property OnCollapsed;
        property OnCollapsing;
        property OnCompare;
        property OnContextPopup;
        property OnCreateNodeClass;
        property OnCustomDraw;
        property OnCustomDrawItem;
        property OnDblClick;
        property OnDeletion;
        property OnDragDrop;
        property OnDragOver;
        property OnEdited;
        property OnEditing;
        property OnEndDock;
        property OnEndDrag;
        property OnEnter;
        property OnExit;
        property OnExpanding;
        property OnExpanded;
        property OnGetImageIndex;
        property OnGetSelectedIndex;
        property OnKeyDown;
        property OnKeyPress;
        property OnKeyUp;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
        property OnStartDock;
        property OnStartDrag;
        { Items must be published after OnGetImageIndex and OnGetSelectedIndex }
        property Items;
     
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('eb', [TMyTreeView]);
    end;
     
    { TMyTreeView }
     
    constructor TMyTreeView.Create(AOwner: TComponent);
    begin
      inherited;
      fCanExpand := True;
      fDblClicEnabled := True;
    end;
     
    procedure TMyTreeView.CNNotify(var Message: TWMNotify);
    begin
      case Message.NMHdr^.code of
         TVN_ITEMEXPANDING:
         begin
           if not(fCanExpand) then
           begin
             Message.Result := 1;  // Blocage du Collapse/Expand
             fCanExpand := True;
           end;
         end;
      end;
      inherited;
    end;
     
    procedure TMyTreeView.WMLButtonDblClk(var Message: TWMLButtonDblClk);
    begin
      if not(fDblClicEnabled) then
        fCanExpand := False;
      inherited;
    end;
     
    end.
    Voilà, j'espère que ça répond à ce que tu veux faire.
    Bon courage
    Eb.

  7. #7
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour ebastien,

    Fiouf... Tout ca pour ça ???

    Tu as l'air d'avoir bien cerné le problème,
    L'ennui, c'est que je ne sait pas comment me servir de ta solution...

    - Je crée une nouvelle fiche: Ok.
    - J'écrase le contenu avec ton code: Ok.
    - ...

    Ca ne me donne pas un composant, ca.

    Peux tu décrire les étapes STP.

  8. #8
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    Bien pensé, bien réalisé, efficace !

    ebastien

  9. #9
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Ok, j'ai compris:

    Composant->Nouveau->hériter...

    Seulement, j'ai fait une bourde.

    J'ai dabord essayé en faisant juste "OK", puis j'ai tout fermé.

    J'ai recommencé en faisant "Installer", et il me dit:
    [Erreur] myTreeView.pas(9): Identificateur redéclaré : 'myTreeView'.

    Je ne suis pas à l'aise avec ca, pouvez vous m'aider ?

    PS: Merci Medgir, mais ca m'ennuie de tout déployer au lancement.

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Effectivement, c'est un composant. Il faut donc l'installer.
    Je suis en D6 mais je pense qu'en D7 c'est pareil :
    - Tu enregistres le code dans un .pas
    - Menu Composant / Installer un composant
    - Onglet Dans un nouveau paquet

    Nom unité = le .pas
    Nom du Paquet = Ce_que_tu_veux.dpk

    Et tu dois avoir le composant dans ta palette (la procedure Register définissant l'onglet 'eb' de la palette mais tu peux l'appeler comme tu veux je ne serai pas offensé )

    ps : Merci Yurck, je suis flatté !

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

Discussions similaires

  1. Comment annuler les effets d'une macro sur les feuilles?
    Par jolzeviking dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/06/2008, 14h29
  2. Annuler un effet SmartArt
    Par filiph79 dans le forum Powerpoint
    Réponses: 1
    Dernier message: 14/01/2008, 13h46
  3. Suppression double-clic sur TreeView
    Par tolliv dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/12/2006, 08h27
  4. annuler l'effet de la css
    Par nebil dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 24/07/2006, 10h23
  5. Réponses: 8
    Dernier message: 24/04/2006, 13h00

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