Resize de form quand on a suprimer les bordures en c# et bords transparent. [Résolu]

Messages postés
51
Date d'inscription
mardi 8 février 2005
Dernière intervention
25 août 2006
- - Dernière réponse : cs_badrbadr
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Dernière intervention
3 novembre 2008
- 27 nov. 2005 à 23:09
Bonsoir,



J'ai créé un form avec this.FormBorderStyle= FormBorderStyle.None;

et je souhaiterais quand meme pouvoir la resizé.Quelqu'un connaitrait un moyen de le faire.

J'ai vu un code en Vb mais j'y comprend rien :(



J'ai aussi aussi arrondi les coins de cette form mais je ne sais pas
comment faire pour que ce qu'il y a a l'exterieur de l'arrondi soit
transparent.



Merci de me mettre sur la voie :)



A++
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Dernière intervention
22 mai 2012
5
3
Merci
Si ça t'intéresse, j'ai poster une source concernant le redimensionnement !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 86 internautes nous ont dit merci ce mois-ci

Commenter la réponse de LUDINSKI
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
88
0
Merci
Salut,

As tu vu cet exemple : Non-Rectangular Form ?

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Dernière intervention
3 novembre 2008
0
Merci
pour redimension ta fenêtre, tu dois faire l'implémentation toi-même.
j'ai pas essayé mais voici une idée pour implementer le redimensionnement
Étant donné qu'il y a plus de bordure, ben tu mets une PictureBox avec un dock à droite en bas (right + bottom), ensuite, tu detecte les évenements MouseDown et MouseMove et en fonction du déplacment de la souris, tu redimensionnes ta fenêtre.

@++
Commenter la réponse de cs_badrbadr
Messages postés
51
Date d'inscription
mardi 8 février 2005
Dernière intervention
25 août 2006
0
Merci
Merci pour ses réponses et bien je vais commencer l'implémenter et voir le code pour les form transparente :)



a+
Commenter la réponse de agarcia_01
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Dernière intervention
22 mai 2012
5
0
Merci
Salut Agarcia,

Pour débutter un redimensionnement de ta fenêtre à partir du coin inférieur droit :
J'ai mis un panel 'RedimPanel' en bas à droite de la fenêtre ayant pour la propriété Anchor : Bottom | Right;

et ensuite :

[DllImport( "User32.dll", EntryPoint = "SendMessageA" )]

public
static
extern
int SendMessage( IntPtr hwnd,
int wMsg,
int wParam,
bool lParam );

[DllImport( "User32.dll", EntryPoint = "ReleaseCapture" )]

public
static
extern
bool ReleaseCapture();

private const int
WM_SYSCOMMAND = 0x112;

private void RedimPanel_MouseDown( object
sender, System.Windows.Forms.MouseEventArgs e )
{
// Relâche la fenêtre ayant le focus

ReleaseCapture();

// Débutte le redimensionnement de la fenêtre
if( e.Button == MouseButtons.Left )
SendMessage( this.Handle, WM_SYSCOMMAND, 0xF008, false
);
}

Ca marche plutôt pas mal !
Commenter la réponse de LUDINSKI
Messages postés
51
Date d'inscription
mardi 8 février 2005
Dernière intervention
25 août 2006
0
Merci
Merci LUDINSKI,

Je suis aller sur ton source et j'ai utiliser la methode suivante qui m'a permis
d'enlever les bords de ma fenetre tout en conservant le redimensionement !

private const int WS_CAPTION = 0x00C00000;

protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.Style ^= WS_CAPTION;
return createParams;
}
}

Par contre je ne savait pas que l'on pouvait le faire de cette maniere.Je souhaiterais apprendre plus sur ces methode de creation de parametre ou comment configurer ces form.
Il y aurait pas une doc un site expliquant toutes ses astuces comment savez vous que c'est 0x00C00000 qu'il faut mettre et pas autre chose ?? C'est quoi cette objet base ?

J'ai beaucoup de chose a apprendre je le sens mais je suis bien motivé :=p

Par contre j'ai pas compris ce code :
[DllImport( "User32.dll", EntryPoint = "SendMessageA" )] je l'ai mis dans mon code et ça a pété des erreurs comme quoi il me manquerais des assembly.

c'est quoi WM_SYSCOMMAND = 0x112;?

Merci d'avance pour vos réponse .

Bonne soirée :)
Commenter la réponse de agarcia_01
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Dernière intervention
3 novembre 2008
0
Merci
allons-y...
Par contre je ne savait pas que l'on pouvait le faire de cette maniere.Je souhaiterais apprendre plus sur ces methode de creation de parametre ou comment configurer ces form.
Les gens qui s'y connaissent la-dans sont ceux qui sont familier avec l'API Win32. cette dernière est le premier ensemble de fonctions (à ma connaissance) qui permettait de faire des applications windows.

Il y aurait pas une doc un site expliquant toutes ses astuces comment savez vous que c'est
0x00C00000 qu'il faut mettre et pas autre chose ?? C'est quoi cette objet base ?
MSDN est le réseau qui contient la documentation complète pour les fonctions Win32. Pour les codes hexadécimals (0x00C00000), je pense qu'on peut les retrouver dans les fichiers headers (*.h) du compilateur, mais je ne suis pas sur.
http://msdn.microsoft.com/library/en-us/dnanchor/html/anch_win32com.asp?frame=true

Par contre j'ai pas compris ce code :
[DllImport( "User32.dll", EntryPoint = "SendMessageA" )] je l'ai mis dans mon code et ça a pété des erreurs comme quoi il me manquerais des assembly.
c'est quoi WM_SYSCOMMAND = 0x112;?
À l'origine, Win32 était conçu pour fonctionner avec des languages comme le C. Ce language est un language modulaire avec comme unité principale la Fonction et non la classe. Quand on veut utiliser des fonctions du Win32, il faut les charger à partir de certains DLL. l'attiribut DLLimport demande au compilateur d'importer une fonction d'une DLL. Si ca ne fontionne pas chez toi, c'est que t'as oublié d'inclure le namespace System.Runtime.InteropServices

pour WM_SYSCOMMAND, rend toi à la page suivante:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardaccelerators/keyboardacceleratorreference/keyboardacceleratormessages/wm_syscommand.asp

Bon, j'espère que j'étais clair. Moi ausi, je ne connais pas grand chose sur les vieilles API de windows, ça datait de avant que j'achète mon premier ordi ;) mais je sais utiliser les fonctions Win32 quand j'en ai besoin

etk, bonne chance

@++
Commenter la réponse de cs_badrbadr
Messages postés
51
Date d'inscription
mardi 8 février 2005
Dernière intervention
25 août 2006
0
Merci
Merci pour ses infos badrbadr,


J'ai fais le code suivant pour avoir une fenetre qui aurait ou non des bords si je click sur un bouton:

protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.Style ^= WS_CAPTION;
return createParams;
}
}

private int WS_CAPTION ;
private bool clicked =false;

//je crée mon bouton
btnBorder = new Bouton() ;

btnBorder.Click+=new EventHandler(btnBorderClick);

private void btnBorderClick(object sender, EventArgs e)
{
if(this.clicked ==false){
this.WS_CAPTION = 0x00C00000;
this.clicked=true; // pour savoir si le bouton a été utilisé ou pas
}else
{
this.WS_CAPTION = 0;
this.clicked=false; //pour reprendre le mode de base si le bouton est //recliqué
}

Est ce qu'en mettant this.WS_CAPTION = 0; ça marcherais ?? Et comment faire pour que la form ce raffraichisse et prenne les bon param.


Merci d'avance
Commenter la réponse de agarcia_01
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Dernière intervention
3 novembre 2008
0
Merci
je pense pas qu'on puisse changer ca en cours de l'execution du programme

@++
Commenter la réponse de cs_badrbadr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.