IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Afficher 2 formulaires en même temps


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Points : 46
    Points
    46
    Par défaut Afficher 2 formulaires en même temps
    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

  2. #2
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour,

    Regarde du côté de la fonction MoveSize et également dans la le post intitulé Position d'un formulaire

    A+

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    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 :

    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.
    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 % !!!.
    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

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Points : 46
    Points
    46
    Par défaut
    Bonjour et merci pour votre aide.

    Par contre, comment fait on pour ouvrir deux formulaire en même temps

    Merci d'avance

  5. #5
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour,

    En même temps, je ne suis pas sûr que cela soit possible...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    On peut ouvrir deux formulaires en même temps, soit sur un évènement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DoCmd.OpenForm "Frm_Form1", acNormal
    DoCmd.OpenForm "Frm_Form2", acNormal
    Soit sur l'évènement de chargement du 1er
    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
    Par contre cela nécessite qu'ils aient les codes de dimensionnement et positionnement adéquats pour ne pas de superposer.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Points : 46
    Points
    46
    Par défaut
    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

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par GAYOT Voir le message
    Par contre cela nécessite qu'ils aient les codes de dimensionnement et positionnement adéquats pour ne pas de superposer.
    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 ...

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    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 :

    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
    et depuis le formulaire, on appelle, selon ce qu'on veut voir :

    soit (pour centrer) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    acentrer Form1 ' 'si autre fenêtre, sionon autant utiliser Me
    soit (pour placer ailleurs et modifier les dimensions) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    positionnons 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).
    Il est également clair que des lancements successifs de positionnons augmenteront chaque fois plus les dimensions.

    Voilà ===>> adapter à ses besoins...

Discussions similaires

  1. [AC-2003] Plusieurs fois le même formulaire en même temps
    Par talere dans le forum VBA Access
    Réponses: 0
    Dernier message: 25/11/2009, 13h45
  2. Comment ouvrir deux formulaires en même temps?
    Par Chacha35 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/09/2009, 14h25
  3. [PPT-2007] Afficher 2 ppt en même temps à l'écran
    Par Lolie11 dans le forum Powerpoint
    Réponses: 2
    Dernier message: 14/05/2009, 15h51
  4. Afficher plusieurs Form en même temps.
    Par a_lincoln54 dans le forum C++
    Réponses: 2
    Dernier message: 12/06/2008, 15h20
  5. Comment ouvrir deux formulaires en même temps?
    Par courtial dans le forum 4D
    Réponses: 1
    Dernier message: 11/05/2007, 00h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo