Resize de form quand on a suprimer les bordures en c# et bords transparent.

Résolu
agarcia_01 Messages postés 51 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 25 août 2006 - 22 nov. 2005 à 20:21
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre 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++

9 réponses

LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
24 nov. 2005 à 08:41
Si ça t'intéresse, j'ai poster une source concernant le redimensionnement !
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
22 nov. 2005 à 20:53
Salut,

As tu vu cet exemple : Non-Rectangular Form ?

/*
coq
MVP Visual C#
*/
0
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
23 nov. 2005 à 05:41
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.

@++
0
agarcia_01 Messages postés 51 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 25 août 2006
23 nov. 2005 à 13:41
Merci pour ses réponses et bien je vais commencer l'implémenter et voir le code pour les form transparente :)



a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
24 nov. 2005 à 05:47
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 !
0
agarcia_01 Messages postés 51 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 25 août 2006
27 nov. 2005 à 20:27
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 :)
0
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
27 nov. 2005 à 21:02
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

@++
0
agarcia_01 Messages postés 51 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 25 août 2006
27 nov. 2005 à 22:59
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
0
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
27 nov. 2005 à 23:09
je pense pas qu'on puisse changer ca en cours de l'execution du programme

@++
0
Rejoignez-nous