vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2017
 
zurück
Rubrik: Oberfläche · Fenster   |   VB-Versionen: VB4, VB5, VB626.08.03
Fensterpositionen synchronisieren

Synchronisieren der jeweiligen Positionen von mehreren Fenstern einer Applikation.

Autor:   Guido EisenbeisBewertung:     [ Jetzt bewerten ]Views:  13.185 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise bis zu 120,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 479,20 EUR statt 599,- EUR
  • sevDTA 3.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 20,00 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 55,20 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Wenn man eine Applikation mit mehreren Fenstern hat und möchte, dass alle möglichst "ordentlich" an der gleichen Position geöffnet werden, gibt es mehrere Möglichkeiten: z.B. bei allen die gleiche StarUp-Position festlegen, dann öffnet aber das nächste Fenster immer an dieser Stelle (z.B. Bildschirmmitte) auch wenn das vorherige verschoben wurde. Oder man speichert die letzte Fensterposition mit "Left" und "Top" ab. Das funktioniert ganz gut, es sei denn, die Fenster sind unterschiedlich gross und/oder eines ist Rahmenlos ... . Und dann?

    Dann nehmen wir zur Bestimmung der Fensterposition halt nicht "Left" und "Top", sondern die jeweilige Fenstermitte und übergeben diese. Ich habe die Punkte "MiddleLeft" und "MittelTop" genannt (sinnvoll wäre auch "Middle_X" und "Middle_Y"), und das Ganze in eine schöne, einfach zu handhabende Prozedur gepackt, so wie wir das alle lieben. Am Schluss wird die Mittel-Position noch in die Registry abgespeichert, so dass sie uns beim nächsten Start wieder zur Verfügung stehen.

    Der Aufruf erfolgt mit folgender Syntax:

    Call OpenNextWindow(OpenUpWindow As Form, _
      CloseDownWindow As Form, _
      Optional Hide_CloseDownWindow As Boolean, _
      Optional Unload_CloseDownWindow As Boolean, _
      Optional bShowModal As Boolean = False)

    Die Argumente bedeuten:

    • OpenUpWindow: das zu öffnende Fenster
    • CloseDownWindow: das zu schliessende Fenster
    • Hide_CloseDownWindow: zu schliessendes Fenster verstecken (Optional)
    • Unload_CloseDownWindow: zu schliessendes Fenster entladen (Optional)
    • bShowModal: Neues Fenster modal anzeigen

    Beispiel:

    Call OpenNextWindow(Form2, Me, False, True)

    Wirkung:
    Das nächste Fenster (Form2) wird geöffnet, das derzeitige Fenster wird entladen.

    Hinweis:
    Die Fenster können bei dieser Lösung auch zur Laufzeit verändert (kleiner oder gösser gezogen) werden, es funktioniert immer.

    Nachfolgenden Code bitte in ein Modul einfügen (basFensterPositionen.bas):

    Option Explicit
     
    ' Mittlere horizontale Position eines Fensters
    Public MiddleLeft
     
    ' Mittlere vertikale Position eines Fensters
    Public MiddleTop
    ' Prozedur zum Synchronisieren 
    ' der Fensterpositionen
    ' (Wenn ein Fenster geschlossen wird, wird 
    ' das nächste mittig an dieser Position geöffnet)
    ' 
    ' Aufruf-Beispiel:
    ' Call OpenNextWindow(Form2, frmMain, True)
    ' 
    ' Argumente:
    ' OpenUpWindow:           das zu öffnende Fenster
    ' CloseDownWindow:        das zu schliessende Fenster
    ' Hide_CloseDownWindow:   zu schliessendes Fenster 
    '                         verstecken (Optional)
    ' Unload_CloseDownWindow: zu schliessendes Fenster 
    '                         entladen (Optional)
    ' bShowModal:             Neues Fenster modal anzeigen
    Public Sub OpenNextWindow(OpenUpWindow As Form, _
      CloseDownWindow As Form, _
      Optional Hide_CloseDownWindow As Boolean, _
      Optional Unload_CloseDownWindow As Boolean, _
      Optional bShowModal As Boolean = False)
     
      ' Fenstermitte des zu schliessenden Fensters 
      ' übergeben
      With CloseDownWindow
        MiddleLeft = .Left + (.Width / 2)
        MiddleTop = .Top + (.Height / 2)
      End With
     
      With OpenUpWindow
        ' zu öffnendes Fenster positionieren
        .Left = MiddleLeft - (.Width / 2)
        .Top = MiddleTop - (.Height / 2)
     
        ' absichern, dass das zu öffnende Fenster nicht zu weit
        ' über den Desktoprand gerät.
        If .Left + .Width - 2000 < 0 Then .Left = -.Width + 2000
        If .Top < 0 Then .Top = 0
        If .Left + 2000 > Screen.Width Then .Left = Screen.Width - 2000
        If .Top + 2000 > Screen.Height Then .Top = Screen.Height - 2000
     
        ' zu öffnendes Fenster öffnen/zeigen
        If bShowModal Then
          .Show vbModal
        Else
          .Show
     
          ' zu schliessendes Fenster verstecken oder entladen
          If Hide_CloseDownWindow = True Then CloseDownWindow.Hide
          If Unload_CloseDownWindow = True Then Unload CloseDownWindow
        End If
      End With
    End Sub
    ' Prüfen, ob eine bestimmte Form geladen und
    ' sichtbar ist
    Public Function FormIsVisible(sName As String) As Boolean
      Dim oForm As Form
     
      For Each oForm In Forms
        If oForm.Name = sName Then
          FormIsVisible = (oForm.Visible = True)
          Exit For
        End If
      Next
    End Function

    Beispiel:
    Benötigt werden 3 Formen (frmMain, Form2, Form3) mit jeweils einen CommandButton (Command1).

    Code in Form 1 (frmMain):

    Private Sub Form_Load()
      ' Position des Hauptfensters aus der Registry einlesen
      MiddleLeft = GetSetting("FensterPosBeispiel", "Position", _
        "MiddleLeft", Screen.Width / 2)
      MiddleTop = GetSetting("FensterPosBeispiel", "Position", _
        "MiddleTop", Screen.Height / 2)
     
      ' Position zuweisen
      frmMain.Left = MiddleLeft - (frmMain.Width / 2)
      frmMain.Top = MiddleTop - (frmMain.Height / 2)
    End Sub
    Private Sub Command1_Click()
      ' Nächstes Fenster über Button aufrufen
      Call OpenNextWindow(Form2, frmMain, True)
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
      ' Position ermitteln
      MiddleLeft = frmMain.Left + (frmMain.Width / 2)
      MiddleTop = frmMain.Top + (frmMain.Height / 2)
     
      ' Position des Hauptfensters in die Registry schreiben
      SaveSetting "FensterPosBeispiel", "Position", "MiddleLeft", MiddleLeft
      SaveSetting "FensterPosBeispiel", "Position", "MiddleTop", MiddleTop
    End Sub

    Code in Form 2:

    ' Form 3 über Button aufrufen
    Private Sub Command1_Click()
      Call OpenNextWindow(Form3, Form2, , True)
    End Sub
    ' Form 3 beim Entladen von Form2 aufrufen
    Private Sub Form_Unload(Cancel As Integer)
      If FormIsVisible("Form3") = False Then
        Call OpenNextWindow(Form3, Form2)
      End If
    End Sub

    Code in Form 3:

    ' Form 2 über Button aufrufen
    Private Sub Command1_Click()
      Call OpenNextWindow(Form2, Form3, , True)
    End Sub
    ' Hauptfenster beim Entladen von Form 3 aufrufen
    Private Sub Form_Unload(Cancel As Integer)
      If FormIsVisible("Form2") = False Then
        Call OpenNextWindow(frmMain, Form3, , True)
      End If
    End Sub

    Dieser Tipp wurde bereits 13.185 mal aufgerufen.

    Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

    Über diesen Tipp im Forum diskutieren
    Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

    Neue Diskussion eröffnen

    nach obenzurück


    Anzeige

    Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
    (einschl. Beispielprojekt!)

    Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
    - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
    - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
    Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
     
       

    Druckansicht Druckansicht Copyright ©2000-2017 vb@rchiv Dieter Otter
    Alle Rechte vorbehalten.
    Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel