begin process at 2010 02 10 05:56:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Divers

 > 

General

 > 

style


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

style

mardi 25 septembre 2007 à 11:14:27 | style

hustler

Bonjour,

comment doit'on faire pour affecter en code un style a un bouton ???

si je mets : Button.Style = 1
j'ai le message : impossible d'affecter une propriété en lecture seule

pour info je fais cette affectation lors de la création dynamique d'un bouton

                    Dim Button As CommandButton
                    Set Button = Controls.Add("VB.CommandButton", "cmd" & (i))
                    Button.Width = CmdModif.Width
                    Button.Height = CmdModif.Height
                    Button.Top = lblclef(i).Top
                    Button.Left = CmdModif.Left
                    Button.Picture = CmdModif.Picture
                    Button.Visible = True
                   
                    Button.Style = 1

merci d'avance pour votre aide
mardi 25 septembre 2007 à 11:56:47 | Re : style

Exploreur

Membre Club
Salut,

C'est une propriété que tu ne peux que modifier en mode dévellopement, d'ailleurs le message d'erreur est bien clair...

Tu définis d'abord ton style de boutons(1 = graphitical), puis en code tu fais :

Button.Picture = LoadPicture("C:\CheminDeTonImage")

A+
Exploreur

 Linux a un noyau, Windows un pépin

 

mardi 25 septembre 2007 à 12:05:45 | Re : style

hustler

merci de ta reponse


oui mais la comme c'est du dynamique
je n'ai aucun moyen de le créer en mode graphique ???
mardi 25 septembre 2007 à 12:26:24 | Re : style

Kristof_Koder

Réponse acceptée !
En mode design 1- ajoute un bouton à ta form nommé btnGraphique par exemple 2- Définit son style comme étant Graphique 3- Fixe son index à 0 pour créer un groupe de bouton btnGraphique() 4- Fixe sa propriété Visible à False Dans le code : Ajoute un bouton au groupe : ' Ajoute un bouton au groupe btnGraphique() en lui donnant le prochain index dispo Load btnGraphique(btnGraphique.Count) ' Pour ce bouton créé With btnGraphique(btnGraphique.Count-1) ' Placement sur la form .Move ... ' Chargement de l'image .Picture = LoadPicture("...") ' Affichage du bouton .Visible = True End With Tu pourras ainsi, en plus, gérer ses EVT via les EVT du groupe de bouton BtnGraphique()
mardi 25 septembre 2007 à 12:46:53 | Re : style

xav0

Bonjour,
tu peux aussi changer directement le style du bouton avec l'API windows :

'partie déclarations
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const BS_OWNERDRAW = &HB&, GWL_STYLE = -16

Private Sub CreerBouton()
  Dim Button As CommandButton
  Set Button = Controls.Add("VB.CommandButton", "MonBouton")
  'Change le style du bouton
  SetWindowLong Button.hWnd, GWL_STYLE, GetWindowLong(Button.hWnd, GWL_STYLE) Or BS_OWNERDRAW
  'Définit une image (obligatoire, sinon le bouton est mal dessiné)
  Set Button.Picture = CmdModif.Picture
  Button.Visible = True
End Sub

mardi 25 septembre 2007 à 13:30:29 | Re : style

hustler

merci beaucoup pour votre aide
voila le code que j'ai utilisé

                    Set ButModif = Controls.Add("VB.CommandButton", "cmd" & (i))
                    With ButModif
                        .Width = CmdModif.Width
                        .Height = CmdModif.Height
                        .Top = lblclef(i).Top
                        .Left = CmdModif.Left
                        SetWindowLong ButModif.hWnd, GWL_STYLE, GetWindowLong(ButModif.hWnd, GWL_STYLE) Or BS_OWNERDRAW
                        .Picture = CmdModif.Picture
                        .ToolTipText = CmdModif.ToolTipText
                        '.Style = msoButtonCaption
                        .Visible = True
                    End With
                    Set ButModif.Container = fraPlanning

cela fonctionne bien
en effet lorsque j'ouvre le formulaire j'ai bien tous mes boutons avec l'image que j'ai selectionnée
cependant lorsque je clique sur un bouton celui-ci disparait !!!!!

les boutons s'affichent dans une frame !!!
mardi 25 septembre 2007 à 15:03:05 | Re : style

xav0

Oui, c'est vrai, avec plusieurs boutons ça ne marche pas  C'est possible de contourner le problème avec du subclassing (pour empêcher VB de recevoir l'événement LostFocus). Rajoute un module standard avec ce code :

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
Private Declare Function RemoveProp Lib "user32" Alias "RemovePropA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const GWL_WNDPROC = -4, WM_DESTROY = &H2, WM_SETFOCUS = &H7

Public Sub Subclass(hwnd As Long)
  Dim OldProc As Long
  'Capture tous les événements reçus par le bouton
  OldProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WinProc)
  SetProp hwnd, "OLDWPROC", OldProc
End Sub

Private Function WinProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  Dim OldProc As Long
  OldProc = GetProp(hwnd, "OLDWPROC")
  If uMsg = WM_DESTROY Then 'Fait le ménage avant la fermeture
    SetWindowLong hwnd, GWL_WNDPROC, OldProc
    RemoveProp hwnd, "OLDWPROC"
  End If
  'Tous les événements sont transmis à vb sauf WM_SETFOCUS
  If uMsg <> WM_SETFOCUS Then WinProc = CallWindowProc(OldProc, hwnd, uMsg, wParam, lParam)
End Function

Puis dans le code de création du bouton

  With ButModif
    ...
    Subclass .hwnd
  End With

Bon, finalement, la solution de Kristof_Koder avec les groupes de contrôles était beaucoup plus simple...

mardi 25 septembre 2007 à 16:49:24 | Re : style

hustler



effectivement c'est beaucoup plus simple

de plus j'ai mis le code directement dans le bouton et il s'affect automatiquement

merci beaucoup pour votre aide

@+
mardi 25 septembre 2007 à 17:26:42 | Re : style

hustler

encore un petit detail

il y a un moyen pour obtenir le numero du bouton créé ???

mardi 25 septembre 2007 à 20:54:28 | Re : style

xav0

Pour obtenir le numéro du nouveau bouton avec le code de Kristof_Koder ? Juste après l'instruction Load btnGraphique(...), il faut mémoriser btnGraphique.Count-1 (quantité qui augmente à chaque nouveau bouton). J'espère que ça répond à la question, sinon je ne vois pas de quoi il s'agit.


1 2

Cette discussion est classée dans : bouton, button, style, affecter, cmdmodif


Répondre à ce message

Sujets en rapport avec ce message

Style De Button [ par mokni_mehdi_3m ] Salut tout le monde Je suis un etudient et c'est ma premiere annee VB j'ai une question je crois quelle est banale1) Je veut programmer une calculatri Comment affecter un masque de saisie a un txtbox style (00.00.00.00.00) [ par STEN83 ] Je voudrais rentre des numeros de tel dans un textbox mais avec une mise en forme comment faire?Que la force soit avec vous Bouton style XP [ par IG88 ] J'ai VB6 sous win XP et lors que j'utilise des controles, ils n'ont pas le style windows XP et je voudrais savoir quelle manip il faut faire pour avoi Affecter un .xla à un bouton dans excel [ par WillVb ] Salut à tousJ'ai créé un projet Excel/VBA enregistré en .XLA. J'aimerai créer un bouton sur excel qui puisse lancer directement ce programme. Mais com button personaliser [ par twinkhales ] salut les aims je suis nouveau iciet depuis quelque temps je cherche comment personaliser un bouton sous vb.net 2005bah j'aime faire des bouton  avec Internet control [ par sammy918 ] bonsoir, je suis en train de faire un navigator mais, par example si je vais sur google.com les bouton sont comme sur windows 98 mais avec internet ex changer le style d'un bouton dynamiquement [ par HZ ] Bonjour,j'ai un probleme concernant mes boutons dynamiquement crees!Je souhaite associer une image a un bouton, j'ai fait comme suit :         Set bou Vba Button [ par Mathieu76 ] SalutBon voila j'ai un soucis, Je voudrais créé une fonction qui serait commune a plusieur bouton je m'explique:Chaque fois que l'on clic sur un bouto Un button dans une boucle ("Button" & i) [ par MASTERVINCE ] Bonjour à tous, J'ai fouillé un peu partout sur le forum mais je n'ai trouvé la solution que pour du VB.NET :( Voila j'ai crée une boucle à l'interie Affecter a des textbox des valeur par hasar!! [ par mond14 ] Salut,svp  je fait un programme en vb.net2008 et j'ai besoin de votre aide.par-exemple on un 3 textbox et un bouton et je veux que si on clic sur ce b


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,749 sec (4)

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