ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 04.04.2000

Diese Seite wurde zuletzt aktualisiert am 04.04.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für IE, Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Position und Größe retten

Zurück...


Anzeige

(-hg) mailto:hg_formsettings@aboutvb.de

Sie können beim Schließen eines Forms dessen aktuelle Position in der Windows-Registrierung ablegen. Beim nächsten Laden können Sie die abgelegten Werte einlesen und so das Form an gleicher Stelle wieder erscheinen lassen. Sie dazu auch den Wert der WindowState-Eigenschaft ablegen, um das Form gegebenenfalls beim Laden gleich wieder maximiert oder minimiert erscheinen zu lassen.

Der Nachteil dabei ist allerdings, dass bei einem maximierten oder minimierten Form beim Schließen die Werte eben dieser maximierten oder minimierten Position in der Registrierung abgelegt würden. Würde so ein maximiertes Form nach dem Laden und der Maximierung entsprechend der Speicherung wieder normal angezeigt, würde die normale Position der maximierten Position und Größe entsprechen. Um die tatsächliche normale Größe und Position ablegen zu können, müssten Sie eigentlich diese Werte vorsorglich nach jedem Verschieben des Forms, oder zumindest vor jedem Wechsel von der normalen in die maximierte oder minimierte Position festhalten, um sie beim Schließen des Forms korrekt ablegen zu können.

Einen bequemeren Ausweg liefert die API-Funktion MSDN Library - API GetWindowPlacementGetWindowPlacement. Über diese Funktion können Sie jederzeit die normale Position und Größe eines Forms erfahren, egal in welchem Anzeigezustand es sich gerade befinden mag. Sie übergeben der Funktion das Fenster-Handle (hWnd-Eigenschaft) des betreffenden Forms und eine benutzerdefinierte Variable des Typs MSDN Library - API WINDOWPLACEMENTWINDOWPLACEMENT, deren Byte-Länge Sie zuvor im ersten Element der Variablen angegeben haben. Diese Byte-Länge erhalten Sie über die VB-Fuktion Len. Das Element rcNormalPosition dieser Variablen, das selbst wiederum eine benutzerdefinierte Variable des Typs RECT ist, enthält nach dem Aufruf die gewünschten Angaben.

Die Hilfs-Funktion GetFormNormalSizePos vereinfacht den Aufruf für ein in ihrem ersten Parameter übergebenes, beliebiges Form und gibt in den weiteren Parametern die Werte für Left, Top, Width und Height gleich VB-gerecht in Twips umgerechnet zurück.

Private Type POINTAPI
  X As Long
  Y As Long
End Type

Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Private Type WINDOWPLACEMENT
  Length As Long
  flags As Long
  showCmd As Long
  ptMinPosition As POINTAPI
  ptMaxPosition As POINTAPI
  rcNormalPosition As RECT
End Type

Private Declare Function GetWindowPlacement Lib "user32" _
(ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long

Public Function GetFormNormalSizePos(Form As Form, _
 Left As Single, Top As Single, Width As Single, _
 Height As Single)

  Dim nWindowPlacement As WINDOWPLACEMENT
  
  With nWindowPlacement
    .Length = Len(nWindowPlacement)
    GetWindowPlacement Form.hwnd, nWindowPlacement
    With .rcNormalPosition
      Left = .Left * Screen.TwipsPerPixelX
      Top = .Top * Screen.TwipsPerPixelY
      Width = (.Right - .Left) * Screen.TwipsPerPixelX
      Height = (.Bottom - .Top) * Screen.TwipsPerPixelY
    End With
  End With
End Function

Mit Hilfe der beiden folgenden Prozeduren GetFormSettings und SaveFormSettings automatisieren Sie die Ablage der Position, der Größe und des Anzeigestatus eines Forms in der Window-Registrierung und das Wiederherstellen nach dem Laden. GetFormSettings rufen Sie im Form_Load-Ereignis mit der Angabe der Schlüssel auf, und SaveFormSettings entsprechend im Form_Unload-Ereignis.

Public Sub GetFormSettings(Form As Form, AppName As String, _
 Section As String, -
 Optional ByVal RestoreWindowState As Boolean = True)

  Dim nLeft As Single
  Dim nTop As Single
  Dim nWidth As Single
  Dim nHeight As Single
  
  nWidth = CSng(GetSetting(AppName, Section, "Width", 0))
  With Form
    If nWidth Then
      nHeight = CSng(GetSetting(AppName, Section, "Height", 0))
      nLeft = CSng(GetSetting(AppName, Section, "Left", 0))
      nTop = CSng(GetSetting(AppName, Section, "Top", 0))
      .Move nLeft, nTop, nWidth, nHeight
    End If
    If RestoreWindowState Then
      .WindowState = CInt(GetSetting(AppName, Section, "WindowState", 0))
    End If
  End With
End Sub

Public Sub SaveFormSettings(Form As Form, AppName As String, _
 Section As String)

  Dim nWindowPlacement As WINDOWPLACEMENT
  
  With nWindowPlacement
    .Length = Len(nWindowPlacement)
    GetWindowPlacement Form.hwnd, nWindowPlacement
    With .rcNormalPosition
      SaveSetting AppName, Section, "Left", _
       .Left * Screen.TwipsPerPixelX
      SaveSetting AppName, Section, "Top", _
       .Top * Screen.TwipsPerPixelY
      SaveSetting AppName, Section, "Width", _
       (.Right - .Left) * Screen.TwipsPerPixelX
      SaveSetting AppName, Section, "Height", _
       (.Bottom - .Top) * Screen.TwipsPerPixelY
    End With
  End With
  SaveSetting AppName, Section, "WindowState", Form.WindowState
End Sub

Modul modFormSettings (modFormSettings.bas - ca. 2,7 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer