0/5 (14 avis)
Vue 21 210 fois - Téléchargée 922 fois
Option Explicit 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 GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As Rect) As Long Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&) As Long Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook&) As Long Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Type Rect Left As Long Top As Long Right As Long Bottom As Long End Type Private Type CWPSTRUCT lParam As Long wParam As Long Message As Long hwnd As Long End Type Const WM_MOVE = &H3 Const WM_SETCURSOR = &H20 Const WM_NCPAINT = &H85 Const WM_COMMAND = &H111 Const SWP_FRAMECHANGED = &H20 Const GWL_EXSTYLE = -20 Private WHook& Private ButtonHwnd As Long Public laFrm As Form Event Click() Public Sub InstallBouton() ButtonHwnd& = CreateWindowEx 'REGARDER PRÈS DE LA * REMPLACER POUR CHANGER LE TEXTE DU Bouton (0&, "Button", "*", &H40000000, 50, 50, 14, 14, laFrm.hwnd, 0&, App.hInstance, 0&) Call ShowWindow(ButtonHwnd&, 1) WHook = SetWindowsHookEx(4, AddressOf HookProc, 0, App.ThreadID) Call SetWindowLong(ButtonHwnd&, GWL_EXSTYLE, &H80) Call SetParent(ButtonHwnd&, GetParent(laFrm.hwnd)) End Sub Public Sub DesinstallBouton() Call UnhookWindowsHookEx(WHook) Call SetParent(ButtonHwnd&, laFrm.hwnd) End Sub Private Function HookProc&(ByVal nCode&, ByVal wParam&, Inf As CWPSTRUCT) Dim FormRect As Rect Static LastParam& If Inf.hwnd = GetParent(ButtonHwnd&) Then If Inf.Message = WM_COMMAND Then Select Case LastParam Case ButtonHwnd&: MsgBox "salut" End Select ElseIf Inf.Message = WM_SETCURSOR Then LastParam = Inf.wParam End If ElseIf Inf.hwnd = laFrm.hwnd Then If Inf.Message = WM_NCPAINT Or Inf.Message = WM_MOVE Then Call GetWindowRect(laFrm.hwnd, FormRect) Call SetWindowPos(ButtonHwnd&, 0, FormRect.Right - 75, FormRect.Top + 6, 17, 14, SWP_FRAMECHANGED) End If End If End Function
26 août 2007 à 10:56
J'essaye de convertir ce code en VBA pour MS/Access.....
J'ai remplacé le N° de thread de ma form par 0 car je ne le connais pas. J'i des résultats variables et surprenants (dans la win de access, n'importe où dans ma forme...). Je souhaite mes propres icones/images en liau et place des boutons standards (et non un "x") ou tout autre caractère.
D'autre part, je souhaite complètement "customisé" la barre de tittre de ma forme en remplaçant les boutons d'origine uniquement pour cette forme et de plus une image à la place du "fond" de barre de titre standard XP.
Par ailleurs, ma forme est sans bard car j'utilise le GDI pour cela (coins arrondis).
5 févr. 2005 à 13:44
http://www.vbfrance.com/code.aspx?id=27709
DarK Sidious
26 oct. 2004 à 15:38
je suis plus que débutant en VB et j'ai donc bien réussi à faire apparaitre le bouton, mais je ne comprend pas comment lui associer une action ?
Merci d'avance de votre aide !!
10 juil. 2003 à 00:53
pour le code et a flint pour la correction Bien que je ne puisse pas utiliser ce code, 8/10 ;)
30 juin 2003 à 13:10
Marche Nockel, bien pratique!
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.