Newsgroup: it.comp.appl.access
Titolo: Aiuto su SetWindowLong per impedire la chiusura. Nascondere Close

La tecnica di una frmHidden che intercetti la chiusura di Access 
autorizzando con il flag Cancel non va bene per i miei scopi.
Questa tecnica � vero che impedisce la chiusura di Access ma ha come effetto 
collaterale di ferma ogni altra esecuzione in background.
L'alternativa � quella di cambiare l'aspetto di Access eliminando il tasto 
di chiusura con SetWindowLong con l'esempio di 6.32 di sitocomune ma non 
FUNGE!
Che devo fare?
Grazie


Provo ad inviare un WM_NCPAINT alla Application.hWndAccessApp con 
SendMessage ? 

..
Spiega meglio la cosa perchè ... a me non ha mai dato questi
problemi... anzi è l'unico modo sicuro per bloccare la chiusura.
Fai attenzione in ogni caso che ALF+F4 non lo blocchi in nessun modo
senza tentare il SubClassing di Access...
Devi invece non solo eliminare o bloccare il Button [X] ma anche i
ContextMenù della BarraBlu...!!!
Purtroppo non ho più il mio HD, quindi ho perso quasi tutti i codici
per queste cose... e non sviluppando più con Access ora sono in
difficoltà con il materiale.
@Alex

 @Alex
All'avvio una form esegue, dopo una breve pausa di lunghezza in base a delle 
condizioni, on timer una serie di operazioni e per evitare congelamenti e 
pestaggi di tastiera c'� qualche doevents qu� e l� i quali penso siano i 
responsabili dell'anomala interruzione dei lavori all'evento close della 
finestr frmHidden con l'approvazione del Cancel = true.
Che ne pensi?
Daniele
PS Molti utenti non sanno cosa significhi Alt+F4, quasi nessuno usa la 
tastiera... forse perch� non hanno mai lavorato in MS-DOS dal quale 8086 
smanettavo.
Potrebbero invece chiuderlo dalla barra delle applicazioni... ma lascio 
perder.

 perder.
Beh... il TaskManager lavora in un'altro modo... ed ovviamente
distrugge l'istanza di Access... ma quello è un livello non di gestine
dell'applicativo come ALT+F4.
@Alex

 @Alex
Ho provato cos�.
Nuovo modulo di classe in cui aprire una finestra con sfondo collegato 
chiamiamo frmLayer
La massimizzo ed aggancio gli eventi su mouse gi� e doppio click per 
restituire il focus alla finestra che si vuole tenere in primo piano (aperto 
in Modal = true) con SetActiveWindow (Me.SetFocus non funge proprio bene)
Restano altri problemi
Che dici?

 distrugge l'istanza di Access... ma quello � un livello non di gestine


Ciao
sicuro che questo non vada ?
========================
Option Compare Database
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 SendMessage Lib "user32" _
 Alias "SendMessageA" _
 (ByVal hWnd As Long, ByVal wMsg As Long, _
 ByVal wParam As Long, ByVal lParam As Long) As Long
   '_________________
Private Const GWL_STYLE = -16
Private Const WS_SYSMENU = &H80000
Private Const WM_NCPAINT = &H85
Public Function ShowAccessBtn(ShowIt As Boolean)
    On Error GoTo Errors
    Dim lngOldStyle As Long
    Dim lngNewStyle As Long
    Dim mhWnd As Long
    mhWnd = Application.hWndAccessApp
    'Legge il valore attuale
    lngOldStyle = GetWindowLong(mhWnd, GWL_STYLE)
    If ShowIt Then
        lngNewStyle = lngOldStyle Or WS_SYSMENU
    Else
        lngNewStyle = lngOldStyle And Not WS_SYSMENU
    End If
    Call SetWindowLong(mhWnd, GWL_STYLE, lngNewStyle)
    Call SendMessage(mhWnd, WM_NCPAINT, 1, 0)
ExitHere:
    Exit Function
Errors:
   MsgBox Err.Description, vbCritical, "Errore n° = " & Err.Number
   Resume ExitHere
End Function
========================


Mi mancava il repaint con sendmessage e funge
Grazie!