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 02.02.2000

Diese Seite wurde zuletzt aktualisiert am 02.02.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 den 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...

Bildschirm <> Desktop

Zurück...


Anzeige

(-hg) mailto:hg_workarea@aboutvb.de

Sicher werden Sie auch schon festgestellt haben, dass die Bildschirmgröße, die das MSDN Library - VB ScreenScreen-Objekt in den Eigenschaften Width und Height zur Verfügung stellt, sich tatsächlich auf die absolute Bildschirmgröße bezieht. An den Bildschirmrändern angedockte Windows-Taskbars bleiben unberücksichtigt.

Die effektive freie Arbeitsfläche, also die Größe des Desktops, liefert die API-Funktion MSDN Library - API SystemParametersInfoSystemParametersInfo in Verbindung mit der Kennung SPI_ GETWORKAREA. Sie erhalten die Größe in Pixels in einem bei API-Funktionen üblichen Rechteck.

Zur Umrechnung in Twips multiplizieren Sie die horizontalen Elemente des Rechtecks (Left und Right) mit Screen.TwipsPerPixelX, die vertikalen Elemente (Top und Bottom) mit Screen.TwipsPerPixelY (Verwenden Sie bitte die beiden formal unterschiedlichen Umrechnungsfaktoren für die vertikale und horizontale Richtung - auch wenn die beiden Faktoren immer gleich zu sein scheinen, ist das nicht für jeden möglichen Bildschirm garantiert!). Um die in Visual Basic gebräuchlichere Breite (Width) und Höhe (Height) zu erhalten, müssen Sie jeweils die Differenz zwischen den Elementen Bottom des Rechtecks (Unterkante) und Top bzw. Right (rechte Kante) und Left berechnen.

Die Hilfsfunktion GetWorkArea besorgt für Sie die Umsetzung des Rechtecks. Die Werte werden bereits automatisch in Twips umgerechnet. Setzen Sie dagegen den optionalen Parameter Twips gleich False, erhalten Sie die Werte in der originalen Maßeinheit Pixels.

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

Private Declare Function SystemParametersInfo Lib "user32" _
 Alias "SystemParametersInfoA" (ByVal uAction As Long, _
 ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) _
 As Long
Private Const SPI_GETWORKAREA& = 48

Public Sub GetWorkArea(Left As Long, Top As Long, Width As Long, _
 Height As Long, Optional ByVal Twips As Boolean = True)
  Dim nRect As RECT

  SystemParametersInfo SPI_GETWORKAREA, 0&, nRect, 0&
  With nRect
    If Twips Then
      .Left = .Left * Screen.TwipsPerPixelX
      .Top = .Top * Screen.TwipsPerPixelY
      .Right = .Right * Screen.TwipsPerPixelX
      .Bottom = .Bottom * Screen.TwipsPerPixelY
    End If
    Left = .Left
    Top = .Top
    Width = .Right - .Left
    Height = .Bottom - .Top
  End With
End Sub

Ein Aufruf von GetWorkArea sähe beispielsweise so aus:

Private Sub Command1_Click()
  Dim nLeft As Single
  Dim nTop As Single
  Dim nWidth As Single
  Dim nHeight As Single

  GetWorkArea nLeft, nTop, nWidth, nHeight
  Me.Cls
  Me.Print nLeft, nTop, nWidth, nHeight
End Sub

Obwohl Sie ein Form mit

With Form
  .Move (Screen.Width - .Width) \ 2, (Screen.Height - .Height) \ 2
End With

bezogen auf den ganzen Bildschirm zentrieren können, sollten Sie es besser in der Arbeitsfläche zentrieren. Die Hilfs-Funktion CenterFormInWorkArea erledigt das für Sie - Sie brauchen ihr lediglich das betreffende Form zu übergeben:

Public Sub CenterFormInWorkArea(Form As Form)
  Dim nRect As RECT
  Dim nWidth As Single
  Dim nHeight As Single
  
  SystemParametersInfo SPI_GETWORKAREA, 0&, nRect, 0&
  With nRect
    .Left = .Left * Screen.TwipsPerPixelX
    .Top = .Top * Screen.TwipsPerPixelY
    nWidth = (.Right - .Left) * Screen.TwipsPerPixelX
    nHeight = (.Bottom - .Top) * Screen.TwipsPerPixelY
  End With
  With Form
    .Move nRect.Left + ((nWidth - .Width) \ 2), _
     nRect.Top + ((nHeight - .Height) \ 2)
  End With
End Sub

Die Hilfs-Funktion MoveFormToWorkArea positioniert ein Form so dass es exakt die Arbeitsfläche bedeckt.

Public Sub MoveFormToWorkArea(Form As Form)
  Dim nRect As RECT
  Dim nWidth As Single
  Dim nHeight As Single
  
  SystemParametersInfo SPI_GETWORKAREA, 0&, nRect, 0&
  With nRect
    .Left = .Left * Screen.TwipsPerPixelX
    .Top = .Top * Screen.TwipsPerPixelY
    nWidth = (.Right - .Left) * Screen.TwipsPerPixelX
    nHeight = (.Bottom - .Top) * Screen.TwipsPerPixelY
    Form.Move .Left, .Top, nWidth, nHeight
  End With
End Sub

Die folgenden weiteren Hilfs-Funktionen platzieren ein Form an der linken, oberen, rechten oder unteren Kante der Arbeitsfläche, ohne seine Größe zu verändern:

Public Sub MoveFormToLeftOfWorkArea(Form As Form)
  Dim nRect As RECT
    
  SystemParametersInfo SPI_GETWORKAREA, 0&, nRect, 0&
  Form.Left = nRect.Left * Screen.TwipsPerPixelX
End Sub

Public Sub MoveFormToTopOfWorkArea(Form As Form)
  Dim nRect As RECT
    
  SystemParametersInfo SPI_GETWORKAREA, 0&, nRect, 0&
  Form.Top = nRect.Top * Screen.TwipsPerPixelY
End Sub

Public Sub MoveFormToRightOfWorkArea(Form As Form)
  Dim nRect As RECT
    
  SystemParametersInfo SPI_GETWORKAREA, 0&, nRect, 0&
  With Form
    .Left = nRect.Right * Screen.TwipsPerPixelX - .Width
  End With
End Sub

Public Sub MoveFormToBottomtOfWorkArea(Form As Form)
  Dim nRect As RECT
    
  SystemParametersInfo SPI_GETWORKAREA, 0&, nRect, 0&
  With Form
    .Top = nRect.Bottom * Screen.TwipsPerPixelY - .Height
  End With
End Sub


Modul modWorkArea (modWorkArea.bas - ca. 3 KB)


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

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