Ridurre form a icona



  • Ridurre form a icona
    di Sergio54 data: 13/07/2010

    Vorrei avere su un form in alto a destra dove c'è la x per la chiusura, anche il comando ( - ) per la riduzione



  • di Miglio (utente non iscritto) data: 13/07/2010

    Ciao
    su questo sito vai su tutorials e leggiti "stili di userform" mauro fa un bellisimo esempio di come si può fare quello che chiedi.


    mandi


  • X miglio
    di Sergio54 (utente non iscritto) data: 14/07/2010

    Ti ringrazio per la risposta al mio problema,
    ma non sono riuscito a risolverlo.ho inserito il codice nella form ma non si vedono gli effetti,e se compilo midice sub o funzione non definita e mi evidenzia (getwindowlong)
    se puoi aiutarmi ti ringrazio

     
    Private Sub SetFormStyle()
    
            Dim lStyle As Long
    
            lStyle = GetWindowLong(mhWndForm, GWL_STYLE)
            
            '(1) Crea una finestra senza barra del titolo
            'SetWindowLong mhWndForm, GWL_STYLE, lStyle And Not WS_CAPTION
            '(2) Crea una finestra senza pulsante di chiusura
            'SetWindowLong mhWndForm, GWL_STYLE, lStyle And Not WS_SYSMENU
            '(3) Crea una finestra ridimensionabile
            'SetWindowLong mhWndForm, GWL_STYLE, lStyle Or WS_THICKFRAME
            '(4) Crea una finestra ridimensionabile e riducibile a icona
            SetWindowLong mhWndForm, GWL_STYLE, lStyle _
            Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
    
            'Aggiorno i cambiamenti
            DrawMenuBar mhWndForm
            SetFocus mhWndForm
        End Sub
    



  • di Enzo (utente non iscritto) data: 14/07/2010

    Ciao
    non va inserito nella userform ma in un modulo di classe




  • di Miglio (utente non iscritto) data: 15/07/2010

    Ciao
    inserisci un modulo di classe dall'editor di vba, ci incolli dentro il codice che ha scritto mauro poi nell'evento inizialize del form ci metti il codice sotto.

    fammi sapere mandi
     
    'istanzia un oggetto della classe
    Set FmStile = New modStile
    'assegna la nostra Userform
    Set FmStile.Form = Me
    	


  • Xmigio
    di Sergio54 (utente non iscritto) data: 16/07/2010

    Ciao
    ho fatto tutto ma non funziona, quando compilo midice mi evidenzia new modstile e mi dà errore di compilazione tipo definito dall'utente non definito, fammi sapere dove sbaglio
    grazie

     
    Private Sub UserForm_Click()
    'istanzia un oggetto della classe
    Set FmStile = New modStile
    'assegna la nostra Userform
    Set FmStile.Form = Me
    End Sub



  • di Enzo (utente non iscritto) data: 16/07/2010

    Nel modulo di classe devi copiare tutto questo blocco qui sotto
     
    'Chiamo le API
        Private Declare Function FindWindow Lib "user32" _
        Alias "FindWindowA" _
        (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
        
        'prende lo stile corrente
        Private Declare Function GetWindowLong Lib "user32" _
        Alias "GetWindowLongA" _
        (ByVal hWnd As Long, _
        ByVal nIndex As Long) As Long
    
        'Imposta il nuovo stile
        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 DrawMenuBar Lib "user32" _
        (ByVal hWnd As Long) As Long
    
        Private Declare Function SetFocus Lib "user32" _
        (ByVal hWnd As Long) As Long
        'stile della finestra
        Private Const GWL_STYLE As Long = (-16)
        'stile della finestra esteso
        Private Const GWL_EXSTYLE As Long = (-20)
        'imposta barra del titolo
        Private Const WS_CAPTION As Long = &HC00000
        'imposta barra di chiusura
        Private Const WS_SYSMENU As Long = &H80000
        'imposta finestra ridimensionabile
        Private Const WS_THICKFRAME As Long = &H40000
        'imposta pulsante riduci
        Private Const WS_MINIMIZEBOX As Long = &H20000
        'imposta pulsante ingrandisci
        Private Const WS_MAXIMIZEBOX As Long = &H10000
    
        Private mhWndForm As Long
    
        'Imposto le nuove proprietà
        Public Property Set Form(oForm As Object)
    
            'Ottengo le impostazioni di UserForm in base alle versioni
            If Val(Application.Version) < 9 Then
                'Excel 97
                mhWndForm = FindWindow("ThunderXFrame", oForm.Caption)
            Else
                'Excel 2000 o superiori
                mhWndForm = FindWindow("ThunderDFrame", oForm.Caption)
            End If
    
            SetFormStyle
    
        End Property
        Private Sub SetFormStyle()
            Dim lStyle As Long
            lStyle = GetWindowLong(mhWndForm, GWL_STYLE)
            '(1) Crea una finestra senza barra del titolo
            ' SetWindowLong mhWndForm, GWL_STYLE, lStyle And Not WS_CAPTION
            'Crea una finestra senza pulsante di chiusura
            SetWindowLong mhWndForm, GWL_STYLE, lStyle And Not WS_SYSMENU
            '(3) Crea una finestra ridimensionabile
            'SetWindowLong mhWndForm, GWL_STYLE, lStyle Or WS_THICKFRAME
            '(4) Crea una finestra ridimensionabile e riducibile a icona
            'SetWindowLong mhWndForm, GWL_STYLE, lStyle _
            Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
    
            'Aggiorno i cambiamenti
            DrawMenuBar mhWndForm
            SetFocus mhWndForm
        End Sub
    
    
    



  • di Enzo (utente non iscritto) data: 16/07/2010

    Poi mi sono accorto che non hai seguito quello che ti ha detto miglio ossia l'istruzione qui sotto devi inserirla nell'evento initialize della userform e non nell'evento clickc come hai fatto
     
    'istanzia un oggetto della classe
    Set FmStile = New modStile
    'assegna la nostra Userform
    Set FmStile.Form = Me
    


  • Xenzo
    di Sergio54 (utente non iscritto) data: 16/07/2010

    Ciao, ho fatto come mi hai detto
    in compilazione mi evidenzia new modstile e errore di compilazione tipo definito dall'utente non definito

     
    Private Sub UserForm_Initialize()
    'istanzia un oggetto della classe
    Set FmStile = New modStile
    'assegna la nostra Userform
    Set FmStile.Form = Me
    
    End Sub
    



  • di Enzo (utente non iscritto) data: 19/07/2010

    Allega una copia del file e vediamo