vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Ein kleiner Trick - und dann geht es! 
Autor: ModeratorDieter (Moderator)
Datum: 24.08.01 14:16

Hi Marlis,

über einen kleinen Trick lässt sich Dein Vorhaben realisieren.
Wenn man das Objekt mit einem dicken Fensterrahmen ausstattet, so lässt sich das Objekt dann automatisch - ohne Dein weiteres Zutun - in seiner Größe verändern.

Das einzige, worum Du Dich kümmern musst, ist das Setzen/Entfernen des Dicken Rahmens = Ein/Ausschalten der Größenänderung...

<code><font color=green>' zunächst die benötigten API-Deklarationen</font>
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
 
<font color=green>' Ermöglicht die Größe eines Objekts zur Laufzeit zu ändern
'
' bStatus = True, Größenänderung einschalten
' bStatus = False, Größenänderung abschalten
' =====================================================</font>
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</code>
Am besten ist es, wenn Du den gesamten obigen Code in Modul "packst".

Um das Beispiel zu testen, plazierst Du 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.

<code><font color=green>' Größen-Änderung ein/ausschalten</font>
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</code>
Viel Spaß mit dem Code.
Cu
Dieter
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Resize zur Laufzeit79Marlis24.08.01 12:00
Ein kleiner Trick - und dann geht es!341ModeratorDieter24.08.01 14:16
Re: Ein kleiner Trick - und dann geht es!40Marlis27.08.01 07:58

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel