Bonjour,
Je voudrais afficher 2 formulaires en même temps au format "acdialog" à des endroits bien précis pour eviter qu'ils se chevauchent.
Merci d'avance pour votre aide
Bonjour,
Je voudrais afficher 2 formulaires en même temps au format "acdialog" à des endroits bien précis pour eviter qu'ils se chevauchent.
Merci d'avance pour votre aide
Bonjour,
Regarde du côté de la fonction MoveSize et également dans lale post intitulé Position d'un formulaire
A+![]()
Bonjour, Gabout,
Je ne suis pas d'accord à 100% avec ce qui est écrit dans le lien donné
La partie qui me gêne le plus est la suivante :
La fonction GetWindowRect retournant des coordonnées en Pixels, une conversion en unités logiques "physiques" ne serait possible qu'en connaissant le nombre nbX de twips par pixel horizontalement et nbY de Twips par pixel verticalement. Il est vrai que ces 2 nombres sont = 15 dans le cas de plus de 95% des machines, mais pas 100 % !!!.
Code : Sélectionner tout - Visualiser dans une fenêtre à part DoCmd.MoveSize 2440, 2400, , 4000
Attention, cette propriété prend les coordonnées en twips qui correspond à 1/20 de points. Pour plus d'informations et d'exemples sur tout ces fonctions rendez vous sur l'aide d'Access.
Or, si mes souvenirs sont bons, ce n'est qu'au delà de Office 2002 que Access permet de connaître facilement ces 2 nombres.
Si l'on tient à passer par MoveSize, il sera mieux de calculer les véritables nombres de twips par pixel dans les deux sens ( c'est faisable), quelle que soit la version de Access.
Je préconiserais toutefois que l'on restât en pixels du début jusqu'à la fin pour ces positionnements, sans tenir compte de la méthode MoveSize ni de l'échelle points qu'utilise Access... (c'est mille fois plus pratique et largement réalisable).
EDIT : pour ceux qui s'intéressent à ce genre de problème avec les curieux "twips" de MicroSoft, ils trouveront une conversation intéressante ici :
http://www.dbtalk.net/comp-databases...-411667-2.html
Bonjour et merci pour votre aide.
Par contre, comment fait on pour ouvrir deux formulaire en même temps
Merci d'avance
Bonjour,
En même temps, je ne suis pas sûr que cela soit possible...![]()
Bonjour
On peut ouvrir deux formulaires en même temps, soit sur un évènement :
Soit sur l'évènement de chargement du 1er
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DoCmd.OpenForm "Frm_Form1", acNormal DoCmd.OpenForm "Frm_Form2", acNormal
Par contre cela nécessite qu'ils aient les codes de dimensionnement et positionnement adéquats pour ne pas de superposer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub Form_Load() DoCmd.OpenForm "Frm_Form2", acNormal End Sub
Bonjour et merci de votre aide.
Effectivement, je peux afficher qu'un seul formulaire, il y en a un qui prend toujours la priorité sur l'autre.
Merci encore
Bonjour,
Tout-à-fait d'accord et le mieux est alors :
- de relever (on sait faire) les dimensions de l'écran en Pixels
- de relever (méthode plus haut) les dimensions (en pixels) de chaque formulaire
- de décider (on sait faire) en fonction de ces trois dimensions de l'emplacement (voire si besoin des dimensions également) , toujours en pixels, de ces deux forumulaires.
Car les dimensions d'un écran peuvent largement varier d'une machine à l'autre ...
Re...
Voilà un exemple ...
Ici :
1) j'ai voulu utiliser la fonction du lien déjà montré (pour ne pas dérouter) bien que j'utilise personnellement d'autres fonctions (question de goût, entre autres ...)
2) je n'ai pas Office sous la main en ce moment et ai donc écrit depuis VB6.
Je crois toutefois me rappeler que VBA/Access est capable, comme VB6 (et pas comme VBA/Excel) de donner la propriété hwnd d'un formulaire. Si tel est le cas ===>> voir mes commentaires et alléger comme il se doit...
Dans un module bas :
et depuis le formulaire, on appelle, selon ce qu'on veut voir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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
90
91
92
93
94 Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Type POINTAPI x As Long y As Long End Type Const ENUM_CURRENT_SETTINGS As Long = -1& Const CCDEVICENAME = 32 Const CCFORMNAME = 32 Private Type DEVMODE dmDeviceName As String * CCDEVICENAME dmSpecVersion As Integer dmDriverVersion As Integer dmSize As Integer dmDriverExtra As Integer dmFields As Long dmOrientation As Integer dmPaperSize As Integer dmPaperLength As Integer dmPaperWidth As Integer dmScale As Integer dmCopies As Integer dmDefaultSource As Integer dmPrintQuality As Integer dmColor As Integer dmDuplex As Integer dmYResolution As Integer dmTTOption As Integer dmCollate As Integer dmFormName As String * CCFORMNAME dmUnusedPadding As Integer dmBitsPerPel As Integer dmPelsWidth As Long dmPelsHeight As Long dmDisplayFlags As Long dmDisplayFrequency As Long End Type Private Type monecran hauteur As Integer largeur As Integer End Type Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean 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 Public Sub acentrer(frm As Form) Dim monhwnd As Long, R As RECT 'je crois bien qu'un foruilaire access a déjà une propriété hwn ' si tel est bien le cas : on peut dire directement : ' monhwnd = frm.hwnd et supprimer la déclaration, alors inutile, de DindWindows monhwnd = FindWindow(vbNullString, frm.Caption) '======================================= Dim DevM As DEVMODE, ECRAN As monecran Call EnumDisplaySettings(0&, ENUM_CURRENT_SETTINGS, DevM) ECRAN.largeur = DevM.dmPelsWidth ECRAN.hauteur = DevM.dmPelsHeight GetWindowRect monhwnd, R Dim large As Integer, haut As Integer large = R.Right - R.Left haut = R.Bottom - R.Top R.Left = (ECRAN.largeur - large) / 2 R.Top = (ECRAN.hauteur - haut) / 2 SetWindowPos monhwnd, 0, R.Left, R.Top, large, haut, 0 End Sub Public Sub positionnons(frm As Form) Dim monhwnd As Long, R As RECT 'je crois bien qu'un foruilaire access a déjà une propriété hwn ' si tel est bien le cas : on peut dire directement : ' monhwnd = frm.hwnd et supprimer la déclaration, alors inutile, de FindWindows '============================================================================ monhwnd = FindWindow(vbNullString, frm.Caption) Dim DevM As DEVMODE, ECRAN As monecran Call EnumDisplaySettings(0&, ENUM_CURRENT_SETTINGS, DevM) ECRAN.largeur = DevM.dmPelsWidth ECRAN.hauteur = DevM.dmPelsHeight MsgBox "mon écran mesure " & ECRAN.largeur & " pixels par " & ECRAN.hauteur & " pixels" GetWindowRect monhwnd, R Dim large As Integer, haut As Integer large = R.Right - R.Left haut = R.Bottom - R.Top MsgBox "ma fenêtre mesure " & large & " pixels par " & haut & " pixels" R.Left = 100 'pour la placer à 100 pixels à gauche R.Top = 200 ' et à 200 pixels en haut coefh = 1.2 ' et multiplier sa largeur par 1.2 coefv = 1.5 ' et multiplier sa hauteur par 1.5 MsgBox "je vais la positionner à " & R.Left & "," & R.Top & " et multiplier sa largeur par " & coefh & _ "et sa hauteur par " & coefv SetWindowPos monhwnd, 0, R.Left, R.Top, large * coefh, haut * coefv, 0 End Sub
soit (pour centrer) :
soit (pour placer ailleurs et modifier les dimensions) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part acentrer Form1 ' 'si autre fenêtre, sionon autant utiliser Me
Il est clair que le centrage se fera sur les dernières dimensions (si vous lancez d'abord positionnons) ou sur les dimensions actuelles (si vous lancez d'abord centrer).
Code : Sélectionner tout - Visualiser dans une fenêtre à part positionnons Form1 'si autre fenêtre, sionon autant utiliser Me
Il est également clair que des lancements successifs de positionnons augmenteront chaque fois plus les dimensions.
Voilà ===>> adapter à ses besoins...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager