Acces forms maximaliseren

Status
Niet open voor verdere reacties.

Bandito

Gebruiker
Lid geworden
8 okt 2012
Berichten
201
Beste allemaal,

Ik ben op dit moment bezig met een order registratie database te maken.

Ik gebruik de volgende regel om een form te maximaliseren: DoCmd.Maximize

Mijn probleem is als volgt: ik maak de forms op een pc met een redelijk breed beeldscherm. Wanneer ik hier een knop helemaal rechts plaats en de database op een andere pc open verdwijnt deze knop rechts uit het scherm. Het scherm is dan niet breed genoeg.

Hoe ontwerp ik een form waarbij de knop altijd op dezelfde plek zit ongeacht hoe groot het scherm is?

Bij voorbaat dank,
 
Hoe ontwerp ik een form waarbij de knop altijd op dezelfde plek zit ongeacht hoe groot het scherm is?
Sommige vragen zijn simpel te beantwoorden, en dit is er één van. Antwoord: niet doen.

Ik heb nog nooit een database gemaakt waarin de regel DoCmd.Maximize gebruikt wordt, en ik snap eerlijk gezegd niet waarom mensen daar zo aan gehecht zijn want geen enkel formulier ziet er goed en strak uit als het is gemaximaliseerd. Objecten op een formulier staan op een vastgepinde plek, en de enige manier om een object bij het laden te verplaatsen is dus door m.b.v. twips (de gebruikte eenheid) een object te verplaatsen. Maar daarmee ben je er doorgaans niet, want als je een formulier maakt dat een bepaalde breedte heeft, en waarbij de vlakverdeling helemaal OK is, dan kun je niet zomaar een object naar links verplaatsen. Zodra je een groot formulier van een groot scherm plaatst op een kleiner scherm, gaat het formulier sowieso niet meer passen. Je moet dan dus alle objecten opnieuw positioneren. En misschien wel verkleinen. En wellicht ook nog eens de lettertypes aanpassen.

Het kán dus nog wel, maar levert zelden een bruikbaar resultaat op voor de gebruiker die geconfronteerd wordt met het verkleinde formulier. Drie keer raden tegen wie ze dan gaan zeuren...
Kortom: ik ontwerp mijn formulieren altijd vanuit het kleinste werkscherm, nooit gemaximaliseerd (altijd als pop-up met door mij bepaalde grootte) en m.b.v. het uitlezen van de schermresolutie zet ik ze ook nog eens netjes in het midden.
Als er, doordat de formulieren dan wat kleiner zijn (gemaximaliseerd heb je uiteraard het grootste scherm) te weinig ruimte is voor wat ik er op kwijt moet, dan gebruik ik een tabcontrol om meerdere tabbladen te maken. Sowieso kun je jezelf de vraag stellen of het er voor de gebruiker wel vriendelijker op wordt als je alle velden en knoppen op één pagina kwakt. Ook als het niet nodig is qua aantal objecten, zet ik dus vaak een tabcontrol in.
 
Hallo Octafish,

Bedankt voor het waardevolle antwoord. Ik ga het op die manier proberen.

Ik zit nu met een ander probleem. Ik krijg mijn formulieren niet meer anders dan fullscreen..
Natuurlijk heb ik de DoCmd.Maximize verwijderd maar nog steeds blijven mijn forms uitgestrekt over het forum. Ik heb al wat zitten rommelen in de eigenschappen maar zonder resultaat.

In de ontwerpweergave zijn de forms 12 cm maar zo gauw ik naar formulierweergave ga springt het form naar fullscreen.
Wat zie ik over het hoofd?

Bij voorbaat dank,
 
Om je een idee te geven hoe je een formulier kunt positioneren a.d.h.v. de schermresolutie, hier de techniek die ik gebruik.
Code:
Option Compare Binary
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1

Code:
Function SchermResolutie() As String
Dim X  As Long, Y   As Long
Dim MyMessage As String
Dim MyResponse As VbMsgBoxResult
     
    X = GetSystemMetrics(SM_CXSCREEN)
    Y = GetSystemMetrics(SM_CYSCREEN)
    SchermResolutie = X & "|" & Y
    
End Function

De bovenste twee blokken zet je in een (willekeurige, nieuwe) module.
Op het formulier komt dan deze procedure:
Code:
Private Sub Form_Load()
Dim arrS As Variant
Dim iBr As Long, iHo As Long, iL As Long, iT As Long
    
    arrS = Split(SchermResolutie, "|")
    
t = InputBox("", "", Me.InsideHeight & "|" & Me.InsideWidth)
'6840|8595
    With Me
        .InsideWidth = 11175  'Hier de breedte van je eigen formulier
        .InsideHeight = 9735  'Hier de hoogte van je eigen formulier
        iBr = CInt(arrS(LBound(arrS)))
        iHo = CInt(arrS(UBound(arrS)))
        iL = ((iBr * 15) - .InsideWidth) / 2
        iT = ((iHo * 15) - .InsideHeight) / 2
        DoCmd.MoveSize iL, iT
        .Visible = True
    End With
End Sub

In de code staat een Inputbox die de huidige afmetingen uitleest. In de Stapmodus zet ik die dan vervolgens in de commentaarregel en kopieer ik de gewenste waarden naar de regels .InsideWidth = 11175 en .InsideHeight = 9735 zodat ik de goede waarden heb. En daarna is het een beetje spelen met de getallen als het wat breder/hoger moet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan