Hot News aus dem CAD.de-Newsletter:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  UserForm zentrieren (2 Bildschirme)?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   UserForm zentrieren (2 Bildschirme)? (213 mal gelesen)
mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


Sehen Sie sich das Profil von mb-ing an!   Senden Sie eine Private Message an mb-ing  Schreiben Sie einen Gästebucheintrag für mb-ing

Beiträge: 565
Registriert: 06.09.2012

Inventor 2013, WIN 10 (64bit), Dell Precision T1650, 16GB (PSP 2011 Pro)

erstellt am: 24. Mrz. 2020 09:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

theoretisch sollte man mit folgenden Code eine UserForm zentrieren können:
(https://ww3.cad.de/foren/ubb/Forum258/HTML/001853.shtml)

Sub Test2()
With UserForm
   .StartUpPosition = 0
   .Left = ThisApplication.Left + (0.5 * ThisApplication.Width) - (0.5 * .Width)
   .Top = ThisApplication.Top + (0.5 * ThisApplication.Height) - (0.5 * .Height)
   .Show vbModeless
End With
Unload UserForm
End Sub

Aber bei mir klappt das leider nicht  

Ich würde gerne die UserForm immer im Zentrum des aktuellen IV-Fenster anzeigen, egal auf welchem Bildschirm sich dieses Fenster befindet.

Application.Left, ThisApplication.Left & ThisApplication.ActiveView.Left (Analog füt Top) liefern mir unterschiedliche Werte.

UserForm1.StartUpPosition = 3 geht immer vom VBA-Fenster aus...

Habt Ihr eine Idee warum es bei mir nicht klappt?

Autodesk schafft es ja anscheinend mit dem Befehl 
ThisApplication.CreateProgressBar(…)
Ihr Hinweisfenster ist immer schön in der Mitte des entsprechenden IV-Fensters.

Danke im Voraus für Eure Bemühungen.

Danke und Grüße
MB-Ing.

------------------
Wissen ist Macht. Nichts wissen macht auch nichts  

[Diese Nachricht wurde von mb-ing am 24. Mrz. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Meierjo
Mitglied



Sehen Sie sich das Profil von Meierjo an!   Senden Sie eine Private Message an Meierjo  Schreiben Sie einen Gästebucheintrag für Meierjo

Beiträge: 209
Registriert: 20.08.2003

Windows 10 Prof 64 Bit
Inventor Prof 2019
Vault Basic 2019

erstellt am: 24. Mrz. 2020 13:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mb-ing 10 Unities + Antwort hilfreich

Hallo

Schon mal probiert, das StartUpPosition auszukommentieren / wegzulassen, oder auf 1 zu setzen?

Gruss

[Diese Nachricht wurde von Meierjo am 24. Mrz. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


Sehen Sie sich das Profil von mb-ing an!   Senden Sie eine Private Message an mb-ing  Schreiben Sie einen Gästebucheintrag für mb-ing

Beiträge: 565
Registriert: 06.09.2012

Inventor 2013, WIN 10 (64bit), Dell Precision T1650, 16GB (PSP 2011 Pro)

erstellt am: 24. Mrz. 2020 16:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von Meierjo:
Hallo

Schon mal probiert, das StartUpPosition auszukommentieren / wegzulassen, oder auf 1 zu setzen?

Gruss

[Diese Nachricht wurde von Meierjo am 24. Mrz. 2020 editiert.]



@Meierjo:

Vielen Dank für Deine Antwort.
Ja das habe ich davor und zur Sicherheit nochmals probiert, aber es hat auch keinen Erfolg gebracht.

Klappt der Code bei Euch?

Danke und Grüße
MB-Ing.

------------------
Wissen ist Macht. Nichts wissen macht auch nichts 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Meierjo
Mitglied



Sehen Sie sich das Profil von Meierjo an!   Senden Sie eine Private Message an Meierjo  Schreiben Sie einen Gästebucheintrag für Meierjo

Beiträge: 209
Registriert: 20.08.2003

Windows 10 Prof 64 Bit
Inventor Prof 2019
Vault Basic 2019

erstellt am: 24. Mrz. 2020 17:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mb-ing 10 Unities + Antwort hilfreich

Hallo

Ja, wenn ich StartUpPosition auf 1 stelle, wird die Userform zentriert auf dem jeweiligen Bildschirm, wo der Inventor läuft, zentriert geöffnet

Gruss

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


Sehen Sie sich das Profil von mb-ing an!   Senden Sie eine Private Message an mb-ing  Schreiben Sie einen Gästebucheintrag für mb-ing

Beiträge: 565
Registriert: 06.09.2012

Inventor 2013, WIN 10 (64bit), Dell Precision T1650, 16GB (PSP 2011 Pro)

erstellt am: 25. Mrz. 2020 09:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von Meierjo:
Hallo

Ja, wenn ich StartUpPosition auf 1 stelle, wird die Userform zentriert auf dem jeweiligen Bildschirm, wo der Inventor läuft, zentriert geöffnet

Gruss



@Meierjo:

Vielen herzlichen Dank für Deine Antwort.

Ist das Inventor-Fenster auf dem linken Bildschirm klappt es tadellos.
Aber befindet sich Inventor auf dem rechten Monitor dann wird die UserForm zu weit links (Nahe dem linken Rand des rechten Screens) dargestellt.
Kurzzeitig hat ich Remote im Verdacht, aber auch auf meinem normalen Desktop-Rechner verhält es sich wie oben beschrieben.
Habe aktuell Inventor 2020 Service-Pack 2 zum Testen...

Danke und Grüße
MB-Ing.

------------------
Wissen ist Macht. Nichts wissen macht auch nichts 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Meierjo
Mitglied



Sehen Sie sich das Profil von Meierjo an!   Senden Sie eine Private Message an Meierjo  Schreiben Sie einen Gästebucheintrag für Meierjo

Beiträge: 209
Registriert: 20.08.2003

Windows 10 Prof 64 Bit
Inventor Prof 2019
Vault Basic 2019

erstellt am: 25. Mrz. 2020 09:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mb-ing 10 Unities + Antwort hilfreich

Hallo

Zitat:
Original erstellt von mb-ing:

Habe aktuell Inventor 2020 Service-Pack 2 zum Testen...

Bei mir funktioniert's in Inventor 2019, mit aktuellen Servicepack.
In Inventor 2020 funktioniert's bei mir übrigens auch nicht (habe ich eben erst ausprobiert)  

EDIT: Sorry, wenn man den richtigen Code verwendet, funktionierts auch. Also: bei mir funktionierts in Inventor 2019 und in Inventor 2020, beide mit aktuellem Servicepack


Gruss

[Diese Nachricht wurde von Meierjo am 25. Mrz. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


Sehen Sie sich das Profil von mb-ing an!   Senden Sie eine Private Message an mb-ing  Schreiben Sie einen Gästebucheintrag für mb-ing

Beiträge: 565
Registriert: 06.09.2012

Inventor 2013, WIN 10 (64bit), Dell Precision T1650, 16GB (PSP 2011 Pro)

erstellt am: 25. Mrz. 2020 10:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von Meierjo:
Hallo

Bei mir funktioniert's in Inventor 2019, mit aktuellen Servicepack.
In Inventor 2020 funktioniert's bei mir übrigens auch nicht (habe ich eben erst ausprobiert)   

EDIT: Sorry, wenn man den richtigen Code verwendet, funktionierts auch. Also: bei mir funktionierts in Inventor 2019 und in Inventor 2020, beide mit aktuellem Servicepack


Gruss

[Diese Nachricht wurde von Meierjo am 25. Mrz. 2020 editiert.]


@Meierjo:
Merci für Deine Antwort.

Den richtigen Code?
Also den Code von oben?

Sub Test2()
With UserForm
  .StartUpPosition = 0
  .Left = ThisApplication.Left + (0.5 * ThisApplication.Width) - (0.5 * .Width)
  .Top = ThisApplication.Top + (0.5 * ThisApplication.Height) - (0.5 * .Height)
  .Show vbModeless
End With
Unload UserForm
End Sub

Danke und Grüße
MB-Ing.

------------------
Wissen ist Macht. Nichts wissen macht auch nichts 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Meierjo
Mitglied



Sehen Sie sich das Profil von Meierjo an!   Senden Sie eine Private Message an Meierjo  Schreiben Sie einen Gästebucheintrag für Meierjo

Beiträge: 209
Registriert: 20.08.2003

Windows 10 Prof 64 Bit
Inventor Prof 2019
Vault Basic 2019

erstellt am: 27. Mrz. 2020 18:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mb-ing 10 Unities + Antwort hilfreich

Hallo

sorry, erst jetzt gesehen.
Ich habe .StartUpPosition auf 1 gesetzt
Ansonsten den Code so belassen

Gruss

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


Sehen Sie sich das Profil von mb-ing an!   Senden Sie eine Private Message an mb-ing  Schreiben Sie einen Gästebucheintrag für mb-ing

Beiträge: 565
Registriert: 06.09.2012

Inventor 2013, WIN 10 (64bit), Dell Precision T1650, 16GB (PSP 2011 Pro)

erstellt am: 01. Apr. 2020 07:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von Meierjo:
Hallo

sorry, erst jetzt gesehen.
Ich habe .StartUpPosition auf 1 gesetzt
Ansonsten den Code so belassen

Gruss



Hi Meierjo,

Danke für Deine Antwort, aber auch mit .StartUpPosition = 1 klappt es bei mir nicht 
Was für einen Inventor hast Du drauf bzw. welches Service-Pack?

Danke und Grüße
MB-Ing.

------------------
Wissen ist Macht. Nichts wissen macht auch nichts 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Meierjo
Mitglied



Sehen Sie sich das Profil von Meierjo an!   Senden Sie eine Private Message an Meierjo  Schreiben Sie einen Gästebucheintrag für Meierjo

Beiträge: 209
Registriert: 20.08.2003

Windows 10 Prof 64 Bit
Inventor Prof 2019
Vault Basic 2019

erstellt am: 01. Apr. 2020 07:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mb-ing 10 Unities + Antwort hilfreich

Hallo

Ich hab's mit Inventor 2019 und Inventor 2020 probiert, jeweils mit akutellem Servicepack-Stand

Gruss

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1580
Registriert: 15.11.2006

Windows 10 x64, Inventor 2020

erstellt am: 01. Apr. 2020 12:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mb-ing 10 Unities + Antwort hilfreich

Hallo

Die StartUpPosition kann zur Laufzeit nicht mehr verändert werden bzw. das hat keine Auswirkungen mehr. Das geht nur in der Initialisierung.
Die StartUpPosition=1 funktioniert mit zwei Monitoren nach meiner Erfahrung nur gelegentlich.
Ich empfehle das ganze weniger zufällig zu machen. Der Code zentriert immer im Inventorfenster, auch wenn das Fenster nicht maximiert ist. Ist der Inventor minimiert, wird das Inventorfenster vorher maximiert.

In die Initialize-Sub der Form:

Code:
Private Sub UserForm_Initialize()
Dim sngLeft As Single
Dim sngTop As Single

    Call ReturnPosition_CenterScreen(Me.Height, Me.Width, sngLeft, sngTop)
    Me.Left = sngLeft
    Me.Top = sngTop
End Sub


Und in ein beliebiges anderes Modul:

Code:

Option Explicit

    Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal Index As Long) As Long
    Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
    Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long
    Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal Index As Long) As Long
    Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hWnd As Long, ByRef lpRect As udtRECT) As Long

Type udtRECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public Sub ReturnPosition_CenterScreen(ByVal sngHeight As Single, _
                                      ByVal sngWidth As Single, _
                                      ByRef sngLeft As Single, _
                                      ByRef sngTop As Single)
Dim sngAppWidth As Single
Dim sngAppHeight As Single
Dim hWnd As Long
Dim lreturn As Long
Dim lpRect As udtRECT
   
    If ThisApplication.WindowState = kMinimize Then
        ThisApplication.WindowState = kMaximize
    End If
   
    hWnd = ThisApplication.MainFrameHWND
   
    lreturn = GetWindowRect(hWnd, lpRect)
    sngAppWidth = ConvertPixelsToPoints(lpRect.Right - lpRect.Left, "X")
    sngAppHeight = ConvertPixelsToPoints(lpRect.Bottom - lpRect.Top, "Y")
    sngLeft = ConvertPixelsToPoints(lpRect.Left, "X") + ((sngAppWidth - sngWidth) / 2)
    sngTop = ConvertPixelsToPoints(lpRect.Top, "Y") + ((sngAppHeight - sngHeight) / 2)
End Sub

Public Function ConvertPixelsToPoints(ByVal sngPixels As Single, _
                                      ByVal sXorY As String) As Single
Dim hDC As Long

  hDC = GetDC(0)
  If sXorY = "X" Then
      ConvertPixelsToPoints = sngPixels * (72 / GetDeviceCaps(hDC, 88))
  End If
  If sXorY = "Y" Then
      ConvertPixelsToPoints = sngPixels * (72 / GetDeviceCaps(hDC, 90))
  End If
  Call ReleaseDC(0, hDC)
End Function


------------------
MfG
Ralf

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz