Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Popup Form Position aus Popup-Form Position bestimmen

Begonnen von Bernie110, August 22, 2023, 13:42:23

⏪ vorheriges - nächstes ⏩

Bernie110

Hallo Zusammen,

ich komm leider nicht weiter. Vll kann mich jemand in die richtige Richtung schubbsen.

Ich möchte aus einem PopupForm (P1) eine Popupform (P2) öffnen.
Egal wo sich das P1 am Bildschirm befindet, soll sich das P2 immer an der selben Position überhalb des P1 befinden. 
Das P2 wird öfters und auch in anderen Formularen genutzt. Würde mir das dann je nach Formular einstellen wollen.
So ähnlich :
Schalter :
domcd.openform "P2",,,,,acDialog, "P1"
Im Formular P2
if me.openargs = "P1" then
Left = Form!P1!Left + 20
Top = Form!P1!TOP -  20
end if



Geht das irgend wie so einfach ?
Danke für eure Antworten
Lg Benrie









andyfau

Hallo,
mit der Move-Methode lassen sich auch Pop-Ups beliebig positionieren. (Angaben in Twips)

Me.Move 500, 500, 3000, 3000
positioniert ziemlich oben links (Left,Top, Width, Height)

Beste Grüße
Andreas
Beste Grüße
Andreas

Bernie110

Hi Andy danke. Move so wie du es hier zeigst, positioniert das Form P1 nur am Bildschirm und steht in keiner Abhängigkeit zu P1 oder ?

Was, wenn ich 2 Bildschirme habe und P1 normalerweise auf dem linken erscheint. Und nun ziehst du P1 vom linken in den rechten und willst P2 öffnen ?
Dann erscheint dir P2 am linken oder ?

PhilS

Zitat von: Bernie110 am August 22, 2023, 15:29:40Move so wie du es hier zeigst, positioniert das Form P1 nur am Bildschirm und steht in keiner Abhängigkeit zu P1 oder ? 
Eine Abhängigkeit von anderen Formularen musst du selbst programmieren, wie du es im ersten Beitrag skizziert hast. (Die gesuchten Eigenschaften heißen WindowLeft und WindowTop.)

Zitat von: Bernie110 am August 22, 2023, 15:29:40Was, wenn ich 2 Bildschirme habe [...]
Was du schreibst, stimmt zwar effektiv, aber wie viele Bildschirme du hast spielt hier keine große Rolle. Alle Bildschirme bilden zusammen einen großen Arbeitsbereich in dem du mit der Move-Methode des Formulars positionieren kannst.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Bernie110

Zitat von: PhilS am August 22, 2023, 15:58:53Eine Abhängigkeit von anderen Formularen musst du selbst programmieren, wie du es im ersten Beitrag skizziert hast. (Die gesuchten Eigenschaften heißen WindowLeft und WindowTop.)

hallo Phil danke.
Wie sieht das dann aus :

Beim Formular Laden :
me.WindowLeft = Forms!P1!WindowLeft + 20

so ?

Lg Bernie

PhilS

Zitat von: Bernie110 am August 22, 2023, 16:46:46Wie sieht das dann aus :

Beim Formular Laden :
me.WindowLeft = Forms!P1!WindowLeft + 20
Nicht ganz. WindowLeft und WindowTop sind schreibgeschützt, daher musst du zum Positionieren des Formulars die .Move-Methode verwenden, wie oben von @andyfau bereits angeführt.

Me.Move Forms!P1.WindowLeft + 20,  Forms!P1.WindowTop - 20
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Bernie110

Klasse danke Phil, jetzt hab ichs verstanden. Klappt ! Danke!

Bernie110

Hallo Zusammen, jetzt ist leider doch ein Problem entstanden. Verstehe ich aber nicht.
Wenn ich mein Form  LOG_AUFTRAG_ERFASSUNG in den 2ten Bildschirm ziehe und u.g. Code ausführe....

Me.Move Forms!LOG_AUFTRAG_ERFASSUNG.WindowLeft + Forms!LOG_AUFTRAG_ERFASSUNG.WindowWidth - 3000, Forms!LOG_AUFTRAG_ERFASSUNG.WindowTop + 1500
... dann kommt ein "Überlauf" -fehler. Dieser Code wird in einem anderen Formular "beim anzeigen" ausgeführt.

Was passiert da ?  bzw was kann ich tun ?
Lg Bernie


PhilS

Zitat von: Bernie110 am September 19, 2023, 13:51:21Wenn ich mein Form  LOG_AUFTRAG_ERFASSUNG in den 2ten Bildschirm ziehe und u.g. Code ausführe....

Code [Auswählen] Erweitern
Me.Move Forms!LOG_AUFTRAG_ERFASSUNG.WindowLeft + Forms!LOG_AUFTRAG_ERFASSUNG.WindowWidth - 3000, Forms!LOG_AUFTRAG_ERFASSUNG.WindowTop + 1500
... dann kommt ein "Überlauf" -fehler. Dieser Code wird in einem anderen Formular "beim anzeigen" ausgeführt.
Ein Überlauf bedeutet, dass der Wertebereich einer der beteiligten Variablen/Argumente überschritten wurde.
Das kann bei der obigen Codezeile passieren, weil WindowLeft und WindowTop vom Typ Integer sind und deshalb auch für das Ergebnis ihrer Addition der Datentyp Integer verwendet wird. Die Summe aus WindowLeft + WindowTop kann aber durchaus größer als der Maximalwert (32767) für Integer sein.

Der Fehler sollte nicht auftreten, wenn du die Integer-Werte vor der Addition explizit zu Long konvertierst.

With Forms!LOG_AUFTRAG_ERFASSUNG
  Me.Move CLng(.WindowLeft) + CLng(.WindowWidth) - 3000, .WindowTop + 1500
End With

(Das With-Statement hat nix mit dem Problem zu tun. Ich habe es nur verwendet, damit man hier im Forum den Code besser lesen kann. - Ist aber auch im tatsächlichen Code nicht verkehrt.)
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Bernie110

Hallo PhilS danke für die ausführliche Erklärung. Funktioniert  ;)  Lg Bernie