Maximale waarde van .left eigenschap.

Status
Niet open voor verdere reacties.

ErikDijs

Gebruiker
Lid geworden
25 apr 2022
Berichten
30
Als ik in VBA de eigenschap LINKS van een object wilt instellen, zit daar een maximum van 31680 aan. Dit omdat het een integere instelling is. Stel ik hem hoger dan, dan krijg ik natuurlijk een foutmelding.

Nu werkt mijn programma ook op monitoren met een veel hogere resolutie. Dus om mijn objecten te kunnen positioneren, worden mijn getallen veel hoger (en dat pikt access dus niet). Echt irritant, want mijn programma loopt nu vast op computers met hoge resoluties.

Nu probeer ik dat op te lossen en ben op zoek naar alternatieven. Ik heb al een hoop gezocht op internet, waar het probleem erkent wordt, maar ik geen nette oplossingen vind. Ik zou dus nog steeds graag mijn objecten kunnen positioneren, maar weet niet of dat nog kan en zo ja, hoe.

Zomaar ter info: Ik gebruik het plaatsen van de objecten omdat ik in mijn access programma een eigen lint aanmaak met een variabele inhoud (afhankelijk van de gebruiker). Maar krijg nu mijn lint op een hoge resolutiescherm dus niet meer beeldvullend omdat ik beperkt word door de maximale integer-waarde van een control.left eigenschap van 31680.

Ik heb onder andere gespeeld met de optie anker rechts, dan komt het uiteindelijk wel aan de rechterzijde, maar dan kan ik het object nog steeds niet positioneren. Er bestaat bijvoorbeeld geen .right eigenschap.

Ik hoop dat iemand hier een oplossing voor heeft. Ben er echt al dagen naar op zoek.
 
Laatst bewerkt:
Kun je een voorbeeldje posten? Sta niet te popelen om dit zelf te gaan nabouwen.
 
Voorbeelddatabase

Hier de voorbeelddatabase.

Opstarten en op de knop drukken. De foutmelding wordt veroorzaakt doordat voor de .left eigenschap een integer getal ingevuld dient te worden. Echter wil ik de knop toch verder naar recht hebben. Ik ben ook al aan het spelen geweest om de knop rechts te ankeren, maar dan lukt het me niet de knop te verplaatsen. Dit omdat ik alleen maar de .left commando kan instellen. Was er nu maar bijvoorbeeld een .right commando, maar dat bestaat (met mijn kennis) niet.

Je dient de bijgevoegde database te testen op een hogere resolutie dan HD om een realistische inschatting te maken. Anders zou je kunnen denken dat het niet werkt omdat je de knop bijten beeld wilt plaatsen (of omdat het formulier niet groot genoeg is).

Hopende zo een goed beeld te hebben gegeven over het probleem, en dank dat voor je moeite.


Erik
 

Bijlagen

  • AccesGuru Probleem left eigenschap.zip
    33,7 KB · Weergaven: 19
Ik kan je monsterschermen helaas niet reproduceren ook al heb ik twee 4K schermen. Ik vermoed dat je op de middenstip van de Kuip zit te werken op de beeldschermen die aan de tribunes hangen :). Wat zou kunnen werken, is het verschuiven opsplitsen in brokken van 32767 of een vergelijkbare waarde. Ongeveer dan zo:

Code:
Option Compare DatabaseConst iCon As Integer = 32767

Code:
Private Sub Knop_Click()
Dim iLoop As Double, iMove As Long, iTmpMove As Integer, iRest As Long, i As Integer


    MaakSchermFullScreen Me, True
    iMove = 33000
    iLoop = iMove \ iCon + 1
    iRest = iMove
    For i = 1 To iLoop
        If iRest > iCon Then
            iTmpMove = iCon
            iRest = iRest - iCon
        Else
            iTmpMove = iRest
        End If
         Me.Knop.Left = iTmpMove
    Next i
    
End Sub

Dan breek je de totale waarde dus op in een getal dat je wél kan verschuiven, en dat doe je net zo lang tot je de complete verschuiving klaar hebt. Ik ga dat nog even testen met waarden die ik wél aankan op mijn scherm. Nu krijg ik een foutmelding:

Verschuiven.png
 
Humor

Hahahaha Humor.

Nee hoor, je scherm volstaat prima. Als je resolutie hoger is dan 1920x1080 dan heb je dat probleem.

Die foutmelding is dus het probleem. Dat komt omdat ik in de code het object verder naar rechts wil plaatsen, terwijl dat dus niet kan. Immers moet voor de left property de waarde integer zijn. Maar die waarde moet hoger zijn dan integer om hem rechts te kunnen plaatsen. Dit geldt bijvoorbeeld ook voor het commando Docmd.move (anders had ik die nog kunnen gebruiken. Op internet vind ik een hoop als erkenning van het probleem. Alleen lukt het me niet een oplossing te vinden.

Ook in jou voorstel staat de property .left die wederom alleen een integere waarde kan bevatten. Die gaat dus ook niet werken helaas.

Ik begrijp uit je reactie dat je dit probleem zelf nog niet hebt ervaren. Jammer, want dan had je de oplossing misschien ook geweten.

Nu ben ik zelf gaan testen om het vanuit een rechts anker te proberen. Maar daar kwam ik ook niet aan uit. Dit omdat je de positie dan nog steeds dient te wijzigen met move of left. Ik kom dus echt niet op een oplossing.

Maar dit probleem moeten toch meer mensen hebben. Dit is echt iets wat optreed bij het plaatsen van objecten bij hogere resoluties.

Nog even voor de duidelijkheid, het probleem zit dus niet in de fullscreen module. Maar in de simpele code van het formulier !

Wederom mijn dank voor het meedenken.

Erik
 
Laatst bewerkt:
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.
 
Ik zoek ook nog even verder. Grappig is het wel :). Ik bedenk ook dat ik een denkfout in mijn 'oplossing' heb gemaakt; de knop schuift naar links en niet naar rechts :d.
 
Probeer dit maar eens:

Code:
Private Sub Knop_Click()
    Call MaakSchermFullScreen(Me, True)
    
    Me.Knop.Move Me.InsideWidth - Me.Knop.Width, Me.Knop.Top, Me.Knop.Width, Me.Knop.Height
    ' Hier loopt hij fout. de maximale positie die je op kunt geven is 32767 (omdat de waarde inetger moet zijn.
    ' Echter wil ik objecten tot de rechterzijde van mijn scherm kunnen plaatsen. Dit lukt dus niet als de resolutie hoger is dan HD.
End Sub

Groetjes
 
Nog geen oplossing.

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.

Dat probleem heb ik opgelost in mijn FullScreencode. Dat kon ik oplossen met de InsideHeight en InsideWidth properties.

Probeer dit maar eens:
Code:
Private Sub Knop_Click()
    Call MaakSchermFullScreen(Me, True)
    
    Me.Knop.Move Me.InsideWidth - Me.Knop.Width, Me.Knop.Top, Me.Knop.Width, Me.Knop.Height
    ' Hier loopt hij fout. de maximale positie die je op kunt geven is 32767 (omdat de waarde inetger moet zijn.
    ' Echter wil ik objecten tot de rechterzijde van mijn scherm kunnen plaatsen. Dit lukt dus niet als de resolutie hoger is dan HD.
End Sub

Groetjes

Bedankt voor het meedenken. Helaas werkt dit ook niet, De waarde van het move-commando is ook beperkt tot integer. Het resultaat van de code was dus dezelfde foutmelding. Ik vermoed dat de oplossing ook niet zit in het toekennen van de waarde aan zowel het left als het move commando (of eigenschap). Ik hoop meer op een andere oplossing, maar ja.........


Erik
 
Op zich wel fijn dat niemand anders zo snel en eenvoudig een oplossing weet. Dan kom ik in ieder geval niet zo dom over ;-) :shocked:
 
Haal deze regel eens voor de aardigheid weg

Call MaakSchermFullScreen(Me, True)


En gebruik docmd.maximize

Groetjes,
 
Laatst bewerkt:
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,
 
Tenzij je met twee monitoren werkt. In dat geval kun je de verschuiving bepalen door eerst te kijken welke monitor actief is. Maar de berekening van pletter klopt; ik was zelf ook al bezig om die te maken. Vandaar ook mijn opmerking dat je op een scherm in de Kuip aan het werken was. Dan haal je de pixels wél. Op een redelijk normaal scherm kun je echt wel toe met de Integer van Move en Left.
 
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,
 
Ik gebruik het plaatsen van de objecten omdat ik in mijn access programma een eigen lint aanmaak met een variabele inhoud (afhankelijk van de gebruiker). Maar krijg nu mijn lint op een hoge resolutiescherm dus niet meer beeldvullend
@pletter: zou je denken? TS is met variabele linten aan het klooien. Waarom je die beeldvullend zou willen hebben, is mij eerlijk gezegd een raadsel. Volgens mij kún je niet eens zoveel aanpassen (qua grootte dan) aan knoppen en menu's die in een lint staan. Maar zelfs dan: waarom zou je dat willen? Mij lijkt het er niet mooier op te worden als je menu-opties of knoppen continue van grootte aan het veranderen bent. a) verandert dat de functionaliteit niet, en b) ziet het er waarschijnlijk eerder lelijker uit dan mooier. Kies voor vaste knoppen.

Nou zou het natuurlijk ook kunnen dat wat TS een 'variabel lint' noemt, gewoon een gekleurde balk is waar dan knoppen op worden gezet. Maar dan blijft nog steeds mijn opvatting: waarom zou je daar zo aan gaan lopen klooien? Zet ze neer, en laat ze staan :). Als de (linker)positie overigens inderdaad gelimiteerd is, dan helpt het sowieso niet om ze met VBA te verplaatsen, want dan kún je ze waarschijnlijk niet eens op de juiste plek zetten. Ook niet door ze handmatig erheen te slepen. Immers: zodra de linker positie het maximum overschrijft, kan het object daar ook niet staan.
 
AccessGuru,

Dan begrijp je mijn laatste bericht niet.

Wat ik begreep van de vragensteller dat er een zelf gemaakt lint moet komen voor verschillende monitoren en dat het lint zoveel mogelijk naar rechts geplaatst kan worden.

Me.InsideWidth geeft alleen de waarde van je scherm, terwijl de detailsectie groter kan zijn.
Wat ik aangaf is de grote van de detailsectie, dit kan alleen als je de detailsectie volledig naar rechts schuift.

probeer het maar eens uit, alhoewel jij dit onzin vindt.

Komt nog wel extra code bij te pas, omdat elke monitor een andere resolutie kan hebben, daar zijn dan ook weer oplossingen voor.
Laat de vragensteller maar eerst weer van zich laten horen.

groetjes,
 
Heb ik allemaal allang getest....
Code:
Private Sub Knop0_Click()
Dim frm As Form
Dim tmp As Long
    Me.InsideWidth = 90000
    Me.Knop0.Left = 10000
    MsgBox Me.InsideWidth & vbLf & Me.Knop0.Width
    Do While Not Me.Knop0.Left = 80000
        On Error GoTo Hell
        Me.Knop0.Left = Knop0.Left + Me.Knop0.Width
        tmp = InputBox("", "", Me.Knop0.Left)
    Loop

Hell:
    MsgBox Me.InsideWidth & vbLf & Me.Knop0.Left
End Sub
 
De volgende screenafbeeldingen laten zien dat het dus mogelijk is.

2022-08-05.png

2022-08-05 (1).png[XML][/XML]

2022-08-05 (2).png2022-08-05 (2).png[SQL][/SQL]


Kijk ook naar de horizontale schuifbalk.

Groetjes,
 
Dat voorbeeld kan ik ook zo voor je laten zien, en zegt helemaal niets, want er staan geen getallen bij. Voor hetzelfde geld heb je dit gemaakt op een VGA scherm.... Wat probeer je te bewijzen pletter? En voor wie?
 
Bedankt allen, ik ga hier vanmiddag weer mee aan de bak en kom erop terug.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan