Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Objekte / Form / Maße

Echte Maße eines min./max. Formulars

Einleitung

Die Width- und Height-Eigenschaften eines Formulars geben die Größe (äußeren Abmessungen) in Twips zurück, allerdings immer abhängig vom aktuellen WindowState.

Soll nun z.B. beim Beenden der Anwendung die zum "Wiederherstellen" benötigte Formulargröße gespeichert werden, so werden für ein minimiertes Formular viel zu kleine Werte zurück gegeben, für ein maximiertes zu große.

Um an die "echten" Werte zu kommen, müßte man WindowState = vbNormal setze, was aber zu einem deutlich sichtbaren aufflackern des Formulars führt...

Der unten gezeigte Code zeigt eine andere Lösung auf: Es werden zwei neue Formular-Eigenschaften (RealWidth und RealHeight) zur Verfügung gestellt, welche unabhängig vom aktuellen WindowState die gewünschten Werte zurückliefern.

Beispiel

Mit folgendem Code wird beim Schließen eines Formulars die aktuelle "echte" Größe (sowie der atuelle Dartsellungsmodus) in die Registry geschrieben:

Private Sub Form_Unload(Cancel As Integer)
  SaveSetting App.EXEName, Name, "Width", RealWidth
  SaveSetting App.EXEName, Name, "Height", RealHeight
  SaveSetting App.EXEName, Name, "State", WindowState
End Sub

Beim nächsten Laden des Formulars können dann diese gespeicherten Werte zum Wiederherstellen der Größe verwendet werden:

Private Sub Form_Load()
  Width = GetSetting(App.EXEName, Name, "Width", Width)
  Height = GetSetting(App.EXEName, Name, "Height", Height)
  WindowState = GetSetting(App.EXEName, Name, "State", WindowState)
End Sub

Code / Quelltext

Durch Verwendung Formular-eigener Variablen wird es möglich, bei jedem Resize die zum Wiederherstellen nötigen Werte abzulegen. Auf diese Werte kann dann (nur lesend) via Property-Prozeduren zugegriffen werden:

'Im Deklarationsteil des Formulars:
Private pRealHeight As Long
Private pRealWidth As Long

'Read-Only Eigenschaften:
Public Property Get RealHeight() As Long
  RealHeight = pRealHeight
End Property

Public Property Get RealWidth() As Long
  RealWidth = pRealWidth
End Property

'Variablen nur im Normal-Zustand aktualisieren:
Private Sub Form_Resize()
  If WindowState = vbNormal Then
    pRealHeight = Height
    pRealWidth = Width
  End If
End Sub

Ebenso könnte auch die Formular-Position (Left- und Top-Eigenschaften) gesichert werden.

© Jost Schwider, 29.05.2002-29.05.2002 - http://vb-tec.de/formmass.htm