Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1226 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  c# events sur barre de titre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

c# events sur barre de titre

n°1378146
xela2000
Posté le 31-05-2006 à 14:33:33  profilanswer
 

Salut,
 
Je cherches désesperement la possibilité de récuperer des événements souris sur la barre de titre d'une MainForm. (la barre bleu en haut de chaque fenêtre windows).
 
Est-ce possible ?
 
Mon problème est que je peux exécuter une action quand je commence à déplacer une fenêtre
et une autre quand j'arrête de la déplacer (quand j'ai relaché le bouton de la souris).
 
Il y a bien les évenements Move et LocationChanged, mais j'en reçois beaucoup trop...
 
Merci d'avance
 
Alex

mood
Publicité
Posté le 31-05-2006 à 14:33:33  profilanswer
 

n°1379145
_Mose_
Lonesome coder
Posté le 01-06-2006 à 17:16:53  profilanswer
 

Le plus simple c'est LocationChanged.
 
Tu créé un timer qui décrémente de 10 à 1 tous les 50ms, et quand il arrive à zéro, tu considère que la fenêtre a cessé de bouger.
Quand LocationChanged se produit :
- si le timer est nul, tu le créé et tu mets le compteur à 10
- si le timer n'est pas nul, tu mets seulement le compteur à 10
- quand le timer arrive à zéro, penser à le détruire correctement

Code :
  1. // le timer
  2. Timer _timer = null;
  3. // le compteur
  4. int _counter = -1;
  5. protected override void OnLocationChanged(EventArgs e)
  6. {
  7. base.OnLocationChanged (e);
  8. // si le timer n'est pas encore créé
  9. if(this._timer == null)
  10. {
  11.  // créer le timer sur 50 ms
  12.  this._timer = new Timer();
  13.  this._timer.Interval = 50;
  14.  this._timer.Tick += new EventHandler(_timer_Tick);
  15.  this._timer.Start();
  16. }
  17. // met le compteur à 10
  18. this._counter = 10;
  19. }
  20. private void _timer_Tick(object sender, EventArgs e)
  21. {
  22. // decrémente l compteur
  23. this._counter--;
  24. // si le déplacement est arrivé à expiration
  25. if(this._counter <= 0)
  26. {
  27.  // on détruit proprement le timer
  28.  this._timer.Stop();
  29.  this._timer.Dispose();
  30.  this._timer = null;
  31.  // et on fait l'appel qui convient
  32.  this.OnWindowStoppedMoving();
  33. }
  34. }

Si ca ne te convient pas (y'a pas la détection du MouseUp), y'a aussi une solution en jouant avec la WndProc, mais elle ne marchera pas correctement avec les thèmes de Windows XP.
 
Normallement, on n'est pas sensés toucher aux barres qui entourent les fenêtres, c'est sont géré par le systeme d'exploitation. Si c'est une demande d'un client, tu peux lui refuser, ou bien refuser tout support là dessus.

n°1379190
xela2000
Posté le 01-06-2006 à 18:03:32  profilanswer
 

Merci pour ta réponse.
 
C'est ce que j'ai finit par faire. Je pensais que ce n'était pas très propre, mais si tu me proposes la même chose, c'est qu'il ne devait pas y avoir d'autres solutions.
 
En tout cas, ca marche, très bien.
 
Alexandre


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  c# events sur barre de titre

 

Sujets relatifs
Liste Deroulante dans le genre barre d'adresse du navigateurecrire un long titre dans une page excel en php
[Nvu] Déplacer barre de recherche googlechanger titre avec pages dynamiques?
Supprimer barre de défilement en HTMLUne barre de chargement sous flash 8
Transformer un titre d’annonce en lien.décodage de code barre (avec une douchette sur port ps/2)
ajouter un texte saisi dans la barre d'adressePHPBB texte barré ?
Plus de sujets relatifs à : c# events sur barre de titre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR