Newsgroup: it.comp.appl.access
Titolo: Disattivare tema stile xp per un solo controllo.

Salve a tuui.
Vorrei sapere se era possibile disattivare il tema di xp per una sola 
struttura a schede in modo da renderla trasparente, senza pero' 
intaccare lo stile grafico degli altri controlli.
Un sentito ringraziamento.
PePonzio

 ha scritto nel messaggio
news:1170168335.6...@a75g2000cwd.googlegroups.com...

Beh non capisco bene... se imposti lo stile della StrutturaSchede a
Trasparente
che succede...?
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------

 @Alex (Alessandro Baraldi)
Rimane con lo stile normale lo stesso, praticamente il gradiente 
colore giallino/grigio chiaro...
Cmq in opzioni -> maschere/report ho attiva la spunta su "Utilizza 
controlli con temi windows nelle maschere"
Ho notato che e' questa opzione che disturba la trasparenza, solo che 
disattivandola, tutto il resto della maschera diventa brutto (pulsanti 
grigi, colore sfono sfalsato ecc...)

 ha scritto nel messaggio
news:1170170187....@k78g2000cwa.googlegroups.com...

Imposta lo stile delle schede a Nessuno e creati dei Pulsanti in
un'optionButton
che facciano l'equivalente delle Orecchie della scheda....!


 ---------------------------------------------------------------------------
Esattamente, volevo seguire l'esempio del ricettario ;)
Purtoppo non va, rimane pur sempre un quadrato giallino non 
trasparente... Mi pare di aver capito che hai il win2000 e quindi non 
puoi provare quello che dico...
Se ho capito bene informandomi in giro il problema parte dal Win xp 
SP1
p.s.
Lo fa anche con il tuo ricettario, da blu diventa giallo attivando 
quell'opzione (naturalmente in xp con Tema xp, cioe' quello che fa la 
taskbar blu per intenderci)

 taskbar blu per intenderci)
Se è un Bug o difetto credo sia normale...(brutto se vuoi ma normale)
;-)


Si credo proprio sia un bug di Access...
Per curiosita' guarda tu stesso il risultato di quella opzione...
http://immagini.p2pforum.it/out.php/i94928_StileXp.jpg
(mi scuso anticipatamente se non e' permesso allegare immagini).

 (mi scuso anticipatamente se non e' permesso allegare immagini).
No no così è ammesso tutto..., sono le immagini allegate che non sono
ammesse...!


Sono riuscito a trovare una soluzione tramite API
incollo il codice in oggetto.
Private Declare Function SetWindowTheme Lib "uxtheme.dll" (ByVal hwnd
As Long, ByVal pszSubAppName As Long, ByVal pszSubIdList As Long) As
Long
Public Sub RemoveTheme(ByVal hwnd As Long)
   ' On error means the code is skipped on pre-XP OS
   On Error Resume Next
   Dim lR As Long
   lR = SetWindowTheme(hwnd, StrPtr(" "), StrPtr(" "))
   On Error GoTo 0
End Sub
Ora il mio problema e' riuscire a beccare l'hWnd della struttura a
schede in questione prima che venga visualizzata la form.
So che col vb esiste la proprieta' hWnd agli oggetti, mentre in vba di
access 2003 lo da solo la form...

ho trovato altro... su google
'********* Code Start *************
' This code was originally written by Dev Ashish.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' Dev Ashish
'
Private Declare Function apiGetFocus Lib "user32" _
        Alias "GetFocus" _
         () As Long
Function fhWnd(ctl As Control) As Long
    On Error Resume Next
    ctl.SetFocus
    If Err Then
        fhWnd = 0
    Else
        fhWnd = apiGetFocus
    End If
    On Error GoTo 0
End Function
'*********** Code End *************
il codice funziona "a meta'" per la struttura a schede... praticamente
solo le tab diventano stile 98/2000, mentre il corpo della tab rimane
stile xp....

 ha scritto nel messaggio
news:1170617553....@v45g2000cwv.googlegroups.com...

Si mi sembra normale.... per ricavare l'Hdnw delle Section della Form si
deve ricorrere
ad altro codice...., ma non posso testarlo, se ti interessa vedo di
recuperarlo...


 - Mostra testo tra virgolette -
Beh si comunque e' una cosa che puo' essere utile, non solo a me, ma
anche a tutti gli altri utenti.
Colgo l'occasione per ringraziarTi e fare i complimenti per l'ottimo
sito.


Il Codice è scritto da Lebans, e ne riporto solo le parti essenziali....!
Purtroppo per funzionare serve che nella Section ci sia un Controllo che
possa prendere il Focus, forse modificandola, ma non ho mai provato, si
potrebbe evitare....
Private Function fFindSectionhWnd(ctl As Access.Control) As Long
    ' Get ListBox's hWnd
    Dim hWnd_LSB As Long
    Dim hWnd_Temp As Long
    ' Window RECT vars
    Dim rc As RECT
    Dim Pt As POINTAPI
    ' Loop Counters
    Dim SectionCounter As Long
    Dim ctr As Long
    ' Which Section contains the Control?
    Select Case ctl.Section
        Case acDetail   '0
            SectionCounter = 2
        Case acHeader   '1
            SectionCounter = 1
        Case acFooter   '2
            SectionCounter = 3
        Case Else
        '  ****   NEED ERROR HANDLING! ****
    End Select
    ' Setup SectionCounter
    ' Form Header, Detail and then Footer
    ctr = 1
    ' Let's get first Child Window of the FORM
    hWnd_LSB = GetWindow(ctl.Parent.hwnd, GW_CHILD)
    ' Let's walk through every sibling window of the Form
    Do
        If fGetClassName(hWnd_LSB) = "OFormSub" Then
        ' First OFormSub is the Form's Header. We want the next next one
        ' which is the detail section
            If ctr = SectionCounter Then
                fFindSectionhWnd = hWnd_LSB
                Exit Function
            End If
             ' Increment our Section Counter
            ctr = ctr + 1
        End If
    ' Let's get the NEXT SIBLING Window
    hWnd_LSB = GetWindow(hWnd_LSB, GW_HWNDNEXT)
    ' Let's Start the process from the Top again
    ' Really just an error check
    Loop While hWnd_LSB <> 0
    fFindSectionhWnd = 0
End Function
' From Dev Ashish's Site
' The Access Web
' 
http://www.mvps.org/access/
'******* Code Start *********
Private Function fGetClassName(hwnd As Long)
Dim strBuffer As String
Dim lngLen As Long
Const MAX_LEN = 255
    strBuffer = Space$(MAX_LEN)
    lngLen = GetClassName(hwnd, strBuffer, MAX_LEN)
    If lngLen > 0 Then fGetClassName = Left$(strBuffer, lngLen)
End Function
'******* Code End *********


Grazie mille! Appena posso faccio un paio di prove.
Buon proseguo.