vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Oberfläche · Fenster   |   VB-Versionen: VB4, VB5, VB605.02.04
Rahmenlose Form mit voller Funktionalität (GES)

Dieser Code zeigt, wie sich eine Rahmenlose Form (BorderStyle = 0) im 3D-Look darstellen lässt mit Icon im SystemTray usw.

Autor:   Guido EisenbeisBewertung:  Views:  19.300 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Dies ist ein Code, mit dem man ein beliebiges Formular sozusagen mit "Borderstyle = 0" anzeigen kann und mit einem 3D-Rahmen ausstattet.

Das besondere daran ist, dass die SystemMenü-Eigenschaften des Formulars erhalten bleiben. Das bedeutet, dass das Formular auch in der Taskbar "ganz normal" bedient werden kann. Entweder über das Kontextmenü oder indem man es einfach durch Anklicken (in der Taskbar) minimiert und wiederherstellt. (Versuchen Sie das mal bei einem "normalen" Fenster mit Borderstyle = 0 ! *smile)

Fügen Sie nachfolgenden Code in ein Modul ein.

' ===================================================================
'   Rahmenlose Form mit voller Funktionalität (GES)
' 
' 
' Autor:
' Gudio Eisenbeis Software (GES), guidoeisenbeis@web.de, 2003-12-01
' 
' Basierend auf dem Tipp "Fenster ohne Titelzeile"
' von Dieter Otter (25.08.2003)
' ===================================================================
 
Option Explicit
 
' benötigte API-Deklarationen
Private Declare Function GetWindowLong Lib "user32" _
  Alias "GetWindowLongA" ( _
  ByVal hwnd As Long, _
  ByVal nIndex As Long) As Long
 
Private Declare Function SetWindowLong Lib "user32" _
  Alias "SetWindowLongA" ( _
  ByVal hwnd As Long, _
  ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long
 
Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Const WS_BORDER = &H800000
Public Sub MakeNoBorder_And_3D(ByVal fForm As Form)
  Dim nStyle As Long 'Fensterstil
 
  With fForm
    ' Formgrösse anpassen
    .Width = .ScaleWidth
    .Height = .ScaleHeight
 
    ' aktuellen Fensterstil emitteln
    nStyle = GetWindowLong(.hwnd, GWL_STYLE)
 
    ' Titelleiste entfernen
    nStyle = nStyle And Not WS_CAPTION
 
    ' Neuen Fensterstil setzen
    SetWindowLong .hwnd, GWL_STYLE, nStyle
  End With
End Sub
Public Sub MoveControl(ctrControl As Object, Button As Integer, _
  Shift As Integer, X As Single, Y As Single)
 
  Static OldX As Single
  Static OldY As Single
 
  If Not Button = 1 Then
    OldX = X
    OldY = Y
  Else 
    ' Wenn rechte Maus-Taste gedrückt, dann Elemente verschieben.
    ctrControl.Left = ctrControl.Left + (X - OldX)
    ctrControl.Top = ctrControl.Top + (Y - OldY)
  End If
End Sub

Im Form_Load-Ereignis wird die Form "umgewandel":

Private Sub Form_Load()
  ' Form1 rahmenlos machen und 3D-Effekt aktivieren
  Call MakeNoBorder_And_3D(Me)
End Sub

Und damit die Form zur Laufzeit mit der Maus verschoben werden kann, platzieren Sie beispielsweise ein beliebiges Control auf die Form und fügen im MouseMove-Ereignis folgenden Aufruf ein:

Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, _
  X As Single, Y As Single)
 
  ' Verschieben der rahmenlosen Form
  Call MoveControl(Me, Button, Shift, X, Y)
End Sub

Eine andere Möglichkeit wäre, die Form beim gedrückter rechter Maustaste auf die Form selbst zu verschieben. Aber auch das ist kein Problem. Einfach die MoveControl-Prozedur im MouseMove-Ereignis einfügen

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
  X As Single, Y As Single)
 
  ' Verschieben der rahmenlosen Form
  Call MoveControl(Me, Button, Shift, X, Y)
End Sub



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.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.