I. Introduction▲
Comment changer le titre de l'application, interdire à l'utilisateur de fermer l'application brutalement en cliquant sur la croix rouge située en haut et à droite de la fenêtre Access, comment changer la couleur d'arrière-plan ou encore comment dérouler une liste simplement en cliquant dans le champ. Au travers de ce tutoriel, nous allons répondre à toutes ces petites astuces qui donnent un aspect professionnel à une application. Certaines de ces méthodes ne fonctionnent pas sur Access 2007 et d'autres sont spécifiques à Office 2010 et, sans doute, valables pour Access 2013 et 2016.
II. Agrandir/Réduire la fenêtre Access▲
Lors de l'ouverture de l'application, il peut être intéressant de faire en sorte que l'application s'agrandisse toute seule pour occuper l'ensemble de l'écran.
Copier et coller le code suivant dans un module nommé Mod_Windows.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
'Dimension de la fenêtre Access
Public
Enum TypeWindows
SCMINIMIZE =
&
HF020&
SCMAXIMIZE =
&
HF030&
SCRESTORE =
&
HF120&
End
Enum
' Déclarations
Const
WM_SYSCOMMAND As
Long
=
&
H112
Private
Declare
Function
PostMessage Lib
"user32.dll"
Alias "PostMessageA"
(
_
ByVal
hwnd As
Long
, ByVal
MSG As
Long
, ByVal
wParam As
Long
, ByVal
lParam As
Long
) As
Long
Function
WindowsDimension
(
WindowsSCAs TypeWindows) As
Boolean
Dim
hwnd As
Long
hwnd =
Application.hWndAccessApp
If
hwnd <>
0
Then
PostMessage hwnd, WM_SYSCOMMAND, WindowsSC, 0
WindowsDimension =
True
Else
' Fenêtre pas trouvée
WindowsDimension =
False
End
If
End
Function
Pour appeler le code :
Call
WindowsDimension
(
SCMAXIMIZE)
Il pourrait être alors envisager d'appeler ce code à partir d'une macro AutoExec.
III. Désactiver la croix rouge en haut et à droite de la fenêtre Access.▲
Remarque : cette fonction ne fonctionne que pour Access 2003, 2010 et supérieur.
Pour des raisons qui n'intéressent que le concepteur d'une application, il peut être judicieux d'interdire à l'utilisateur de pouvoir cliquer sur la croix rouge située en haut et à droite de la fenêtre Access. Cela permet alors au concepteur de canaliser l'utilisateur et ainsi prévoir dans le code certaines réactions lors de la fermeture de l'application.
Copier et coller le code suivant dans un module nommé Mod_RedCross.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
' ***** API pour désactiver la croix rouge en haut et à droite de la fenêtre Access *****
Private
Declare
Function
GetSystemMenu Lib
"user32"
_ (
ByVal
hwnd As
Long
, ByVal
bRevert As
Long
) As
Long
Private
Declare
Function
RemoveMenu Lib
"user32"
_
(
ByVal
hMenu As
Long
, ByVal
nPosition As
Long
, ByVal
wFlags As
Long
) As
Long
Private
Declare
Function
GetMenuItemCount Lib
"user32"
(
ByVal
hMenu As
Long
) As
Long
Private
Declare
Function
DrawMenuBar Lib
"user32"
(
ByVal
hwnd As
Long
) As
Long
Private
Const
MF_BYPOSITION =
&
H400&
Private
Const
MF_REMOVE =
&
H1000&
Private
hSysMenu As
Long
Public
Sub
RedCrossLock
(
)
'Désactive la croix rouge en haut et à droite de la fenêtre Access
hSysMenu =
GetSystemMenu
(
Application.hWndAccessApp
, False
)
Dim
oCount As
Long
oCount =
GetMenuItemCount
(
hSysMenu)
Call
RemoveMenu
(
hSysMenu, oCount -
1
, MF_REMOVE Or
MF_BYPOSITION)
DrawMenuBar hSysMenu
End
Sub
Public
Sub
RedCrossActive
(
)
'Réactive la croix rouge en haut et à droite de la fenêtre Access
hSysMenu =
GetSystemMenu
(
Application.hWndAccessApp
, True
)
DrawMenuBar hSysMenu
End
Sub
Pour appeler le code :
Activer la croix rouge :
Call
RedCrossActive
Désactiver la croix rouge :
Call
RedCrossLock
IV. Titre de l'application▲
Au lieu d'avoir un beau titre Microsoft Access, nous pouvons personnaliser ce titre.
Ce paramètre peut être défini dans les options Access de la base active. Toutefois, dans le cas d'une application qui travaille alternativement sur plusieurs dorsales, il peut être utile de changer ce titre. Nous pourrions alors envisager que ce titre se trouve dans un champ de table pour chaque dorsale. Cependant, ce principe d’accès alternatif à plusieurs bases de données dorsales ne sera pas abordé dans ce tutoriel afin de rester dans le contexte du tutoriel. Cela dit, on peut également imaginer utiliser ce principe à l’ouverture de chaque formulaire.
Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.
Copier et coller le code suivant dans un module nommé Mod_TitleApplication.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Public
Sub
TitleApplication
(
Optional
strTitle As
String
=
""
)
On
Error
GoTo
Err
'Définir le titre l'application
Dim
prp As
DAO.Property
'Si pas de titre
If
strTitle =
""
Then
'On supprime le titre existant
CurrentDb.Properties.Delete
"AppTitle"
Else
'Création du titre. Cette action déclenche l'erreur 3270
CurrentDb.Properties
(
"AppTitle"
) =
strTitle
End
If
'Rafraîchit la barre de menu
Application.RefreshTitleBar
Fin
:
Exit
Sub
Err
:
If
Err
.Number
=
3270
Then
'Création du titre
Set
prp =
CurrentDb.CreateProperty
(
"AppTitle"
, dbText, strTitle)
'Ajout du titre à la propriété
CurrentDb.Properties.Append
prp
Resume
End
If
End
Sub
Exemple pour appeler le code :
Call
TitleApplication
(
"Developpez.com"
)
V. Couleur d'arrière-plan▲
Jusqu'à Access 2003, une fonction API permettait de changer la bien triste couleur grise d'arrière-plan d'Access. Cette fonction n'avait plus d'effet sous Access 2007. Depuis Access 2010, une propriété des options Access permet de changer l'arrière-plan en trois couleurs : bleu, gris clair ou noir. Comme les autres options, cela demande un redémarrage de l'application.
Ces valeurs de couleurs sont inscrites dans le registre et peuvent donc être modifiées par un utilisateur qui n'aurait pas accès aux options Access.
La clé de registre est la suivante : HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common. La clé Theme est une clé DWORD qui prend respectivement le 1 (bleu), 2 (gris clair) et 3 (noir).
Copier et coller le code suivant dans un module nommé Mod_BackGroundColor.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
'Couleur d'arrière-plan
Public
Enum BackGroundColor
Blue =
1
Grey =
2
Black =
3
End
Enum
Public
Sub
BackGroundColor
(
regValue As
BackGroundColor)
On
Error
GoTo
Err
'Modification d'une clé de registre
Dim
WshShell
Dim
strReg As
String
'Chemin de la clé de registre
strReg =
"HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Theme"
'Modifie le registre pour changer la couleur d'arrière-plan d'Access
Set
WshShell =
CreateObject
(
"Wscript.Shell"
)
WshShell.RegWrite
strReg, regValue, "REG_DWORD"
Set
WshShell =
Nothing
MsgBox
"Vous devez fermer puis rouvrir l'application pour que la couleur d'arrière-plan soit appliquée."
Fin
:
Exit
Sub
Err
:
MsgBox
"Le registre est verrouillé en écriture."
&
vbCrLf
&
_
"Inscription de la clé de registre impossible."
Resume
Fin
End
Sub
Pour appeler le code :
La valeur 1 mettra l'arrière-plan en bleu.
Call
BackGroundColor
(
1
)
VI. Icône de formulaire▲
Une belle icône sur un formulaire améliore très justement le rendu final. Créer un répertoire, nommé Icone, dans le même répertoire que l'application. Placer dedans la ou les icônes. Dans notre exemple, l'icône se nomme Icone1.ico. Cette fonction permet également de mettre une icône dans le menu de l'application en haut et à gauche.
Copier et coller le code suivant dans un module nommé Mod_BackGroundColor.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
'********************** Api pour l'icône de l'application et des formulaires ********************************************
Public
Declare
Function
LoadImage Lib
"user32"
Alias _
"LoadImageA"
(
ByVal
hInst As
Long
, ByVal
lpsz As
String
, _
ByVal
un1 As
Long
, ByVal
n1 As
Long
, ByVal
n2 As
Long
, _
ByVal
un2 As
Long
) As
Long
Public
Declare
Function
SendMessage Lib
"user32"
Alias _
"SendMessageA"
(
ByVal
hwnd As
Long
, ByVal
wMsg As
Long
, _
ByVal
wParam As
Long
, lParam As
Any) As
Long
Public
Const
WM_GETICON =
&
H7F
Public
Const
WM_SETICON =
&
H80
Public
Const
ICON_SMALL =
0
Public
Const
ICON_BIG =
1
'LoadImage() image types
Public
Const
IMAGE_BITMAP =
0
Public
Const
IMAGE_ICON =
1
Public
Const
IMAGE_CURSOR =
2
Public
Const
IMAGE_ENHMETAFILE =
3
'LoadImage() flags
Public
Const
LR_DEFAULTCOLOR =
&
H0
Public
Const
LR_MONOCHROME =
&
H1
Public
Const
LR_COLOR =
&
H2
Public
Const
LR_COPYRETURNORG =
&
H4
Public
Const
LR_COPYDELETEORG =
&
H8
Public
Const
LR_LOADFROMFILE =
&
H10
Public
Const
LR_LOADTRANSPARENT =
&
H20
Public
Const
LR_DEFAULTSIZE =
&
H40
Public
Const
LR_LOADMAP3DCOLORS =
&
H1000
Public
Const
LR_CREATEDIBHeader =
&
H2000
Public
Const
LR_COPYFROMRESOURCE =
&
H4000
Public
Const
LR_SHARED =
&
H8000
Function
strIcon
(
str As
String
) As
String
'Fonction renvoyant le chemin de l'icône
strIcon =
CurrentProject.Path
&
"\Icone\"
&
str &
".ico"
End
Function
Public
Function
SetFormIcon
(
Optional
Frm As
String
, Optional
MyIcon As
String
) As
Boolean
'Place une icône dans le menu de l'application ou dans un formulaire
Dim
hIcon As
Long
Dim
hwnd As
Long
Dim
IconPath As
String
IconPath =
MyIcon
If
Len
(
Dir
(
IconPath)) =
0
Then
SetFormIcon =
False
Exit
Function
Else
If
Frm =
""
Then
hwnd =
Application.hWndAccessApp
Else
hwnd =
Forms
(
Frm).hwnd
End
If
hIcon =
LoadImage
(
0
&
, IconPath, IMAGE_ICON, 16
, 16
, LR_LOADFROMFILE)
If
hIcon <>
0
Then
Call
SendMessage
(
hwnd, WM_SETICON, 0
, ByVal
hIcon)
SetFormIcon =
True
End
If
End
If
End
Function
Pour appeler le code :
Événement : Sur chargement du formulaire
Call
SetFormIcon
(
Me.Name
,strIcon
(
Icone1))
Au chargement de l'application :
L'appel de cette fonction peut très bien être envisagé à partir d'une macro nommée AutoExec.
Call
SetFormIcon
(
,strIcon
(
Icone1))
VII. Déroulement d'une liste▲
Il n'est pas toujours très pratique de viser la petite flèche d'une liste déroulante pour la dérouler. Il est effectivement plus simple de pouvoir cliquer dans le champ de la liste afin qu'elle se déroule. Quelques lignes de code permettent cela.
Copier et coller le code suivant dans un module nommé Mod_List.
2.
3.
4.
5.
6.
7.
8.
9.
Sub
DropDownlList
(
Button As
Integer
, Ctrl As
Control)
'Si clic sur bouton gauche
If
Button =
1
Then
'On déroule la liste
Ctrl.Dropdown
End
If
End
Sub
Pour appeler le code :
Événement : Sur souris appuyée du formulaire :
2.
3.
4.
5.
6.
Private
Sub
MyListDeroulante_MouseDown
(
Button As
Integer
, Shift As
Integer
, X As
Single
, Y As
Single
)
'Déroule la liste sur clic gauche
Call
DropDownlList
(
Button, Me.MyListDeroulante
)
End
Sub
VIII. Limiter une liste▲
Dans le même ordre d'idée, il est parfois nécessaire que l'utilisateur ne puisse sélectionner que des éléments de la liste. Contrairement à Vb.Net, Access ne verrouille pas la liste déroulante lorsque sa propriété « Limiter à liste » est définie à Oui. Le principe consiste donc à interdire la saisie au clavier. Toutefois, il faut pouvoir laisser l'utilisateur naviguer entre les champs avec les touches de déplacement du clavier et notamment la touche Tab. Également, il peut être nécessaire de laisser la possibilité à l'utilisateur de supprimer la valeur de champ afin qu'il soit vide.
Copier et coller le code suivant dans un module nommé Mod_List.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public
Enum TabDel
TouchTab =
1
TouchTabDel =
2
End
Enum
Sub
RestrictedList
(
KeyCode As
Integer
, Optional
onTouch As
TabDel =
2
)
If
onTouch =
1
Then
'Si touche appuyée <> de Tab
If
KeyCode <>
9
Then
KeyCode =
0
'Interdit la saisie au clavier
End
If
Else
'Si touche appuyée <> de Tab et <> de Suppr(Del)
If
KeyCode <>
9
And
KeyCode <>
46
Then
'Interdit la saisie au clavier
KeyCode =
0
End
If
End
If
End
Sub
Pour appeler le code :
Événement : Sur touche appuyée du contrôle liste déroulante :
Private
Sub
MyListDeroulante_KeyDown
(
KeyCode As
Integer
, Shift As
Integer
)
'Liste limitée, la touche Tab peut être utilisée
Call
RestrictedList
(
KeyCode, 1
)
End
Sub
Ou :
2.
3.
4.
5.
6.
Private
Sub
MyListDeroulante_KeyDown
(
KeyCode As
Integer
, Shift As
Integer
)
'Liste limitée, les touches Tab et Suppr (Del) peuvent être utilisées
Call
RestrictedList
(
KeyCode, 2
)
End
Sub
IX. Ajouter une valeur à une liste▲
Dans une application, il peut être nécessaire que l'utilisateur puisse enrichir ses propres listes.
Ces listes sont issues de tables.
Nous allons voir comment proposer à un utilisateur d'ajouter une valeur à une liste.
La liste déroulante doit avoir la propriété Limiter à liste définie à Oui.
Événement : Sur absence dans liste de la liste déroulante :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private
Sub
List_AddValueList_NotInList
(
NewData As
String
, Response
As
Integer
)
On
Error
GoTo
Err
'Message pour ajouter une valeur à la liste
If
MsgBox
(
"Souhaitez-vous ajouter cette nouvelle valeur à la liste ?"
, _
vbYesNo
+
vbQuestion
+
vbDefaultButton2
, "Ajout d'une nouvelle valeur"
) =
vbYes
Then
DoCmd.RunSQL
"INSERT INTO Tbl_List ( Tbl_ValList ) SELECT """
&
NewData &
""";"
Response
=
acDataErrAdded
Else
Response
=
acDataErrContinue
Me.List_AddValueList.Undo
End
If
Fin
:
Exit
Sub
Err
:
MsgBox
"Erreur : "
&
Err
.Number
&
vbCrLf
&
Err
.Description
Resume
Fin
End
Sub
X. Texte en majuscules▲
Dans certains cas, la saisie d'un texte doit impérativement être en majuscules.
Par exemple, par convention, et même si aucune règle ne l'impose, les noms de famille sont écrits en majuscules afin de les distinguer des prénoms, ce qui pourrait porter à confusion (ex. : Guy Michel). De plus, le manuel de typographie française élémentaire de Yves PERROUSSEAUX précise, dixit l'Académie française, qu'à partir du moment où une machine le permet, les majuscules doivent avoir leur accentuation. Or, pour pouvoir accentuer des majuscules, il faut connaître un certain nombre de raccourcis clavier. Ce qui est loin d'être le cas pour tout le monde. Cette fonction va donc simplifier la saisie des données par les utilisateurs puisque même si le clavier est en minuscules, les caractères seront convertis en majuscules et ce, avec leur accentuation.
Événement : Sur touche activée du contrôle :
2.
3.
4.
5.
6.
Private
Sub
Tbl_TxtMajuscule_KeyPress
(
KeyAscii As
Integer
)
'On convertit chaque caractère frappé en majuscule
KeyAscii =
Asc
(
UCase
(
Chr
(
KeyAscii)))
End
Sub
XI. Initiale d'un mot en minuscule▲
À la suite du sujet précédent, il faut parfois imposer à l'utilisateur de commencer son texte à saisir avec une initiale minuscule.
En effet, après un mot suivi de : le mot doit commencer par une minuscule.
Par défaut, dans une application, il y a une étiquette avec un titre suivi de :.
Ce même titre sera généralement employé dans l'état de l'aperçu avant impression.
La fonction suivante vérifie donc si, lors de la saisie, le curseur est sur le 1er caractère et si c'est le cas, le caractère est converti en minuscule.
Cela dit et malgré cette règle typographique, il peut arriver dans certain cas où un mot doit impérativement commencer par une initiale majuscule.
Dans ce cas, saisir un 1er caractère, puis un second, placer le curseur au début du second caractère, puis effacer le 1er caractère avec la touche Retour.
Événement : Sur touche activée du contrôle :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private
Sub
Tbl_InitialeMinuscule_KeyPress
(
KeyAscii As
Integer
)
'Si ce n'est pas un chiffre
If
KeyAscii >
64
Then
'On vérifie si on se trouve au premier caractère
If
Me.Tbl_InitialeMinuscule.SelStart
=
0
Then
'La 1re lettre est convertie en minuscule
KeyAscii =
Asc
(
LCase
(
Chr
(
KeyAscii)))
End
If
End
If
End
Sub
XII. Caractère interdit▲
Dans certains cas, il est nécessaire d'imposer les caractères de saisie qui peuvent être utilisés.
Cette fonction permet de définir d'une liste de caractères autorisés.
Événement : Sur touche activée du contrôle :
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private
Sub
Tbl_CaractereLimite_KeyPress
(
KeyAscii As
Integer
)
'N'autorise que les caractères de la liste ainsi que les touches Tab, Suivant, Enter
If
InStr
(
"1234567890abcdefghijklmnopqrstuvwxyz-"
&
Chr
(
8
) &
Chr
(
9
) &
Chr
(
13
), Chr
$(
KeyAscii)) =
0
Then
MsgBox
"Seules les lettres de l'alphabet, "
&
_
"les chiffres de 0 à 9 et le caractère spécial « « - » sont autorisés"
, , "Caractère interdit"
KeyAscii =
0
End
If
End
Sub
XIII. Limiter la longueur d'un texte▲
Si un champ est défini à 255 caractères dans une table, nous pourrons saisir 255 caractères dans ce même champ de formulaire même s'il ne fait que 2 cm de longueur. Se pose alors le problème de l'aperçu avant impression. En effet, dans ce cas, le texte sera tronqué et le document ne reflétera pas ce que l'on souhaite réellement présenter. Cette fonction permet de limiter la longueur du texte en fonction de la longueur de champ de formulaire.
Copier et coller le code suivant dans un module nommé Mod_LimitTextToControl.
Ne parlant anglais, vous m'excuserez si quelques commentaires ne sont pas traduits.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
Const
LOGPIXELSX =
88
Const
LOGPIXELSY =
90
Const
TWIPSPERINCH =
1440
Type
Size
cx As
Long
cy As
Long
End
Type
Declare
Function
GetDC Lib
"user32"
(
ByVal
hwnd As
Long
) As
Long
Declare
Function
GetDeviceCaps Lib
"gdi32"
(
ByVal
hDC As
Long
, _
ByVal
nIndex As
Long
) As
Long
Declare
Function
GetFocus Lib
"user32"
(
) As
Long
Declare
Function
GetTextExtentPoint Lib
"gdi32"
Alias _
"GetTextExtentPointA"
(
ByVal
hDC As
Long
, ByVal
lpsz As
String
, _
ByVal
cbString As
Long
, lpSIZE As
Size) As
Long
Declare
Function
ReleaseDC Lib
"user32"
(
ByVal
hwnd As
Long
, _
ByVal
hDC As
Long
) As
Long
Private
Sub
ConvertPixelsToTwips
(
X As
Long
, Y As
Long
)
Dim
hDC As
Long
, hwnd As
Long
, RetVal As
Long
Dim
XPIXELSPERINCH As
Long
, YPIXELSPERINCH As
Long
'Récupère le nombre actuel de pixels par pouces, dépendant de la résolution.
hDC =
GetDC
(
0
)
XPIXELSPERINCH =
GetDeviceCaps
(
hDC, LOGPIXELSX)
YPIXELSPERINCH =
GetDeviceCaps
(
hDC, LOGPIXELSY)
RetVal =
ReleaseDC
(
0
, hDC)
' Transforme la mesure en twips.
X =
(
X /
XPIXELSPERINCH) *
TWIPSPERINCH
Y =
(
Y /
YPIXELSPERINCH) *
TWIPSPERINCH
End
Sub
Sub
LimitTextToControlWidth
(
KeyAscii As
Integer
)
Dim
AC As
Control
Dim
Txt As
String
Dim
TxtWidth As
Long
, SpaceWidth As
Long
Dim
hwnd As
Long
, hDC As
Long
Dim
lpSIZE As
Size
Dim
RetVal As
Long
' Sortie si un caractère non imprimable est tapé
If
KeyAscii <
32
Then
Exit
Sub
' Déclare le contrôle actif
Set
AC =
Screen.ActiveControl
' Sélectionne le contrôle texte
Txt =
AC.Text
&
""
' Ajoute le caractère tapé dans le texte
If
KeyAscii >
32
Then
Txt =
Left
(
Txt, AC.SelStart
)
Txt =
Txt &
Chr
$(
KeyAscii)
Txt =
Txt &
Mid
(
Txt, AC.SelStart
+
1
+
AC.SelLength
)
End
If
hwnd =
GetFocus
(
)
hDC =
GetDC
(
hwnd)
' Convertit la largeur du texte en Twips.
RetVal =
GetTextExtentPoint
(
hDC, Txt, Len
(
Txt), lpSIZE)
ConvertPixelsToTwips lpSIZE.cx
, lpSIZE.cy
TxtWidth =
lpSIZE.cx
'Convertit la largeur des espaces en Twips
RetVal =
GetTextExtentPoint
(
hDC, " "
, 1
, lpSIZE)
ConvertPixelsToTwips lpSIZE.cx
, lpSIZE.cy
SpaceWidth =
lpSIZE.cx
' Y a-t-il des espaces à traiter ?
If
AC.SelStart
+
1
>
Len
(
Txt) Then
TxtWidth =
TxtWidth +
((
AC.SelStart
+
1
-
Len
(
Txt)) *
SpaceWidth)
End
If
' Si largeur du texte >= à la largeur du champ
If
(
TxtWidth +
(
SpaceWidth /
2
)) >=
AC.Width
Then
Beep
' Arrêt de la saisie
KeyAscii =
0
End
If
End
Sub
Pour appeler le code :
Événement : Sur touche activée du contrôle :
2.
3.
4.
5.
6.
Private
Sub
Tbl_LimitText_KeyPress
(
KeyAscii As
Integer
)
'Limite la saisie à la longueur du champ
Call
LimitTextToControlWidth
(
KeyAscii)
End
Sub
XIV. Changer le curseur de la souris au survol d'un bouton▲
Access 2010 propose enfin de pouvoir animer les boutons en définissant une forme ou une couleur différente au survol ou non dudit bouton. Cela dit, il manque la possibilité de changer l'aspect du curseur au survol du bouton.
Copier et coller le code suivant dans un module nommé Mod_Cursor.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
'32512 flèche
'32513 curseur en I
'32514 sablier
'32515 croix
'32516 flèche vers le haut
'32640, 32642, 32643, 32644, 32645, 32646 doubles flèches de redimensionnement
'32648 stationnement interdit
'32650 flèche sablier
Public
Const
HandCursor =
32649
&
Public
Declare
Function
SetCursor Lib
"user32"
(
ByVal
hCursor As
Long
) As
Long
Public
Declare
Function
LoadCursor Lib
"user32"
Alias "LoadCursorA"
_
(
ByVal
hInstance As
Long
, ByVal
lpCursorName As
Long
) As
Long
Sub
BtnHandCursor
(
)
'Curseur Main lorsque la souris arrive sur le bouton
Dim
lHandle As
Long
lHandle =
LoadCursor
(
0
, HandCursor)
If
(
lHandle >
0
) Then
SetCursor lHandle
End
Sub
Pour appeler le code :
Événement : Sur touche déplacée du bouton :
2.
3.
4.
5.
6.
Private
Sub
Btn_Icone_MouseMove
(
Button As
Integer
, Shift As
Integer
, X As
Single
, Y As
Single
)
'Affiche une main au survol du bouton
Call
BtnHandCursor
End
Sub
XV. Conclusion▲
Au travers de toutes ces petites astuces, une application peut avoir son ergonomie nettement améliorée permettant ainsi d'obtenir un résultat de qualité.
XVI. Remerciements▲
Nous tenons à remercier marsouin_89 pour la rédaction de ce tutoriel, Chrtophe et Gaby277 pour la relecture technique et Claude Leloup pour la correction orthographique.