• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Formulier Minimaal, Maximaal en met Windows Tab

Status
Niet open voor verdere reacties.

Jarodxxx

Gebruiker
Lid geworden
26 nov 2006
Berichten
243
Hallo,

Ik heb op i'net viavia een mogelijkheid gevonden om te minimaliseren naar de taakbalk.

Kan iemand mij helpen aan maximaliseren?
En zodat hij een eventueel ander formulier niet sluit?

Minimaliseren (achter formulier plaatsen):

Code:
Option Explicit

'API functions
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 Declare Function FindWindow Lib "user32" _
                                    Alias "FindWindowA" _
                                    (ByVal lpClassName As String, _
                                     ByVal lpWindowName As String) As Long
Private Declare Function GetActiveWindow Lib "user32.dll" _
                                         () As Long
Private Declare Function SendMessage Lib "user32" _
                                     Alias "SendMessageA" _
                                     (ByVal hWnd As Long, _
                                      ByVal wMsg As Long, _
                                      ByVal wParam As Long, _
                                      lParam As Any) As Long
Private Declare Function DrawMenuBar Lib "user32" _
                                     (ByVal hWnd As Long) As Long


'Constants
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const GWL_EXSTYLE = (-20)
Private Const HWND_TOP = 0
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_HIDEWINDOW = &H80
Private Const SWP_SHOWWINDOW = &H40
Private Const WS_EX_APPWINDOW = &H40000
Private Const GWL_STYLE = (-16)
Private Const WS_MINIMIZEBOX = &H20000
Private Const SWP_FRAMECHANGED = &H20
Private Const WM_SETICON = &H80
Private Const ICON_SMALL = 0&
Private Const ICON_BIG = 1&


Private Sub UserForm_Activate()
    AddIcon    'Add an icon on the titlebar
    AddMinimiseButton   'Add a Minimize button to Userform
    AppTasklist Me    'Add this userform into the Task bar
End Sub

Private Sub AddIcon()
'Add an icon on the titlebar
    Dim hWnd As Long
    Dim lngRet As Long
    Dim hIcon As Long
    hIcon = Sheet1.Image1.Picture.Handle
    hWnd = FindWindow(vbNullString, Me.Caption)
    lngRet = SendMessage(hWnd, WM_SETICON, ICON_SMALL, ByVal hIcon)
    lngRet = SendMessage(hWnd, WM_SETICON, ICON_BIG, ByVal hIcon)
    lngRet = DrawMenuBar(hWnd)
End Sub

Private Sub AddMinimiseButton()
'//Add a Minimize button to Userform
    Dim hWnd As Long
    hWnd = GetActiveWindow
    Call SetWindowLong(hWnd, GWL_STYLE, _
                       GetWindowLong(hWnd, GWL_STYLE) Or _
                       WS_MINIMIZEBOX)
    Call SetWindowPos(hWnd, 0, 0, 0, 0, 0, _
                      SWP_FRAMECHANGED Or _
                      SWP_NOMOVE Or _
                      SWP_NOSIZE)
End Sub

Private Sub AppTasklist(myForm)
'Add this userform into the Task bar
    Dim WStyle As Long
    Dim Result As Long
    Dim hWnd As Long

    hWnd = FindWindow(vbNullString, myForm.Caption)
    WStyle = GetWindowLong(hWnd, GWL_EXSTYLE)
    WStyle = WStyle Or WS_EX_APPWINDOW
    Result = SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, _
                          SWP_NOMOVE Or _
                          SWP_NOSIZE Or _
                          SWP_NOACTIVATE Or _
                          SWP_HIDEWINDOW)
    Result = SetWindowLong(hWnd, GWL_EXSTYLE, WStyle)
    Result = SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, _
                          SWP_NOMOVE Or _
                          SWP_NOSIZE Or _
                          SWP_NOACTIVATE Or _
                          SWP_SHOWWINDOW)
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Application.Visible = True
End Sub

Groeten,

JC
 
Laatst bewerkt:
Wat wil je minimaliseren? Heel Excel? Een werkboek?
 
Een formulier

Hoi,

Dit plaats ik achter een formulier. (vb: userform1)
Dit minimaliseert het al + voegt een tablad op de taakbalk toe.

Ik wil juist ook nog maximaliseren (full screen):-) zodat je het formulier niet buiten beeld kunt slepen.

Groeten,

Jarod
 
Hallo Jarod

Ik heb via een forum een oplossing gekregen om een userform altijd schermvullend weer te geven ongeacht hoe groot je het formulier maakt en niet afhankelijk van de grote van het beeldscherm.

Als bijlage vind je een gestript bestandje hiervan.
 
Popipipo

Hallo,

Bedankt!

Ik gebruik die inderdaad nu ook.
't probleem is dat ik dat niet met een knopje kan doen.

In mijn voorbeeld kan ik wel minimaliseren, maar dus niet maximaliseren.
Ik speur al even 't net af.

Groeten,

Jarod
 
Code:
Private Declare Function FindWindow _
    Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, _
    ByVal lpWindowName As String) 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 Sub UserForm_Initialize()
    Dim hWnd as Long
    hWnd = FindWindow(vbNullString, UserForm1.Caption)
    SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080
End Sub

Deze vond ik net even in 1 van mijn projecten. Je zult hem zelf even in "jouw eigen code" moeten integreren. ;)
 
Hmmm.... vond nog wat:

Code:
Option Explicit

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 FindWindowA Lib "user32" (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
       
Private Const GWL_STYLE As Long = (-16)
Private Const WS_THICKFRAME = &H40000

Dim lFrmWndHdl As Long
Dim lStyle As Long

Private Sub UserForm_Initialize()
    lFrmWndHdl = FindWindowA(vbNullString, Me.Caption)
    lStyle = GetWindowLong(lFrmWndHdl, GWL_STYLE)
    lStyle = lStyle Or WS_THICKFRAME
    SetWindowLong lFrmWndHdl, GWL_STYLE, (lStyle)
End Sub

Je kunt het formulier nu handmatig groter of kleiner maken ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan