Newsgroup: it.comp.lang.visual-basic
Titolo: Non sò cosa fare...

Allora ho una form che deve avere il control box attivato, perň senza la
funzione di 'chiudi', grazie al vostro aiuto ero riuscito a disattivarla,
perň facendo cosě non č piu possibile fare per esempio unload form. Secondo
cosa, dovrei fare in modo che schiacciando il tasto per chiudere si esegui
un codice, diverso da quello in form_unload.
Spero di essere stato abbastanza chiaro...
Grazie per l' aiuto.
Max Damage

un codice, diverso da quello in form_unload.
Io ti ho messo nei pasticci, adesso provo a tirarti fuori (ancora!?)
1) Attento all'Ape RemoveMenu che ti hanno suggerito, funziona ma devi
starci attento:
se per qualche strano motivo (programmi che aggiungono voci di menu proprie,
borderstyle diverso...) la voce chiudi non è più alla posizione 5 tutto il
discorso va insieme (è una possibilità remota ma c'è).
Ti consiglio di fare un ciclo sulle voci di menu con
For i= 0 to 10 'Arbitrario, un po alto
    lpString = Space$(&HFF)
    lpsLen = GetMenuString(hMenu, i, lpString, &HFF, MF_BYPOSITION)
    lpString = Left$(lpString, lpsLen)
    if lpString="Chiudi" or lpString = "Close" then
        mIndex=i
        exit for
    End if
Next i
RemoveMenu hMenu, mIndex, MF_BYPOSITION
Poi vediamo un po', per eseguire un'altra sub al posto dell'unload
Sub MyUnload()
[...]
End Sub
Sub Form1_Unload(Cancel as boolean)
    if CancelByCode then 'Mia var pubblica che mi dice se l'unload lo faccio
da codice o cause esterne
    [...]
    Cancel = true
    else
        MyUnload()
    end if
End sub
Così puoi fare:
Form1.CancelByCode = true
Unload Form1
Ricordati di mettere
sub Form1_Load()
    CancelByCode = False
end sub
E' abbastanza?

...
:Allora ho una form che deve avere il control box attivato, perň senza la
:funzione di 'chiudi', grazie al vostro aiuto ero riuscito a disattivarla,
:perň facendo cosě non č piu possibile fare per esempio unload form.
Faciamo chiarezza.
Se non vuoi che l'utente premendo il tasto X di chiusura, chiuda il form,
basta che metti il
seguente codice:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If UnloadMode = vbFormControlMenu Then Cancel = True
End Sub
Cosi' facendo e' sempre possibile fare Unload frmPippo perche' e' inibita
SOLO la chiusura dal ControlMenu.
Altra soluzione e' la seguente, non e' mia, l'ho recuperata da un messaggio
comparso nel NG tanto tempo fa:
Const MF_REMOVE = &H1000&
Const SC_CLOSE = &HF060
Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, _
    ByVal bRevert As Long) As Long
Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, _
    ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Sub Form_Load()
    RemoveMenu GetSystemMenu(hwnd, 0), SC_CLOSE, MF_REMOVE
End Sub
:Secondo cosa, dovrei fare in modo che schiacciando il tasto per chiudere si
esegui
:un codice, diverso da quello in form_unload.
:Spero di essere stato abbastanza chiaro...
Come gia detto, sull'evento Form_QueryUnload(), tramite il parametro
UnloadMode e' possibile distinguere le seguenti casistiche:
vbFormControlMenu      The user chose the Close command from the Control
menu on the form.
vbFormCode                  The Unload statement is invoked from code
(unload form).
vbAppWindows              The current Microsoft Windows operating
environment session is ending.
vbAppTaskManager      The Microsoft Windows Task Manager is closing the
application.
vbFormMDIForm            An MDI child form is closing because the MDI form
is closing.
Buon Lavoro.
Ciao
By -MES-   Maronese Ettore
http:\\
ilmes.freeweb.org
(con OCX per stampare i recordset)
Sito Comune di programmatori Visual Basic
http://members.xoom.com/it_lang_vb