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 ifGeht das irgend wie so einfach ? 
Danke für eure Antworten
Lg Benrie
			
				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
			
			
			
				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 ? 
			
			
			
				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.
			
 
			
			
				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
			
 
			
			
				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 
			 
			
			
				Klasse danke Phil, jetzt hab ichs verstanden. Klappt ! Danke!
			
			
			
				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
			
			
			
				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.)
			
 
			
			
				Hallo PhilS danke für die ausführliche Erklärung. Funktioniert  ;)  Lg Bernie