begin process at 2012 02 15 19:24:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

Formulaire

 > 

Comment Customisez les Windows Forms et les Boutons


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment Customisez les Windows Forms et les Boutons

vendredi 10 mars 2006 à 14:01:41 | Comment Customisez les Windows Forms et les Boutons

joe guilian

Bonjour à tous !
J'utilise Visual Studio 2005 et je voudrai s'avoir s'il est possible dans une windowsForm l'orsque l'on place un bouton (par exemple Quitter ou OK) de l'avoir autrement que rectangulaire. J'aimerai l'avoir rond ou avoir une forme étoilé par exemple.
Idem quand je creer un nouveau projet les fenetre sont toujour carré ou rectangulaire. Jaimerai l'avoir Rond ou Ovale Avoir les angles arrondi etc....
Ma question est comment faire.
Y a t'il un Plug-in ou un Programme particulier.
Merci pour votre aide
vendredi 10 mars 2006 à 14:14:17 | Re : Comment Customisez les Windows Forms et les Boutons

jannoman


oui ca existe, c'est un truc de régions
je ne retrouves pas sur ce site la source, donc voici le code

tu verras tu peux faire des trucs sympas
1 form, 2 modules
dans un premier module

'//////////////////////////////////////////////////////////////

'// INTRODUCTION //

'//////////////////////////////////////////////////////////////

' Salut,

' Apparemment tu voudrais un peut d'aide pour faire des feilles

' non-rectangulaires ...

'Voilà :

'Pour faire des fenêtres non-rectangulaire, on doit d'abord

'créer une Région : c'est comme une sorte de dessin à deux

'couleurs (plein ou vide) que l'on va ensuite appliquer à une

'fenêtre.

'Les zones de la fenêtre correspondant à le couleur "plein"

'seront visibles.

'Celles correspondant à la couleur "vide" seront invisibles.

'Les zones crée sont identifiées grace à leur Handle. Il sagit

'd'un numéro unique attribué pour identifier tous les objets :

'Boutons, Fenêtres, Régions, TextBox, etc.

'//////////////////////////////////////////////////////////////

'// CREER DES REGIONS //

'//////////////////////////////////////////////////////////////

' Pour Créer des régions il faut utiliser une des fonctions

' suivante :

'(Les coordonnée des points sont exprimées en pixels)

'CREER DES RECTANGLES

'Pour créer un région en forme de rectangle :

Declare Function CreateRectRgn Lib "gdi32" ( _

ByVal X1 As Long, _

ByVal Y1 As Long, _

ByVal X2 As Long, _

ByVal Y2 As Long) _

As Long

'X1 et Y1 indiquent les coordonnées du coin supérieur droit

'X2 et Y2 indiquent les coordonnées du coin inférieur gauche

'Cette fonction revoie le Handle de la région crée

'CREER DES ELLIPSES

'Pour créer une région en forme d'ellipse :

Declare Function CreateEllipticRgn Lib "gdi32" ( _

ByVal X1 As Long, _

ByVal Y1 As Long, _

ByVal X2 As Long, _

ByVal Y2 As Long) _

As Long

'Cette fonction crée une ellipse qui rentre dans le rectangle

'formée avec les coordonées X1, X2, Y1, Y2

'Cette fonction revoie le Handle de la région crée

'CREER DES POLYGONES

'Pour créer une région ayant la forme d'un polygone

Declare Function CreatePolygonRgn Lib "gdi32" ( _

lpPoint As POINTAPI, _

ByVal nCount As Long, _

ByVal nPolyFillMode As Long _

) As Long

'lpPoint est un tableau désignant les coins du polygone

'Il est de type POINTAPI :

Type POINTAPI

X As Long

Y As Long

End Type

'nCount désigne le nombre de coins du polygone.

'nPolyFillMode désigne le mode de remplissage.

'tu peux utiliser les constantes suivantes

Public Const ALTERNATE = 1

Public Const WINDING = 2

'J'avoue que je ne comprend pas la différence entre les deux,

'Tu peut mettre 1, ça marche bien.

'//////////////////////////////////////////////////////////////

'// COMBINER DES REGIONS //

'//////////////////////////////////////////////////////////////

'Maintenant que nous pouvons créer des régions, voici comment

'les combiner pour créer des régions complexes.

'Il faut utiliser la fonction :

Declare Function CombineRgn Lib "gdi32" ( _

ByVal hDestRgn As Long, _

ByVal hSrcRgn1 As Long, _

ByVal hSrcRgn2 As Long, _

ByVal nCombineMode As CombineMode _

) As Long

'hDestRgn désigne le Handle de la région de destination.

'/--------------------------------------------------------\

'|ATTENTION : POUR QUE CELA FONCTIONNE, IL FAUT ABSOLUMENT|

'|QUE LA REGION SOIT DEJA INITIALISEE A L'AIDE D'UNE DES |

'|FONCTIONS VUE CI-DESSUS. |

'\--------------------------------------------------------/

'hSrcRgn1 désigne le Handle de la première Région à combiner

'hSrcRgn2 désigne le Handle de la deuxième Région à combiner

'nCombineMode désigne le mode utilisé pour la Combinaison

'Tu peux utiliser une des constantes suivante :

Public Enum CombineMode

RGN_AND = 1 ' Créé l'intersection des deux

'régions

RGN_COPY = 5 ' Copie la Région1

RGN_DIFF = 4 ' Combine les parties de Région1

'qui ne font pas partie de région2

RGN_OR = 2 ' Créé l'union des deux régions

RGN_XOR = 3 ' Créé l'union des deux régions à

'laquelle on enleve l'intersection

'des deux régions

End Enum

'//////////////////////////////////////////////////////////////

'// APPLIQUER DES REGIONS //

'//////////////////////////////////////////////////////////////

'Pour appliquer une région à une fenêtre, on utilise la

'fonction suivante :

Declare Function SetWindowRgn Lib "user32" ( _

ByVal hwnd As Long, _

ByVal hRgn As Long, _

ByVal bRedraw As Boolean _

) As Long

'hWnd indique le Handle de la fenêtre à laquelle on veut

'appliquer la région.

'hRgn indique le Handle de la région à appliquer.

'bRedraw indique s'il faut redessiner la fenêtre.

'Mettre True si la fenêtre est visible

'On peut mettre False si elle est cachée.

'Note : On peut utiliser cette fonction avec le handle d'un

'contrôle au lieu de celui d'une Fenêtre

'//////////////////////////////////////////////////////////////

'// SUPPRIMER DES REGIONS //

'//////////////////////////////////////////////////////////////

'Une fois que l'on a plus besoin de la région, il faut la

'supprimer pour libérer de la mémoire.

'Pour cela, on peut utiliser la fonction :

Declare Function DeleteObject Lib "gdi32" ( _

ByVal hObject As Long _

) As Long

'hObject désigne le Handle de la région à supprimer.

'ATTENTION : NE PAS SUPPRIMER UNE REGION QUI EST APPLIQUEE

'A UNE FENETRE. CELA AURAIT POUR EFFET DE LAISSER LA FENETRE

'IMPRIMEE SUR LE BUREAU (CA FAIT PAS BEAU)

dans un 2e module

'Creation d'une fenêtre en forme de smiley

'Auteur : Thomas Detoux (Detoux@club-internet.fr)

'Pour l'utiliser, ajoutez simplement ce module

'à votre projet.

'Puis, utilisez la syntaxe :

'Smiley form

'une fois la sub lancée, la variable publique 'leSmiley'

'renvoie le handle de la région utilisée

'AVERTISSEMENT:

'Ce module nécessite le module 'Regions.bas'

'(du même auteur) pour fonctionner

'Pour toutes questions ou suggestions, n'hésitez pas

'à me mailer.

Option Explicit

Dim leSmiley As Long

Sub Smiley(obj As Form)

'////////////////

'/Initialisation/

'////////////////

Dim X As Long, Y As Long

X = obj.Width / Screen.TwipsPerPixelX

Y = obj.Height / Screen.TwipsPerPixelY

'Formes de bases

Dim Grond As Long

Dim Gsmile As Long

Dim Psmile As Long

Dim Rect As Long

Dim eyeG As Long

Dim eyeD As Long

'Formes complexes

Dim Bouee As Long

Dim leSmile As Long

Dim Yeux As Long

Dim Tete As Long

Dim LesPoints(0 To 4) As POINTAPI

'////////////////////////////////

'/Creation des formes de bases :/

'////////////////////////////////

Grond = CreateEllipticRgn(0, 0, X, Y)

Gsmile = CreateEllipticRgn(Int(X / 10), Int(Y / 10), Int(X * 9 / 10), Int(Y * 9 / 10))

Psmile = CreateEllipticRgn(Int(X * 2 / 10), Int(Y * 4 / 10), Int(X * 8 / 10), Int(Y * 8 / 10))

LesPoints(0).X = 0

LesPoints(0).Y = 0

LesPoints(1).X = X

LesPoints(1).Y = 0

LesPoints(2).X = X

LesPoints(2).Y = Int(Y * 8 / 10)

LesPoints(3).X = Int(X / 2)

LesPoints(3).Y = Int(Y / 2)

LesPoints(4).X = 0

LesPoints(4).Y = Int(Y * 8 / 10)

Rect = CreatePolygonRgn(LesPoints(0), 5, 1)

eyeG = CreateEllipticRgn(Int(X * 2 / 10), Int(Y * 3 / 10), Int(X * 4 / 10), Int(Y * 5 / 10))

eyeD = CreateEllipticRgn(Int(X * 6 / 10), Int(Y * 3 / 10), Int(X * 8 / 10), Int(Y * 5 / 10))

'///////////////////////////////

'/Creation des formes complexes/

'///////////////////////////////

'Initialisation des régions

Bouee = CreateEllipticRgn(0, 0, X, Y)

leSmile = CreateEllipticRgn(0, 0, X, Y)

Yeux = CreateEllipticRgn(0, 0, X, Y)

Tete = CreateEllipticRgn(0, 0, X, Y)

leSmiley = CreateEllipticRgn(0, 0, X, Y)

'Compilation des régions

CombineRgn Bouee, Gsmile, Psmile, RGN_DIFF

CombineRgn leSmile, Bouee, Rect, RGN_DIFF

CombineRgn Yeux, eyeG, eyeD, RGN_OR

CombineRgn Tete, Grond, Yeux, RGN_DIFF

CombineRgn leSmiley, Tete, leSmile, RGN_DIFF

'////////////

'/Conclusion/

'////////////

'Suppression des régions inutiles

DeleteObject Grond

DeleteObject Gsmile

DeleteObject Psmile

DeleteObject Rect

DeleteObject eyeG

DeleteObject eyeD

DeleteObject Bouee

DeleteObject leSmile

DeleteObject Yeux

DeleteObject Tete

'Application de la région

SetWindowRgn obj.hwnd, leSmiley, True

End Sub

dans la form

Private Sub Command1_Click()

SetWindowRgn Me.hwnd, 0, False

DeleteObject leSmiley

End

End Sub

Private Sub Form_Load()

'************************************************************

'* NOM : Simley

'* DATE : 14/11/1998

'*

'* AUTEUR : Thomas Detoux ( Detoux@club-internet.fr )

'*

'* CODE TROUVE SUR "Le petit monde de Visual Basic"

'* http://www.vbasic.org

'*

'* DESCRIPTION :

'* Cet exemple vous montre comment créer une feuille

'* en forme de smiley.

'* Dans la même idée, voir les codes "ExRegions" et "YingYang"

'*

'************************************************************

Smiley Me

End Sub

Private Sub Form_Resize()

Dim oldSmiley

oldSmiley = leSmiley

Smiley Me

DeleteObject oldSmiley

End Sub


A+.
Thomas.



Cette discussion est classée dans : boutons, windows, forms, exemple, rectangulaire


Répondre à ce message

Sujets en rapport avec ce message

Graphismes des controls [ par Reelaxman ] J'ai un pb qui me gêne pas mal (même si c'est un détail superflu):Pour la plupart des gros logiciels, si on les installent sous windows xp, on va avoi VB.NET : Les objets disparaissent dans mon formulaire [ par alexmel ] Bonjour,J'ai quelques soucis lors de la création de mes formulaires dans VB.NETJe créé mes formulaires, j'ajoute des objets (listbox, labels,...), je Problème System.windows.forms.dll [ par marcelo9 ] Bonjour, J'ai un problème de lancement d'application. Lorsque je compile et juste avant le démarrage du logiciel, une fenêtre apparait m'indiquant : C Je n'arrive pas à utiliser le CD VB-France [ par Cpapy ] J'ai envoyé plusieurs mails a vbFrance sans réponse.Pouvez vous me dépanner. MerciJ'ai un ordinateur portable Compaqavec Windows 98------------------- Mettre un interface a mon prog [ par gimli123 ] Bonjour tout le monde !!!!!!!!!!Je programme depuis peu en C, je pense avoir bientot finit d'assimilier toutes les bases. et j'aimerai que vous me dis aide pour interface sur mon prog [ par gimli123 ] Bonjour tout le monde !!!!!!!!!!Je programme depuis peu en C, je pense avoir bientot finit d'assimilier toutes les bases. et j'aimerai que vous me dis aide pour interface sur mon prog [ par gimli123 ] Bonjour tout le monde !!!!!!!!!!Je programme depuis peu en C, je pense avoir bientot finit d'assimilier toutes les bases. et j'aimerai que vous me dis NotifyIcon ContextMenu pas de form [ par Frich ] Bonjour à tous, je suis un débutant VBCe que je désir faire:aficher un systemIcon, mais sans afficher une fenêtre.avoir un menu contextuel qui permet convetir un bout de code en composant dll [ par Emcy ] bonjours,j'ai créer un label redimensionnable dans un userform : pour le créer, j'ai eu besoin d'utiliser plusieurs Label pour faire des poignées.Ce q Erreur d'affichage de Form !!!!!!!! [ par MoiDebutantVBA ] quand je tape (en VB.net) :Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.ClickDim Formulaire2


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 1,794 sec (3)

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