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 :

Ajout OnMouseEnter et OnMouseLeave au TShellTreeView


Sujet :

Composants VCL Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 401
    Points : 300
    Points
    300
    Par défaut Ajout OnMouseEnter et OnMouseLeave au TShellTreeView
    Bonjour,

    J'ai besoin d'ajouter les événements OnMouseEnter et OnMouseLeave au TShellTreeView.
    J'ai réussi à pouvoir les ajouter en ligne de code (pas dans l'inspecteur d'objet) sur une machine et sur une autre je n'y arrive pas j'obtiens une erreur qui me dit que je n'ai pas le droit d'accéder à ces événements qui sont dans la partie protected de TComponent.
    La modification des sources fournis lors de l'installation ne me convenant pas (c'est ce que j'ai fait) je cherche de l'aide pour me créer un descendant de TShellTreeView qui implémente ces deux évenements dans une petite unité bien propre.

    C'est sous D2010.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tu pourrais nous fournir une ébauche de ton composant hérité ?
    Je suppose que tu utilises un Hack de propriété protégée

    OnMouseEnter et OnMouseLeave sont déjà présentes dès le TControl
    Cela me rappelle une discussion récente : Composant dont événement n'est pas publié

    Tu as vérifié si la version du TShellTreeView sont bien les mêmes sur les 2 Postes ? Idem pour la version de Delphi !
    OnMouseEnter\OnMouseLeave était géré manuellement par chaque contrôle, au fur et à mesure des versions, ils ont généralisé la gestion dans l'ancêtre !
    Cela vient du gestion récente du WM_MOUSELEAVE
    Si tu as D7, tu vas devoir gérer TrackMouseEvent à la main
    Si tu as D2006, c'est en standard avec le TControl

    Il faut juste que le contrôle hérité publie l'évènement, si ça ne l'est pas, c'est qu'il n'est pas géré (ou provoque des effets de bord, fréquent lors d'imbrication de control interne)
    Cela nécessite un abonnement par TrackMouseEvent.
    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 averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 401
    Points : 300
    Points
    300
    Par défaut
    Tu as vérifié si la version du TShellTreeView sont bien les mêmes sur les 2 Postes ? Idem pour la version de Delphi !
    Ce sont bien les mêmes versions du TShellTreeView et Delphi 2010 sur les 2 machines.
    Je voudrais partir TShellTreeView qui est déclaré dans l'unité ShellCtrls.pas (celle en PJ)
    J'ai essayé de rajouter à :
    TShellTreeView = class(TCustomShellTreeView)
    published
    property AutoContextMenus;
    property ObjectTypes;
    property Root;
    property ShellComboBox;
    property ShellListView;
    property UseShellImages;
    property OnAddFolder;
    property Align;
    property Anchors;
    property AutoRefresh;
    property BorderStyle;
    property ChangeDelay;
    property Color;
    property Ctl3D;
    property Cursor;
    property DragCursor;
    property DragMode;
    property Enabled;
    property Font;
    property HideSelection;
    property Images;
    property Indent;
    property ParentColor;
    property ParentCtl3D;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property RightClickSelect;
    property ShowButtons;
    property ShowHint;
    property ShowLines;
    property ShowRoot;
    property StateImages;
    property TabOrder;
    property TabStop default True;
    property Visible;
    property OnClick;
    property OnEnter;
    property OnExit;
    property OnDragDrop;
    property OnDragOver;
    property OnStartDrag;
    property OnEndDrag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnDblClick;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnChanging;
    property OnChange;
    property OnExpanding;
    property OnCollapsing;
    property OnCollapsed;
    property OnExpanded;
    property OnEditing;
    property OnEdited;
    property OnGetImageIndex;
    property OnGetSelectedIndex;
    end;
    les lignes Property OnMouseEnter et property OnMouseLeave à la fin avant le 'end;', en partant du principe que le composant ancêtre, qui si je l'ai bien pisté est un TWincontrol, a déjà ces propriétés, pour les re-rendre accessibles.

    Mais cela ne marche pas.

    Par contre je n'ai pas encore essayé de faire ça :
    unit MonShellTreeView;

    interface

    uses
    SysUtils, Classes, Controls, ComCtrls, ShellCtrls;

    type
    TShellTreeView1 = class(TShellTreeView)
    private
    { Déclarations privées }
    protected
    { Déclarations protégées }
    public
    { Déclarations publiques }
    published
    { Déclarations publiées }
    property OnMouseEnter;
    property OnMouseLeave;
    end;

    procedure Register;

    implementation

    procedure Register;
    begin
    RegisterComponents('Exemples', [TShellTreeView1]);
    end;

    end.
    C'est ce que je pensais faire au début , mais la paresse...

    Dis moi si tu penses que c'est la bonne solution.

    Merci. Je vais aussi voir les liens que tu m'as donné je n'avais pas cherché comme cela.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par Bernard B Voir le message
    Mais cela ne marche pas..
    Ce n'est pas très précis !
    Erreur de Compil ? juste aucun effet en RunTime ?

    Comme je le disais tout dépend du TShellTreeView, est-ce qu'il peut supporter le TrackMouseEvent !
    Je ne connais pas ce composant, est-ce une encapsulation du SysTreeView32 de l'explorateur ou alors un composant autonome qui reproduit le comportement ?
    le TShellTreeView c'est un composant Examples, j'ai ça qui traine dans C++Builder 6
    C'est en standard semble-t-il maintenant dans XE2, perso, je ne l'ai pas dans la palette, il doit falloir l'installer manuellement je suppose et c'est toujours pas documenté ! je pense qu'il y a un limitation technique pour les Enter\Leave
    Perso, un composant non documenté, hum, j'aime pas trop ! Embarcadero peut décider de le retirer du jour au lendemain si ça les gêne, c'est pas un vrai composant VCL
    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

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 401
    Points : 300
    Points
    300
    Par défaut
    Ce n'est pas très précis !
    Erreur de Compil ? juste aucun effet en RunTime ?
    Sur une machine, j'ai réussi à le rendre fonctionnel en branchant ces événements en ligne de code car ils n'apparaissent pas dans l'instecteur d'objets, et sur l'autre machine il ne passe pas à la compilation. C'est certainement un pb d'accès au fichier car il se retrouve à plusieurs endroit : dans Program Files (x86) mais aussi dans users\xx\public avec des droits d'accès...

    le TShellTreeView c'est un composant Examples, j'ai ça qui traine dans C++Builder 6
    C'est en standard semble-t-il maintenant dans XE2, perso, je ne l'ai pas dans la palette, il doit falloir l'installer manuellement
    Absolument, en D5 il était installé automatiquement, en D7 je crois que déjà il fallait se l'installer. En D2010 c'est encore ça. Il faut de mémoire installer le paquet vclshlctrls.dpk

    Perso, un composant non documenté, hum, j'aime pas trop ! Embarcadero peut décider de le retirer du jour au lendemain si ça les gêne, c'est pas un vrai composant VCL
    C'est sur mais il fonctionne bien et il ne faut que lui faire apparaître ces deux événements qui lui manquent.

    TShellTreeView = class(TCustomShellTreeView)
    si on remonte encore :
    TCustomShellTreeView = class(TCustomTreeView, IShellCommandVerb)
    et encore :
    TCustomTreeView = class(TWinControl)
    donc il me semble que cela devrait faire l'affaire !! je ne suis pas un expert en héritage.

    Par contre si tu connais son équivalent ou mieux, je suis preneur !

    Merci

Discussions similaires

  1. OnMouseEnter et OnMouseLeave
    Par Yyukk dans le forum Composants VCL
    Réponses: 3
    Dernier message: 04/03/2009, 13h36
  2. evenements OnMouseLeave() OnMouseEnter()
    Par raimo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/05/2008, 19h29
  3. OnMouseEnter / OnMouseLeave avec un PANEL
    Par kerotan dans le forum Composants VCL
    Réponses: 4
    Dernier message: 23/12/2007, 11h46
  4. OnMouseEnter et OnMouseLeave sur des items d'une collection
    Par petitprince dans le forum Composants VCL
    Réponses: 3
    Dernier message: 17/09/2007, 20h57
  5. OnMouseEnter et OnMouseLeave
    Par jhdscript dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/11/2006, 21h09

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