Newsgroup: it.comp.lang.visual-basic
Titolo: Opacizzare un'area del form

Mi piacerebbe sapere se esiste un sistema in VB6 per far risultare 
disabilitata un'area del form che contiene diversi controlli, per fare 
capire all'utente che in quella parte di form in un certo momento non si 
può interagire.
Operativamente parlando, ho già risolto inserendo i controlli in un 
frame o in una picturebox che abilito o disabilito all'occorrenza.
Ciò che mi serve ora è fare capire visivamente all'utente dove può e 
dove non può cliccare (so che potrei nascondere il frame, ma visto che 
occupa la maggior parte del form il form risulterebbe vuoto e non mi 
piace). La strada che ho cercato di battere finora è quella di inserire 
un controllo semitrasperente sopra la parte da coprire, ma senza risultati.
Grazie a tutti
Massimo
PS: avevo già scritto un post su questo newsgroup con allegate due 
immagini di esempio ma non so se è stato inserito (lo vedo in 
Thunderbird ma non in Google).
Se qualcuno vuole vedere l'esempio me lo dica e gli invierò una mail.

 un controllo semitrasperente sopra la parte da coprire, ma senza risultati.
Di solito in questi casi io disabilito anche i controlli contenuti nella frame,
e di ciascuno all'occorrenza cambio anche il backcolor, proprio per rendere
visivamente meglio l'idea che non possono essere utilizzati.
A tale scopo mi sono scritto un paio di funzioni:
Public Sub EnableContainer(ctl As Object, Optional ByVal Enabled As Boolean =
True, Optional ByVal Locked = False)
Dim ctlCont As Object
Dim i       As Integer
    On Error Resume Next
    ctl.Enabled = Enabled
    With ctl.Parent
        For i = 0 To .Controls.Count - 1
            Set ctlCont = Nothing
            Err.Clear
            Set ctlCont = .Controls(i).Container
            If ctlCont Is ctl Then
                EnableControl .Controls(i), Enabled, Locked
            End If
        Next i
    End With
End Sub
Public Sub EnableControl(ctl As Object, Optional ByVal Enabled As Boolean =
True, Optional ByVal Locked = False)
Dim fSetBackColor   As Boolean
    On Error Resume Next
    With ctl
        .Enabled = Enabled
        .Locked = Locked
        Select Case TypeName(ctl)
        Case "TextBox", "ComboBox", "DataCombo", "DateTimePicker", "RichTextBox"
            fSetBackColor = True
        Case Else
            fSetBackColor = False
        End Select
        If fSetBackColor Then
            If Locked Then
                .BackColor = vbButtonFace
            Else
                .BackColor = vbWindowBackground
            End If
        End If
    End With
End Sub
Esempio:
    If ChangesNotAllowed Then
        EnableContainer fraContainer, False, True     ' Utilizzo solo anche il
parametro Locked, in modo da cambiare lo sfondo
    End If
Bye
Raf

un controllo semitrasperente sopra la parte da coprire, ma senza risultati.
[CUT]
Che io sappia l'unico modo è disabilitare o nascondere anche i singoli
controlli contenuti nel frame.
Ciao

 visivamente meglio l'idea che non possono essere utilizzati.
Ottimo! Semplice ed efficace!
Grazie
Massimo

 piace). 
Se metti una caption al frame quando il frame e' disabilitato anche la 
caption cambia aspetto (e l'utente medio dovrebbe intuire che i 
controlli inclusi non sono utilizzabili).
ciao
	maxx

 controlli inclusi non sono utilizzabili).
Purtroppo l'utente non è medio...
Per ora ho applicato il metodo di disabilitare i controlli all'interno 
del frame (grazie Rafunk!), con il solo difetto che non è molto evidente 
con controlli tipo ListView e ScrollBar.
Se ci sono novità fatemelo sapere!

 ha scritto nel messaggio
news:d8ouau$ip5$3...@newsread.albacom.net...

Beh, per i ListView puoi sempre estendere il Case presente nella sub
EnableControl:
    ...
        Case "TextBox", "ComboBox", "DataCombo", "DateTimePicker",
"RichTextBox", "ListView"
Per le scrollbar cambiare il colore di sfondo è un po' più complicato (bisogna
intercettare il loop dei messaggi di Windows per rispondere al messaggio
WM_CTLCOLORSCROLLBAR...) e non credo ne valga la pena.
Bye
Raf

 un controllo semitrasperente sopra la parte da coprire, ma senza risultati.
API CreateRgn.
Ciao,
Andrea



Scusa ma non ti seguo...

 Scusa ma non ti seguo...
Guardare su MSDN Online pare brutto?
Comunque hai ragione, ho sbagliato il nome dell'API: quello corretto è
CreateRectRgn.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/regions_7ab7.asp
(occhio al wrap)
Ciao,
Andrea

 Guardare su MSDN Online pare brutto?
No, anzi, è bello, basta avere il nome giusto... :-P
Comunque grazie