begin process at 2010 02 10 06:06:43
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > COMPOSANT QUI COLLE UNE FENÊTRE AUX BORDS DE L'ÉCRAN

COMPOSANT QUI COLLE UNE FENÊTRE AUX BORDS DE L'ÉCRAN




 Description

Ce petit composant tout bête permet de faire en sorte que la fenêtre se colle aux bords de l'écran si on la déplace trop près de ceux-ci.

Source

  • using System;
  • using System.ComponentModel;
  • using System.Collections.Generic;
  • using System.Diagnostics;
  • using System.Text;
  • using System.Windows.Forms;
  • using System.ComponentModel.Design;
  • using System.Drawing;
  • namespace EdgeGlue {
  • /// <summary>
  • /// Composant permettant le collage automatique d'une fenêtre sur les bords de l'écran.
  • /// </summary>
  • public partial class Patafix : Component {
  • private int _minLeft = 10;
  • private int _minRight = 10;
  • private int _minTop = 10;
  • private int _minBottom = 10;
  • private Form _ParentForm; // Page sur laquelle a été déposée le contrôle
  • /// <summary>
  • /// Permet de spécifier la marge minimum pour la gauche
  • /// </summary>
  • public int MinLeft {
  • set { _minLeft = value; }
  • get { return _minLeft; }
  • }
  • /// <summary>
  • /// Permet de spécifier la marge minimum pour la droite
  • /// </summary>
  • public int MinRight {
  • set { _minRight = value; }
  • get { return _minRight; }
  • }
  • /// <summary>
  • /// Permet de spécifier la marge minimum pour le haut
  • /// </summary>
  • public int MinTop {
  • set { _minTop = value; }
  • get { return _minTop; }
  • }
  • /// <summary>
  • /// Permet de spécifier la marge minimum pour le bas
  • /// </summary>
  • public int MinBottom {
  • set { _minBottom = value; }
  • get { return _minBottom; }
  • }
  • /// <summary>
  • /// Permet de définir/récupérer le contrôle parent
  • /// </summary>
  • [Browsable(false)]
  • public Form ParentForm {
  • // Accesseur en lecture
  • get {
  • // Si l'on est en mode design, alors on demande au designer de définir la propriété ParentForm avec
  • // le this de la form contenant l'instance du composant.
  • if(this.Site.DesignMode) {
  • IDesignerHost dh = (IDesignerHost)(this.GetService(typeof(IDesignerHost)));
  • if(dh != null) {
  • object obj = dh.RootComponent;
  • if(obj != null) {
  • _ParentForm = (Form)obj;
  • }
  • }
  • }
  • return _ParentForm;
  • }
  • // Accesseur en écriture
  • set {
  • if(value != null) {
  • _ParentForm = value;
  • this._ParentForm.Move += new EventHandler(_ParentForm_Move);
  • }
  • }
  • }
  • /// <summary>
  • /// Constructeur
  • /// </summary>
  • public Patafix() {}
  • /// <summary>
  • /// Survient lorsque l'utilisateur déplace la fenêtre
  • /// </summary>
  • /// <param name="sender"></param>
  • /// <param name="e"></param>
  • void _ParentForm_Move(object sender, EventArgs e) {
  • if(_ParentForm.Location.X < _minLeft)
  • _ParentForm.Location = new Point(0, _ParentForm.Location.Y);
  • if(_ParentForm.Location.Y < _minTop)
  • _ParentForm.Location = new Point(_ParentForm.Location.X, 0);
  • if(Screen.GetWorkingArea(_ParentForm).Width - _ParentForm.Location.X - _ParentForm.Width < _minRight)
  • _ParentForm.Location = new Point(Screen.GetWorkingArea(_ParentForm).Width - _ParentForm.Width, _ParentForm.Location.Y);
  • if(Screen.GetWorkingArea(_ParentForm).Height - _ParentForm.Location.Y - _ParentForm.Height < _minBottom)
  • _ParentForm.Location = new Point(_ParentForm.Location.X, Screen.GetWorkingArea(_ParentForm).Height - _ParentForm.Height);
  • }
  • }
  • }
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel.Design;
using System.Drawing;

namespace EdgeGlue {
	/// <summary>
	/// Composant permettant le collage automatique d'une fenêtre sur les bords de l'écran.
	/// </summary>
	public partial class Patafix : Component {

		private int _minLeft = 10;
		private int _minRight = 10;
		private int _minTop = 10;
		private int _minBottom = 10;
		private Form _ParentForm; // Page sur laquelle a été déposée le contrôle

		/// <summary>
		/// Permet de spécifier la marge minimum pour la gauche
		/// </summary>
		public int MinLeft {
			set { _minLeft = value; }
			get { return _minLeft; }
		}

		/// <summary>
		/// Permet de spécifier la marge minimum pour la droite
		/// </summary>
		public int MinRight {
			set { _minRight = value; }
			get { return _minRight; }
		}

		/// <summary>
		/// Permet de spécifier la marge minimum pour le haut
		/// </summary>
		public int MinTop {
			set { _minTop = value; }
			get { return _minTop; }
		}

		/// <summary>
		/// Permet de spécifier la marge minimum pour le bas
		/// </summary>
		public int MinBottom {
			set { _minBottom = value; }
			get { return _minBottom; }
		}

		/// <summary>
        /// Permet de définir/récupérer le contrôle parent
        /// </summary>
		[Browsable(false)]
		public Form ParentForm {
			// Accesseur en lecture
			get {
				// Si l'on est en mode design, alors on demande au designer de définir la propriété ParentForm avec
				// le this de la form contenant l'instance du composant.
				if(this.Site.DesignMode) {
					IDesignerHost dh = (IDesignerHost)(this.GetService(typeof(IDesignerHost)));
					if(dh != null) {
						object obj = dh.RootComponent;
						if(obj != null) {
							_ParentForm = (Form)obj;
						}
					}
				}
				return _ParentForm;
			}

			// Accesseur en écriture
			set {
				if(value != null) {
					_ParentForm = value;
					this._ParentForm.Move += new EventHandler(_ParentForm_Move);
				}
			}
		}

		/// <summary>
		/// Constructeur
		/// </summary>
		public Patafix() {}

		/// <summary>
		/// Survient lorsque l'utilisateur déplace la fenêtre
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		void _ParentForm_Move(object sender, EventArgs e) {
			if(_ParentForm.Location.X < _minLeft)
				_ParentForm.Location = new Point(0, _ParentForm.Location.Y);
			if(_ParentForm.Location.Y < _minTop)
				_ParentForm.Location = new Point(_ParentForm.Location.X, 0);
			if(Screen.GetWorkingArea(_ParentForm).Width - _ParentForm.Location.X - _ParentForm.Width < _minRight)
				_ParentForm.Location = new Point(Screen.GetWorkingArea(_ParentForm).Width - _ParentForm.Width, _ParentForm.Location.Y);
			if(Screen.GetWorkingArea(_ParentForm).Height - _ParentForm.Location.Y - _ParentForm.Height < _minBottom)
				_ParentForm.Location = new Point(_ParentForm.Location.X, Screen.GetWorkingArea(_ParentForm).Height - _ParentForm.Height);
		}
	}
}

 Conclusion

Ce code présente une utilisation de la fonction Screen.GetWorkingArea qui permet de savoir sur quel écran (s'il y en a plusieurs) se trouve une form.

Vous y trouvez également une utilisation du code de la source qui se trouve ici : http://www.csharpfr.com/code.aspx?ID=34875
La source en question décrit comment un composant non graphique peut détecter la form sur laquelle il est posé.

En soi, c'est pas compliqué, mais j'ai mis la chose en initié à cause de l'utilisation du IDesignerHost.

Sinon, vous noterez qu'il peut y avoir parfois un léger clignotement de la fenêtre si on la déplace près du bord... ben je sais pô comment résoudre ça.


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) PIXEL SHADER - CRÉATION, UTILISATION, ET BINDING
Source avec Zip Source avec une capture Source .NET (Dotnet) CRÉATION ET ENVOI DE FICHIERS ZIPPÉS
Source avec Zip Source avec une capture Source .NET (Dotnet) LES RÉFÉRENCES FAIBLES
Source avec Zip Source .NET (Dotnet) EXTENSION DES LISTES GÉNÉRIQUES (DESIGN PATTERN "DECORATEUR"...
Source avec Zip Source avec une capture Source .NET (Dotnet) UN PEU DE 3D AVEC XAML ET BLENDER

 Sources de la même categorie

Source avec une capture TOOLTIP TEXT POUR LA LISTE DÉROULANTE D'UN COMBOBOX par whismeril
Source avec Zip Source avec une capture Source .NET (Dotnet) LOGIN (XML) par DanMor498
Source .NET (Dotnet) WEBTESTPLUGIN - IGNORER DES URLS LORS D'UN TEST WEB VISUAL S... par jesusonline
Source avec Zip Source avec une capture Source .NET (Dotnet) EXERCICE DE CALCUL MENTAL par Sat7121
Source avec Zip Source avec une capture Source .NET (Dotnet) TRADUCTEUR ALGO VISUAL BASIC .NET/C# par rhonin33

 Sources en rapport avec celle ci

Source .NET (Dotnet) COMPOSANT NON GRAPHIQUE QUI DÉTECTE SUR QUELLE FORM IL A ÉTÉ... par yoannd
Source avec Zip Source .NET (Dotnet) AGENT SCREEN READER par yex
Source avec Zip Source .NET (Dotnet) APPARITION PROGRESSIVE D'UN FORM par Romuald

Commentaires et avis

Commentaire de lumesh le 06/10/2006 10:10:53

pour le deplacement et le collage de ta form:

        private bool mouseIsDown = false;
        private Point mouseLastPoint;
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            if (e.X >= 0 && e.X <= this.Width && e.Y >= 0 && e.Y <= 24 && e.Button == MouseButtons.Left)
            {
                mouseIsDown = true;
                mouseLastPoint = new Point(e.X, e.Y);
            }
        }
        protected override void OnMouseMove(MouseEventArgs e)
        {
            Point a = new Point();
            if (mouseIsDown)
            {
                a = new Point(this.Left - (mouseLastPoint.X - e.X), this.Top - (mouseLastPoint.Y - e.Y));
                if (a.X <= 10)
                {
                    a = new Point(0, a.Y);
                }
                if (a.Y <= 10)
                {
                    a = new Point(a.X, 0);
                }
                if (a.X >= (Screen.GetWorkingArea(this).Width - this.Width - 10))
                {
                    a = new Point(Screen.GetWorkingArea(this).Width - this.Width, a.Y);
                }
                if (a.Y >= (Screen.GetWorkingArea(this).Height - this.Height - 10))
                {
                    a = new Point(a.X, Screen.GetWorkingArea(this).Height - this.Height);
                }
                this.Location = a;
            }
            base.OnMouseMove(e);
        }
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseUp(e);
            mouseIsDown = false;
        }

Et la pas de pb ca clignote plus! il faut modifier la position de la form d'abord en memoire et une fois le tout calculé tu dois le definir dans la form.
Tu fais toutes tes conditions et apres seulement du donnes la position a la fenetre!

Commentaire de yoannd le 11/10/2006 09:35:16

Génial, merci pour l'info !
C'est vrai que ce problème de clignotement était assez génant, j'essaierai bientot ta nouvelle méthode !

Commentaire de pomedeterre le 08/11/2006 09:03:58

Bonjour !!!

Heuuu, je me sens tout petit là mais j'ai une question toute bête...

Comment on s'en sert de ce koli code ???

Désolé pour cette horrible question, merci !

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

fenêtre Form [ par JCpp ] Je voudrais déplacer la fenêtre Form automatiquement, ci je clique sur un bouton à la position (x-100,y+10) par exemplePour connaître la résolution de [C#] Splash Screen [ par MickParadiseLost ] Hello ! J'aimerais creer un splash screen qui ne sert pas uniquement au design mais qui charge le programme avec une barre de progression. De plus, j' Dimension de l'écran [ par adomarle ] Bonjour, Je souhaiterais r&#233;cup&#233;rer les dimensions (largeur, hauteur) de l'&#233;cran pour adapter mes images &#224; la taille de l'&#233;cra Print screen Panel1 [ par cpadmin ] Bonjours!Voilà j'ai dans ma form1 un panel qui contient plusieurs picturebox.J'ai avec cette forme un main menu avec un bouton enregistrer.Le travail Print a panel avec plusieurs controls [ par D0X ] Salut a tout le monde! J'ai un Panel au j'ai placé plusieurs Controls personnalisés. Voilà, je veux imprimer ce Panel. J'imagine que je dois construir centrer une form à l'écran [ par ericdu93 ] Bonjour,j'ai un premier form qui s'affiche par défaut en haut à gauche (sans être collé au bord), lorsque dans cette fenetre j'ouvre une deuxème fenet pb full screen DirectX9 [ par 10demon10 ] bonjour à tousVoila j'ai un petit soucis avec ma mise en pleine écran de mon apply voici les partis de codes concernées: public static void Init(Contr Splash screen qui s'affiche que 1fois [ par MatHack_74 ] Bonjour,Voilà, j'ai un petit problème et j'aimerais savoir comment faire :J'aimerais que quand une personne lance le programme une fenêtre avec un tex


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales