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

https://www.vbarchiv.net
Rubrik: Oberfläche · Sonstiges   |   VB-Versionen: VB4, VB5, VB601.09.01
Größenänderung von Controls zur Laufzeit

Mit wenigen Zeilen Code lassen sich (fast) beliebige Controls zur Laufzeit per Maus in ihrer Größe ändern.

Autor:   Dieter OtterBewertung:  Views:  21.863 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wie lässt sich z.B. eine PictureBox so modifizieren, dass der Benutzer (also zur Laufzeit) die Möglichkeit hat die PicturBox zu selektieren und dann mit der Maus die Größe zu verändern? Also so ähnlich wie im Entwurfsmodus innerhalb der VB-IDE.

Mit reinen VB-Boardmitteln ist das leider nicht möglich. Aber mit ein paar WinAPI-Funktionen und einem kleinen gewussten Tricks!

Wenn man das Objekt mit einem dicken Fensterrahmen ausstattet, so lässt sich das Objekt dann automatisch - ohne jegliches weiteres Zutun - in seiner Größe verändern. Das einzige, worum man sich kümmern muss, ist das Setzen/Entfernen des dicken Rahmens = Ein/Ausschalten der Größenänderung...

' zunächst die benötigten 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 Declare Function SetWindowPos Lib "user32" ( _
  ByVal hwnd As Long, _
  ByVal hWndInsertAfter As Long, _
  ByVal x As Long, _
  ByVal y As Long, _
  ByVal cx As Long, _
  ByVal cy As Long, _
  ByVal wFlags As Long) As Long 
 
Private Const SWP_NOSIZE = &H1 
Private Const SWP_NOZORDER = &H4 
Private Const SWP_NOMOVE = &H2 
Private Const SWP_DRAWFRAME = &H20 
Private Const GWL_STYLE = (-16) 
Private Const WS_THICKFRAME = &H40000 
 
' Ermöglicht die Größe eines Objekts zur Laufzeit zu ändern 
' 
' bStatus = True, Größenänderung einschalten 
' bStatus = False, Größenänderung abschalten 
' =====================================================
Public Sub DoResize(hWndParent As Long, _ 
  hWndObject As Long, ByVal bStatus As Boolean) 
 
  Dim Result As Long 
 
  Result = GetWindowLong(hWndObject, GWL_STYLE) Or _ 
    WS_THICKFRAME 
  If Not bStatus Then _ 
    Result = Result - WS_THICKFRAME 
 
  SetWindowLong hWndObject, GWL_STYLE, Result
  SetWindowPos hWndObject, hWndParent, 0, 0, 0, 0, _ 
    SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or _ 
    SWP_DRAWFRAME 
End Sub

Am besten ist es, wenn man den gesamten obigen Code in ein Modul "packt".

Um das nachfolgende Beispiel zu testen, plazieren Sie eine PictureBox auf die Form und irgendwo daneben einen CommandButton. Beim ersten Klicken auf den CommandButton wird die Größenänderung eingeschaltet, d.h. jetzt kann die Objektgröße verändert werden. Durch einen nochmaligen Klick auf den CommandButton wird die Größenänderung ausgeschaltet.

' Größen-Änderung ein/ausschalten
Private Sub Command1_Click() 
  With Command1 
    Select Case .Tag 
      Case "Resize" 
        .Tag = "" 
        DoResize Me.hwnd, Picture1.hwnd, False 
      Case Else 
        .Tag = "Resize" 
        DoResize Me.hwnd, Picture1.hwnd, True 
    End Select 
  End With 
End Sub

Der Code funktioniert natürlich auch mit einer ListBox oder einer TextBox - Voraussetzung ist eben, dass das Control eine hWnd-Eigenschaft besitzt.
 



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.