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 10.11.1999

Diese Seite wurde zuletzt aktualisiert am 10.11.1999
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicAddIns 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 zur AVB-Web-Site, Kontakt und Impressum

Zurück...

Zurück...

(-hg) mailto:hg_formmoveable@aboutvb.de

Über die Eigenschaft Moveable eines Forms können Sie festlegen, ob der Anwender das Form mit der Maus verschieben kann. Leider können Sie diese Eigenschaft nur zur Entwicklungszeit setzen.

Damit Sie dies auch wahlweise zur Laufzeit festlegen können, müssen Sie auf API-Funktionen zurückgreifen. Eine Möglichkeit wäre, das Form zu subclassen, so die Nachricht MSDN-Library - Nachricht WM_WINDOWPOSCHANGINGWM_WINDOWPOSCHANGING abzufangen und in den mitgelieferten Positionswerten jegliche Änderung zu verwerfen.

Einfacher geht es über eine kleine Manipulation des Systemmenüs des Forms. Wird aus dem Systemmenü der Menüpunkt "Verschieben" entfernt, kann das Form auch nicht mehr mit der Maus verschoben werden.

Dazu ermitteln Sie mittels der API-Funktion MSDN-Library - API GetSystemMenuGetSystemMenu das Menü-Handle des Systemmenüs und entfernen über die API-Funktion MSDN-Library - API RemoveMenuRemoveMenu den Menüpunkt.

Für den umgekehrten Weg, um das Form wieder verschiebbar zu machen, genügt ein Aufruf von GetSystemMenu, diesmal mit dem Wert True im zweiten Parameter. Dadurch wird das Systemmenü wieder in seinen Ursprungszustand zurück versetzt. Der einzige kleine Haken hierbei ist, dass dabei auch alle weiteren Änderungen, die Sie vielleicht aus anderen Gründen noch am Systemmenü vorgenommen haben, rückgängig gemacht werden - Sie müssen diese Änderungen danach erneut vornehmen.

Im UserControl FormMoveable legen Sie über die Eigenschaft Moveable die Verschiebbarkeit des Forms fest, auf dem das Control platziert ist. Die Eigenschaft Moveable ist als voreingestellte Eigenschaft definiert, so dass Sie auf sie auch alleine über den Control-Namen im Form zugreifen können. Die Darstellung des Erscheinungsbildes des zur Laufzeit unsichtbaren UserControls erfolgt auf die in Mehr scheinen als sein"Mehr scheinen als sein" gezeigte Weise.

Private Declare Function GetSystemMenu Lib "user32" _
 (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" _
 (ByVal hMenu As Long, ByVal nPosition As Long, _
 ByVal wFlags As Long) As Long

Private Const MF_BYCOMMAND = &H0&
Private Const SC_MOVE = &HF010&

Private pMoveable As Boolean

Public Property Get Moveable() As Boolean
  Moveable = pMoveable
End Property

Public Property Let Moveable(ByVal New_Moveable As Boolean)
  pMoveable = New_Moveable
  Select Case pMoveable
    Case False
      RemoveMenu GetSystemMenu(UserControl.Parent.hWnd, False), _
       SC_MOVE, MF_BYCOMMAND
    Case True
      GetSystemMenu UserControl.Parent.hWnd, True
  End Select
  PropertyChanged "Moveable"
End Property

Private Sub UserControl_Initialize()
  pMoveable = True
End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  Me.Moveable = PropBag.ReadProperty("Moveable", True)
End Sub

Private Sub UserControl_Resize()
  Static sInProc As Boolean
  
  If sInProc Then
    Exit Sub
  Else
    sInProc = True
  End If
  UserControl.Size 32 * Screen.TwipsPerPixelX, _
   32 * Screen.TwipsPerPixelY
  sInProc = False
End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  PropBag.WriteProperty "Moveable", pMoveable, True
End Sub

Über das Steuerelement FormMoveable können Sie zur Laufzeit festlegen, ob der Anwender ein Form verschieben kann

Wenn Sie statt eines bequemen Steuerelements lieber einen Prozeduraufruf in einem Modul hätten, finden Sie diese Variante in Modul-Version: Verschieb' mich doch! - IVerschieb' mich doch! - I


Das Projekt FormMoveableOCX (formmoveable.zip - ca. 5,3 KB)

ActiveX-Control als Setup (ohne VB 6-Runtime!) (formmoveable.zip - ca. 270 KB)



Komponenten-Übersicht

Zum Seitenanfang

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

Zum Seitenanfang

Zurück...

Zurück...