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 09.01.2000

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

Zurück...


Anzeige

(-hg) mailto:hg_topmost@aboutvb.de

Sich vorzudrängeln ist ja nicht gerade die feine Art. Doch für Fenster bzw. Forms gelten nicht unbedingt solche Feinheiten der gesellschaftlichen Etikette. Hier kann es durchaus erwünscht sein, dass ein Form vor allen übrigen Forms und Fenstern im Vordergrund stehen bleibt, auch wenn es nicht mehr das aktive Fenster ist. Mit der API-Funktion MSDN-Library - SetWindowPosSetWindowPos sorgen Sie dafür, dass ein Form immer im Vordergrund bleibt oder sich wieder in die von Windows selbst verwaltete Reihenfolge der Fenster einreiht.

Private Declare Function SetWindowPos Lib "User32" _
 (ByVal hWnd As Long, ByVal Order As Long, ByVal X As Long, _
 ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, _
 ByVal Flags As Long) As Long

Public Function SetTopMost(AnyForm As Form, _
 Optional ByVal State As Boolean = True, _
 Optional ByVal Activate As Boolean = True) As Boolean
  Dim nFlags As Long
  Dim nTopMode As Long
  
  Const SWP_NOMOVE = 2
  Const SWP_NOSIZE = 1
  Const HWND_TOPMOST = -1
  Const HWND_NOTOPMOST = -2
  Const SWP_NOACTIVATE = &H10

  nFlags = SWP_NOMOVE Or SWP_NOSIZE
  If Not Activate Then
    nFlags = nFlags Or SWP_NOACTIVATE
  End If
  Select Case State
    Case True
      nTopMode = HWND_TOPMOST
    Case False
      nTopMode = HWND_NOTOPMOST
  End Select
  SetTopMost = _
   CBool(SetWindowPos(AnyForm.hWnd, nTopMode, 0, 0, 0, 0, nFlags))
End Function

Die Funktion SetTopMost setzt ein Form vor alle anderen Fenster und Forms in den Vordergrund, auch wenn es nicht das aktive Fenster ist

Die Parameter-Kette von SetWindowPos sieht auf den ersten Blick ein wenig erschreckend lang aus. Da wir aber nur drei Parameter benötigen, ist das halb so wild. Im ersten Parameter übergeben Sie das Fenster-Handle des in den Vordergrund zu setzenden bzw. wieder einzureihenden Forms und im zweiten den gewünschten Status. Über den letzten Parameter, den Flags, wird festgelegt, ob das Form zugleich aktiviert werden soll. Die übrigen Parameter - es sind Positions- und Größenangaben - werden bei anderen Verwendungen der Funktion benötigt. Wir brauchen sie hier nicht und übergeben daher jeweils eine Null. Dass diese Parameter ignoriert werden sollen, wird Windows im Flags-Parameter über die Verknüpfung der Konstanten SWP_NOMOVE und SWP_NORESIZE übermittelt.

Da der Aufruf von SetWindowsPos für diesen speziellen Zweck aber doch nicht ganz so trivial ist, verpacken wir ihn in die Funktion SetTopMost. Dieser Funktion brauchen Sie in den Parametern nur noch das betroffene Form, den gewünschten Status und die Angabe, ob das Form aktiviert werden soll, zu übergeben. Die beiden letztgenannten Parameter sind optional und deren Vorgabewert ist für beide True. Um ein Form in den Vordergrund zu befördern und zugleich zu aktivieren, brauchen Sie also nur das betreffende Form anzugeben:

SetTopMost MeineForm

Der Rückgabewert der Funktion teilt Ihnen mit, ob der Aufruf der API-Funktion erfolgreich war. Sie können ihn ignorieren, wenn Ihnen die Erfolgsmeldung egal ist.

Beachten Sie, dass durchaus mehrere Forms bzw. Fenster den Vordergrundstatus erhalten können. Windows verwaltet diese auf TopMost gesetzten Fenster ähnlich der normalen Fensterreihung - das jeweils zuletzt aktivierte Fenster steht im Vordergrund. Alle diese Fenster stehen jedoch immer vor der normalen Fensterreihung.


Beispiel-Projekt TopMostTest mit Modul modTopMost (topmost.zip - ca. 2,1 KB)






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