Newsgroup: it.comp.appl.access
Titolo: Problema con API: SetWindowPos non ha alcun effetto

Buongiorno a tutti
Sto cercando di utilizzare lo stralcio di codice trovato sul sito comune (un pò customizzato) per 
eliminare il tasto X da ogni finestra del mio db (funzionalmente parlando, è già disabilitato, ma 
vederlo mi da fastidio, uso Acc2002 e WXp) passandogli l'handle direttamente.
Si usa per tale scopo la funzione SetWindowLong con gli opportuni flags del caso
--------------------------------------------------------------------------------------------------
Private Const GWL_STYLE = -16
Private Const WS_SYSMENU = &H80000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_MAXIMIZEBOX = &H10000
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 Sub ModifyAppWind(FormHwnd As Long)
Dim PrevWinStyle As Long, NewWinStyle As Long
PrevWinStyle = GetWindowLong(FormHwnd, GWL_STYLE)
NewWinStyle = PrevWinStyle And Not WS_SYSMENU And Not WS_MINIMIZEBOX And Not WS_MAXIMIZEBOX
PrevWinStyle = SetWindowLong(FormHwnd, GWL_STYLE, NewWinStyle)
End Sub
-------------------------------------------------------------------------------------------------
solo che utilizzando la sub ModifyAppWind(handle) su ogni form del mio db, il tasto Chiusura non mi 
scompare finchè non ri-rendo attiva la form dopo aver fatto perdere il focus su di essa, cliccando 
ad esempio su qualsiasi altra parte dell'area.
Su msdn ho visto che per rendere effettive le modifiche di SetWindowLong, occorrerebbe chiamare 
SetWindowPos
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/setwindowpos.asp
(da Win32api.txt)
-----------------------------------------------------------------
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_FRAMECHANGED = &H20
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
---------------------------------------------------------------
Chiamando come suggerito dalla pagina msdn questa funzione:
----------------------------------------------
SetWindowPos Forms(FormName).Form.hwnd, Forms(FormName).Form.hwnd, 0, 0, 0, 0, _
SWP_NOMOVE And SWP_NOSIZE And SWP_NOZORDER And SWP_FRAMECHANGED
---------------------------------------------
Forms(FormName).Form.hwnd identifica chiaramente l'handle della finestra di nome FormName
Questa funzione dovrebbe forzare l'aggiornamento delle modifiche alla form, ma non cambia niente.
Qualcuno ha avuto lo stesso problema?
---------------------------
Michele (Giò)
joyl...@alice.it
 

Michele (Giò) ha scritto:

Dai un'occhiata a questo, utilizza proprio questa tecnica sulle Form,
ovviamente tu dovrai passare l'Handle corretto:
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=10
@Alex

 ha scritto nel messaggio 
news:1165058342.1...@f1g2000cwa.googlegroups.com...
Dai un'occhiata a questo, utilizza proprio questa tecnica sulle Form,
ovviamente tu dovrai passare l'Handle corretto:
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=10
@Alex
Ciao Alex, ho dato un'occhiata al tuo mdb, e ho risolto il problema sostituendo, su tuo modello, gli 
"And" della mia SetWindowPos con degli "Or". Mi potresti spiegare in parole povere che cosa ho 
realmente cambiato con questa operazione? Per combinare i flags non è solito, come ho già visto, 
usare gli And?
Comunque grazie, ora funziona che è una meraviglia.
Michele 

 Michele
Ciao
@Alex