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

API, COM et SDKs Delphi Discussion :

Erreur lors du verrouillage de la session


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut Erreur lors du verrouillage de la session
    Bonjour,
    Voila mon problème.

    Lorsque mon logiciel est en exécution et que l'on verrouille la session, j'ai une erreur système 5 (Accès refusé).

    La cause est celle-ci :
    Le logiciel possède un barre d'outil rétractable automatiquement sur le bord gauche de l'écran. Réglé sur un Timer, je fais des tests sur la position de la souris et de la position de la barre afin de montrer/cacher ou rien faire sur la barre d'outils.

    Donc lorsque la session est verrouillée, le logiciel teste encore !

    Ma question est : Comment savoir si la session est verrouillée ou pas.

    Merci

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Regarde peut-être du côté des notifications...
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/termserv/termserv/wtsregistersessionnotification.asp

    Eventuellement, ceci : http://msdn.microsoft.com/msdnmag/issues/05/06/SecurityBriefs/default.aspx

    Mais il serait mieux de savoir pourquoi ton programme plante sur le verrouillage de session : es-tu certain d'avoir testé/utilisé correctement tous les appels API ? Le problème ne se situerai pas quelques lignes plus haut que celle provoquant l'exception ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par Mac LAK
    Regarde peut-être du côté des notifications...
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/termserv/termserv/wtsregistersessionnotification.asp

    Eventuellement, ceci : http://msdn.microsoft.com/msdnmag/issues/05/06/SecurityBriefs/default.aspx

    Mais il serait mieux de savoir pourquoi ton programme plante sur le verrouillage de session : es-tu certain d'avoir testé/utilisé correctement tous les appels API ? Le problème ne se situerai pas quelques lignes plus haut que celle provoquant l'exception ?
    Merci,
    Le problème vient du fait que le OnTimer fonctionne toujours ! Et vu qu'il fait des tests sur des fiches (afin de savoir si l'application est bien active, etc...). Donc, je suppose que Windows bloque tous ces appels lorsque la station est verrouillée.

    Je vais regarder du coté des notifications.


    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If (Application.Active)OR(Left = 0) then begin
         If (Mouse.CursorPos.X = 0)And(Left = 0-Width)then begin
         Left := 0;
         end else
            If (Mouse.CursorPos.X > Width)OR( ((Mouse.CursorPos.Y > Top+Height)OR(Mouse.CursorPos.Y < Top))AND(Mouse.CursorPos.X <> 0) ) 
            then begin
            Left := 0-Width;
            end;
    end;
    Merci

  4. #4
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Moi je dirait plutot que tu as mal "étudier tes besoins", ne serais ce pas plus simple d'utiliser un évenement onMouseEnter et onMouseLeave sur ton panneau plutot qu'un timer?
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par lil_jam63
    Moi je dirait plutot que tu as mal "étudier tes besoins", ne serais ce pas plus simple d'utiliser un évenement onMouseEnter et onMouseLeave sur ton panneau plutot qu'un timer?
    Oui, ce serait en effet plus simple mais plus contraignant :
    - Vu que le panneau est rétractable sur le bord gauche --> Non visible --> Impossible de faire OnMouseEnter.
    - Obligation de pointer dessus au OnMouseEnter contraire avec un Timer ou je l'affiche si Mouse.x = 0 (Peut importe Mouse.Y)
    - Si j'utilisais le OnMouseLeave, se serait pénible aux utilisateurs qui ne manipulent pas très bien la souris --> Le panneau se rétracterait --> tandis qu'avec un Timer, je laisse 1 à 2 secondes de battement

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par portu
    - Vu que le panneau est rétractable sur le bord gauche --> Non visible --> Impossible de faire OnMouseEnter.
    Laisse dépasser ton panneau d'un pixel, c'est le coup classique utilisé. Ca résoud ce problème.

    Citation Envoyé par portu
    - Obligation de pointer dessus au OnMouseEnter contraire avec un Timer ou je l'affiche si Mouse.x = 0 (Peut importe Mouse.Y)
    Et en quoi est-ce un problème avec UN pixel qui déborde ? C'est bien le panneau qui va réagir, et pas un composant => comportement similaire.

    Citation Envoyé par portu
    - Si j'utilisais le OnMouseLeave, se serait pénible aux utilisateurs qui ne manipulent pas très bien la souris --> Le panneau se rétracterait --> tandis qu'avec un Timer, je laisse 1 à 2 secondes de battement
    Mais tu peux déclencher un timer dans le OnMouseLeave (quoi que, à ta place, j'utiliserais plutôt un thread qu'un timer), et laisser tes 1 à 2 secondes de battement... ;-)
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par Mac LAK
    Citation Envoyé par portu
    - Vu que le panneau est rétractable sur le bord gauche --> Non visible --> Impossible de faire OnMouseEnter.
    Laisse dépasser ton panneau d'un pixel, c'est le coup classique utilisé. Ca résoud ce problème.

    Citation Envoyé par portu
    - Obligation de pointer dessus au OnMouseEnter contraire avec un Timer ou je l'affiche si Mouse.x = 0 (Peut importe Mouse.Y)
    Et en quoi est-ce un problème avec UN pixel qui déborde ? C'est bien le panneau qui va réagir, et pas un composant => comportement similaire.

    Citation Envoyé par portu
    - Si j'utilisais le OnMouseLeave, se serait pénible aux utilisateurs qui ne manipulent pas très bien la souris --> Le panneau se rétracterait --> tandis qu'avec un Timer, je laisse 1 à 2 secondes de battement
    Mais tu peux déclencher un timer dans le OnMouseLeave (quoi que, à ta place, j'utiliserais plutôt un thread qu'un timer), et laisser tes 1 à 2 secondes de battement... ;-)
    Tj là pour me contredire
    Je vais tâcher de réadapter cette barre d'outils et je pense qu'en effet ,que le problème sera solutionné.

    Quelles qrandes différences entre un Thread et un Timer ?

    OnMouseLeave et OnMouseEnter n'existe pas dans mes compos : Lequels puis-je utiliser ?

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par portu
    Tj là pour me contredire
    A ton service ! ;-)

    Citation Envoyé par portu
    Quelles qrandes différences entre un Thread et un Timer ?
    Un timer nécessite une boucle de messages pour fonctionner, et n'est donc pas très très précis. Un thread n'a nul besoin de messages, et peut être très précis dans de nombreux cas.
    De plus, le nombre de timers de l'OS est limité (je ne me rappelle plus la limite, toutefois, elle a peut-être été levée avec les noyaux NT), alors qu'il n'y a virtuellement AUCUNE limite au nombre de threads d'un processus.
    Enfin, un thread peut profiter d'un environnement multiprocesseur (y compris hyperthreading) et être schedulé indépendamment de son thread créateur, alors qu'un timer est asservi à une boucle de messages (si elle est bloquée, plus de timer !).

    Citation Envoyé par portu
    OnMouseLeave et OnMouseEnter n'existe pas dans mes compos : Lequels puis-je utiliser ?
    Oups, là, c'est la colle...
    Honnêtement, je ne sais pas : quel est ton composant de base ? Sinon, intercepte tous les messages Windows, je ne vois que ça "à froid".
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    J'ai une Form avec des boutons

  10. #10
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Si les évenement onMouseLeave et onMouseEnter n'existe pas sur ton composant, tu peux les rajouter manuellement:
    En supposant que tu dérives d'un TPanel par exemple
    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure testEnter(sender: TObject);
        procedure testLeave(sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
      TPanelPerso = class(TPanel)
      private
        { Déclarations privées }
        FOnMouseLeave: TNotifyEvent;
        FOnMouseEnter: TNotifyEvent;
        procedure CMMouseEnter(var msg: TMessage); message CM_MOUSEENTER;
        procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
     
      public
        { Déclarations publiques }
      published
        { Déclarations protégées }
        property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
        property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
      end;
     
    var
      Form1: TForm1;
      panel1: TPanelPerso;
     
    implementation
     
    {$R *.dfm}
     
    procedure TPanelPerso.CMMouseEnter(var msg: TMessage);
    begin
      if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
    end;
     
    procedure TPanelPerso.CMMouseLeave(var msg: TMessage);
    begin
      if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
    end;
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      panel1 := TPanelPerso.Create(Self);
      panel1.Parent := self;
      panel1.Align := alLeft;
      panel1.OnMouseEnter := testEnter;
      panel1.OnMouseLeave := testLeave;
    end;
     
    procedure TForm1.testEnter(sender: TObject);
    begin
      panel1.Width := 120;
    end;
     
    procedure TForm1.testLeave(sender: TObject);
    begin
     panel1.Width := 1;
    end;
     
    end.
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Merci, ce n'est pas des plus pratique mais bon, j'ai pas trop le choix .
    Merci à vous tous et a+

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    heu, j'avoue que c'est de ma faute mais là, on m'a juste donné une optimisation (Et non une solution à mon problème).

    J'ai en effet le même problème
    Donc, voila ce que j'ai fait :
    Je crée mon TPanelPerso avec les évenements OnMouseEnter Et OnMouseLeave. Jusque là, ca marche nikel.
    Dans ce panel ce trouve des JvImgButton --> qui représentent les différents Outils.
    Donc lorsque le OnMouseEnter de mon Panel s'enclenche , j'affiche la barre d'outils et en m^me temps, j'enclenche le timer pour déterminer si le curseur de la souris est hors zone de la barre.

    La solution de Mac Lak concernant l'exécution du timer/thread lors du OnMouseLeave n'est pas adéquate à mon cas vu qu'il y a d'autres controls dans le panel (OnMouseEnter et OnMouseLeave peuvent s'enclencher plusieurs fois en étant toujours dans la barre d'outils );

    Vais voir du coté de la notification.

  13. #13
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Citation Envoyé par portu
    Donc lorsque le OnMouseEnter de mon Panel s'enclenche , j'affiche la barre d'outils et en m^me temps, j'enclenche le timer pour déterminer si le curseur de la souris est hors zone de la barre.
    Pourquoi utilises-tu encore le TTImer, l'évenement onMouseLeave est là exprès, tu n'en a pas besoin, si tu veux un décalage lors de la fermeture, tu peux utiliser soit un sleep, soit une fonction équivalente mais qui ne bloque pas le processus que tu apels lorsque le curseur quitte le panel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.testLeave(sender: TObject); 
    begin 
      sleep(1000); // pour une fermeture 1s après la sortie de la zone de ton panel
      panel1.Width := 1; 
    end;
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par lil_jam63
    Citation Envoyé par portu
    Donc lorsque le OnMouseEnter de mon Panel s'enclenche , j'affiche la barre d'outils et en m^me temps, j'enclenche le timer pour déterminer si le curseur de la souris est hors zone de la barre.
    Pourquoi utilises-tu encore le TTImer, l'évenement onMouseLeave est là exprès, tu n'en a pas besoin, si tu veux un décalage lors de la fermeture, tu peux utiliser soit un sleep, soit une fonction équivalente mais qui ne bloque pas le processus que tu apels lorsque le curseur quitte le panel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.testLeave(sender: TObject); 
    begin 
      sleep(1000); // pour une fermeture 1s après la sortie de la zone de ton panel
      panel1.Width := 1; 
    end;
    Oui mais j'ai dit aussi que l'évenement OnMouseLeave du panel se déclenchait sans pour autant sortir de la zone (TRect du panel). Le panel à des controls enfants et lorsque je passe sur ses controls --> Déclenchement de OnMouseLeave --> et pourtant, la souris est toujours dans la zone TRect du Panel.
    C'est la seule raison pour l'utilisation du Timer.
    Le choix du Timer/Thread n'a pas trop d'importance pour le moment --> Si le problème persiste avec un Timer , il sera tj là avec Thread.

    Mon explication est elle plus clair ( je m'embrouille moi même donc...)

  15. #15
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Bon, je reprends :
    - Délai à "l'ouverture" de la barre : dans le OnMouseEnter, déclenchement d'un thread (type Win32 "one-shot"), contenant un simple Sleep + un test de position. Si la souris est toujours sur la ligne d'activation, ouverture du panel. Sinon, rien du tout.
    - Délai à la fermeture : dans le OnMouseLeave, déclenchement d'un thread (toujours type Win32 one-shot), avec un sleep aussi. Idem, un test de position de souris à la fin du Sleep, si la souris est "revenue" dans le panel, on continue, sinon on ferme le panneau.

    Dans chaque gestionnaire d'évènement, un test de booléen (sous forme de propriété) pour éviter la réentrance : par défaut, le booléen vaut "False". Si le gestionnaire se déclenche, il vérifie le booléen : à True, on se barre direct. Sinon, on positionne le booléen à True, on lance le thread en lui passant l'instance de la fiche/panel en paramètre. Le thread remettra le booléen à False s'il modifie réellement la visibilité de la fiche.

    Tu peux également te servir de l'évènement OnMouseEnter pour "désarmer" le thread lancé par OnMouseLeave, et réciproquement : ça remplace le test de position de la souris par un simple test d'un compteur de référence, mais le booléen anti-réentrance reste nécessaire. Utilise les fonctions "InterlockedIncrement" et "InterlockedDecrement" pour modifier ton compteur de référence.

    Est-ce plus clair ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  16. #16
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Voilà ce que je t'ai dis plus haut, passé en composant, tu l'installes et tu le poses sur ta fiche, tu dispose tes composants dessus et tu lances le tout, si tu passes ta souris sur les controles disposés à l'intérieur, le panel reste encore "ouvert" et si tu sors du panel, il "se referme".
    J'ai testé avec tous les controles visuels de la palette standard.
    Par contre ce n'est qu'un début, à toi de l'arranger et l'améliorer en fonction de tes besoins (retards à l'ouverture/fermetures, etc...).
    Et comme ça finis le problème d'erreur et de timer et tout tes composants ont le panel en parent.
    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
    unit PanelPerso;
     
    interface
     
    uses
      SysUtils, Classes, Controls, ExtCtrls, Messages;
     
    type
      TPanelPerso = class(TPanel)
      private
        { Déclarations privées }
        FOnMouseLeave: TNotifyEvent; 
        FOnMouseEnter: TNotifyEvent;
        FWidth : integer;
        procedure CMMouseEnter(var msg: TMessage); message CM_MOUSEENTER;
        procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
        constructor Create(AOwner: TComponent); override;
      published
        { Déclarations publiées }
        property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
        property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('Persos', [TPanelPerso]);
    end;
     
    constructor TPanelPerso.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      align := alLeft;
      FWidth := width;
      width := 1;
    end;
     
    procedure TPanelPerso.CMMouseEnter(var msg: TMessage);
    begin
      width := FWidth;
      if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
    end;
     
    procedure TPanelPerso.CMMouseLeave(var msg: TMessage); 
    begin
      width := 1;
      if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); 
    end;
     
    end.
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  17. #17
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Ok , j'vais tenter cela.

    Merci

  18. #18
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Le qui je suis ! Je suis désolé. J'avais même pas essayé pensant que lorsque l'on passait avec la souris sur un control enfant, l'evenement OnMouseLeave du parent se déclencherait .

    Mais après test, ca marche d'enfer et meme pas besoin d'un timer
    Merci à vous tous pour votre patience et votre aide précieuse

    A+

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

Discussions similaires

  1. [phpMyAdmin] Erreur lors du démarrage de la session
    Par iso9mix dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 15
    Dernier message: 22/02/2011, 19h36
  2. [phpMyAdmin] Erreur lors du démarrage de la session
    Par naroco dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 25/11/2010, 11h34
  3. [phpMyAdmin] Erreur lors du démarrage de la session
    Par LaurentSql dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 20/02/2010, 01h25
  4. [phpMyAdmin] Erreur lors du démarrage de la session
    Par scrouet dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 03/02/2010, 10h29
  5. [Cookies] Erreur lors de la création de Session ..
    Par Klimium dans le forum Langage
    Réponses: 6
    Dernier message: 07/10/2006, 15h40

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