Maximale waarde van .left eigenschap.

Status
Niet open voor verdere reacties.
Beste meedenkers,

Allereerst mijn dank op jullie reacties. Hier mijn bevindingen.

Zelfs als je de knop verder naar rechts zou kunnen verplaatsen dan nog loop je tegen de beperking van de maximale form-size aan, die is 55,873 cm.
We waren vroeger al blij met 1280 x 1024.

Klopt, dit is dus het probleem. Het speelt dus zelfs al bij de breedte van het detailscherm. Ben ik nu de enige die dat knullig vind van Microsoft ?


Haal deze regel eens voor de aardigheid weg

Call MaakSchermFullScreen(Me, True)


En gebruik docmd.maximize

Groetjes,

Gedaan Pletter. Heeft niet het gewenste effect. Toch bedankt voor de input !


ErikDijs,

Wat u niet mag vergeten is dat de verplaatsing van de knop in twips gaat.
Ruwweg is 1cm 567 twips, ook is de resolutie van belang.

Op een monitor 3840 x 2160 is de maximale verplaatsing 21605 twips, dit is berekend op de linkerkant van de knop.
De rechterkant van de knop zal dan 21605 + (knop breedte 6,998 cm x 567 twips) zijn, wat een getal van 25572 twips geeft.

Op een monitor 1024 x 768 is de maximale verplaatsing 8292 twips.

Groetjes,

Weet ik Pletter, toch bedankt voor het meedenken. Dat verhaal staat ook in de voorbeelddatabase.

Waarschijnlijk zoekt ErikDijs dit:

Formulier in ontwerpweergave, sleep dan de detailsectie zoveel mogelijk naar rechts.

Verplaats daarna de knop geheel naar rechts en kijk dan op hoeveel cm de knop naar links staat.
Dit getal doet u dan * 567

Verplaats dan weer de knop naar links toe.

code voor het verplaatsen wordt dan:

Me.Knop.Move getal * 567, Me.Knop.Top, Me.Knop.Width, Me.Knop.Height

Groetjes,

Eigenlijk is het probleem dat het detailscherm gewoon niet groot genoeg is. Om het probleem met Twips te bypassen, heb ik het detailgedeelte maximaal gezet. De knop helemaal rechts, daarna het formulier gemaximaliseerd met docmd.maximize. Het formulier wordt dan wel groter (breder dus) dan het detailscherm. Echter werkt de volgende code nog steeds niet.

Me.Knop.Left = Me.Knop.Left + 1


Ik zoek verder en als ik zelf een oplossing vind, laat ik het weten.
 
Ik heb het voor elkaar

Joepie, ik heb de oplossing gevonden.

Mede dankzij jullie input nog flink aan het spelen geweest. Daardoor de oplossing uiteindelijk gevonden.

Ik kijk in mijn code of ik buiten het (maximale) detailscherm kom bij het plaatsen van de knoppen. Als dat het geval is, dan verander in het ankergebruik van de betreffende knop van links naar rechts. Dan bepaal ik ik de breedte van mijn formulier en plaats de knoppen vanaf de rechterzijde van het formulier, gewoon met het move commando. Doordat het formulier aan de rechterzijde verankert is, redeneert hij bij het left commando niet vanaf de linkerzijde van het scherm, maar trekt hij een denkbeeldige lijn van de breedte van het scherm - de breedte van het formulier. Hierdoor kom ik dus niet over de integere waarde.

Ok, het is misschien niet de mooiste oplossing (workaround) maar het werkt dus eindelijk wel !

Blijft raar natuurlijk. Maar ik ben gelukkig. Heb er erg lang mee gestoeid.

Nogmaals mijn dank voor het meedenken ! Zonder jullie was ik hier op een of andere manier toch niet gekomen.

Vriendelijke groetjes van,

Erik
 
Zou niet weten hoe.

Hoi Pletter,

Natuurlijk zou ik dat willen om anderen te helpen. Ik zou echter niet weten hoe en waar.

Ik bouw nog ff een voorbeelddatabase om het idee te laten zien. Daarbij zal ik een functie schrijven die het probleem automatisch voor je oplost, zodat, mensen die functie gewoon kunnen kopiëren. Dit wordt volgende week maandag.

Erik
 
Laatst bewerkt:
Oplossing left property

Hier de oplossing als het niet lukt om een object dusdanig naar de rechterzijde te verplaatsen omdat de left eigenschap maximaal integer mag zijn.

Gebruik onderstaande functie en het zal wel werken.

Code:
Function LeftPropertieControl(vl_Form As Form, vl_Control As Control, vl_LeftPosition As Long)
Dim vl_Response As Variant
    Select Case vl_LeftPosition
        Case Is > vl_Form.InsideWidth ' Dus groter dan de reolutie waarmee men draait.
            vl_Response = MsgBox("Uw scherm heeft een te lage resolutie om het object zover naar rechts te verplatsen." & Chr("13") & " " & Chr("13") & "Stel de left property opnieuw in." & Chr("13") & " " & Chr("13") & "", 272, "Scherm te klein", "", 1000)
            Exit Function
        Case Is < (32767 - vl_Control.Width) ' Dus een normale left eigenschap met integere waarde
            vl_Control.HorizontalAnchor = acHorizontalAnchorLeft
            vl_Control.Left = vl_LeftPosition
            Exit Function
        Case Is > (32767 - vl_Control.Width) ' Dus te groot voor left eigenschap.
            vl_Control.HorizontalAnchor = acHorizontalAnchorRight
            vl_Control.Left = vl_LeftPosition - (vl_Form.InsideWidth - vl_Form.Width) - vl_Control.Width
            Exit Function
    End Select
End Function

U kunt het zelf testen met bijgevoegde database.

Ik ben met dit probeer een lange tijd zoet geweest en hoop anderen hiermee geholpen te hebben, die hetzelfde ervaren.

Vriendelijke groetjes

Erik Dijselijnck
 

Bijlagen

  • OplossingLeftProperty.zip
    85,2 KB · Weergaven: 19
@ErikDijs

Leuk stukje huiswerk, maar het kan ook op deze manier, na melding van msgbox kan
je ook het scherm verder naar rechts schuiven, dit werkt alleen als je het formaat van het formulier groter hebt gemaakt.
Me.InsideWidth geeft als resultaat de schermbreedte en
Me.Form.Width geeft als resultaat de breedte van het formulier.


Code:
Private Sub Knop_Click()
    
    Me.Knop.Move Me.InsideWidth - Me.Knop.Width
    MsgBox "Oke"
    Me.Knop.Move Me.Form.Width - Me.Knop.Width, Me.Knop.Top, Me.Knop.Width, Me.Knop.Height
    
End Sub


Groetjes
 
Eens.... maar.

Hoi Pletter,

Eens, klopt volgend mij helemaal (wat je zegt), echter.........

Je kunt het formulier niet breder maken dan het integere getal. Je kan wel je formulier groter tonen (maar dat wordt hij dus niet!). Dan lukt het simpelweg niet meer om een object (eigenlijk dus buiten je formulier) aan de rechterzijde te plaatsen. De oplossing hiervoor moet dus echt gezocht worden in het rechts ankeren van het object. Daar zit dus de oplossing in.

Ik hoop dat ik het wel duidelijk heb overgebracht. Alleen dan kunnen anderen hier ook iets aan hebben.

Erik
 
op left

ErikDijs,

Denk dat u code toch niet doet wat u wilt, deze even getest op een lagere resolutie met gevolg een foutmelding.

Zie afbeelding: 2022-08-30.png

Voeg een database bij die bij mij wel in een lagere resolutie werkt.

Zie afbeelding: 2022-08-30 (1).png

Datbase: Bekijk bijlage Form op left eigenschap.rar


Groetjes,
 
Foutmelding klopt

Die foutmelding klopt juist Pletter.

Als je een object bij een te lage resolutie buiten je scherm wilt plaatsen, dan geeft hij netjes de juiste foutmelding.

Dus eigenlijk om een goed programma te maken, dien je eerst te bepalen met welke resolutie de gebruiker werkt. En dan (liefst relatief) de left positie bepalen.

Op die manier maak ik in mijn eigen programma (dus niet de voorbeeld databse) een hele knoppenbalk aan de bovenzijde van mijn scherm.

Vriendelijke groetjes

Erik
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan