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 :

Déplacement d'un TPanel


Sujet :

Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut Déplacement d'un TPanel
    Bonjour, je souhaite déplacer effectuer un déplacement de mon panel sur mon ihm. Pour cela j'utilise un timer et sur lévènement du passage de la souris sur ce panel j'active le timer qui effectue le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      if (top_temp >= 537) and enter_panel_legend then
        top_temp := top_temp - 2
      else if (top_temp < 590) and not enter_panel_legend then
        top_temp := top_temp + 2
      else Timer1.Enabled := False;
     
     
     
      with Panel_legende do
        top := top_temp;
    Cela fonctionne, mais j'ai 2 questions.

    Tout d'abord est-ce correct?

    Ensuite, je rencontre un soucis lorsque j'affecte une frame (TFrame) à ce panel, puisque l'évènement du passage de la souris sur le panel ne s'active plus.

    Avez vous une solution pour ce problème?

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Par défaut
    Pour l'incorectitude, je ne trouve rien à redire.

    Pour ton frame, à priori, le plus propre serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonFrame.OnMouseMove := MonPanel.OnMouseMove
    Sinon, MonForm.ControlAtPos derait te renvoyer le panel (à supposer que le panel soit un enfant direct de MonForm) si tu lui donne les coordonnée de la sourie (Mouse.CursorPos.x:y). J'ai pas testé, tu me racontera.

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Tu peux faire beaucoup plus simple en définissant ainsi l'événement onMouseMove de ton TPanel, pas besoin de timer. Cela fonctionne également quand le composant se situe dans une frame

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      ReleaseCapture;
      Panel1.Perform(WM_SYSCOMMAND,$f012,0);
    end;
    Cela fonctionne peu importe le composant.

    Si tu veux ensuite le redimentionner utilise les codes suivants:

    ResizeLeft = $F001;
    ResizeRight = $F002;
    ResizeTop = $F003;
    ResizeTopLeft = $F004;
    ResizeTopRight = $F005;
    ResizeBottom = $F006;
    ResizeBottomLeft = $F007;
    ResizeBottomRight = $F008;
    MoveComponent = $F012;

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Merci pour votre aide,

    J'testé le code que vous m'avez proposé, mais je ne souhaite pas déplacer à l'aide de la souris le panel, je souhaite simplement faire "monter" le panel lorsque je passe la souris dessus, un petit peu comme ce que l'on peut trouver sur certains sites internet.

    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
    procedure TFrmMesure.Panel_legendeMouseEnter(Sender: TObject);
    begin
      enter_panel_legend := True;
      top_temp := Panel_legende.top;
      Timer1.Enabled := True;
    end;
     
    procedure TFrmMesure.Panel_legendeMouseLeave(Sender: TObject);
    begin
      enter_panel_legend := False;
      Timer1.Enabled := True;
    end;
     
    procedure TFrmMesure.Timer1Timer(Sender: TObject);
    begin
     
      if (top_temp >= 537) and enter_panel_legend then
        top_temp := top_temp - 2
      else if (top_temp < 590) and not enter_panel_legend then
        top_temp := top_temp + 2
      else Timer1.Enabled := False;
     
     
     
      with Panel_legende do
        top := top_temp;
     
     
     
    end;
    Voila le code entier.

    Le soucis que j'ai donc, c'est que l'évènement "OnMouseEnter" ne se déclenche pas si j'applique une frame sur le Panel_legende. Y a t'il un moyen de récupérer cet évènement ?

Discussions similaires

  1. [DLL] Afficher le contenu d'une dll dans un Tpanel
    Par Fabs dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2007, 14h30
  2. TPanel et Docking
    Par kwuy dans le forum Composants VCL
    Réponses: 3
    Dernier message: 15/09/2003, 15h16
  3. Déplacement "automatique" du curseur
    Par Amenofis dans le forum Composants VCL
    Réponses: 2
    Dernier message: 08/01/2003, 18h57
  4. Limiter le déplacement de la souris
    Par el_bouleto dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/11/2002, 23h56
  5. [c++ builder] creation de surface sur TPanel
    Par JEG dans le forum DirectX
    Réponses: 7
    Dernier message: 23/09/2002, 22h41

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