Newsgroup: it.comp.lang.visual-basic
Titolo: Effetto "in rilievo"all'interno dei form...

Avrei bisogno di un'informazione...
La cosa e molto banale ma e un po difficile da spiegare, ci provero.....
Premetto che ho vb5....
Vorrei creare quell'effetto "in rilievo" (presente nella maggior parte dei
software d'oggi) che si ottiene passando con il mouse sopra una scritta o un
icona...!!
Non ho capito come fare x ottenere questo effetto... E' forse un ocx?
Spero di essermi spiegato...
--
Ciao
Grazie
Federico

 icona...!!
devi usare l'API DrawEdge, mi pare non fosse difficile usarla...
ciauz
Faber

 wrote in message
bk8G4.69479$pn3.8...@news.infostrada.it...


label....!!
copio & incollo parte del codice di una classe che mi ero fatto l'anno
scorso
premetto che ci possono essere scemate perchè non riguardo questo codice da
tanto e non era manco finito...
le dichiarazioni che mancano *dovresti* trovarle facilmente nell'API
Viewer... se non le trovi fammi sapere.
nella Form:
Private Sopra As Boolean
Private Const DISTANZA = 2
Form_MouseMove:
    If Sopra Then
        Sopra = False
        RepaintWindow hWnd
    End If
Mouse_Move di una Label:
    If Not Sopra Then
        Sopra = True
        If Finished Then Effetto lblButton
        DoEvents
        Border lblButton, RILIEVO, DISTANZA
    End If
Mouse_Down della medesima Label:
    Border lblButton, BASSORILIEVO, DISTANZA
Mouse_Up della stessa Label (che ormai mi ha un po' rotto...)
    Border lblButton, RILIEVO, DISTANZA
anf anf    pant pant.....      ed ecco il codice della classe
Private Declare Function DrawEdge Lib "user32" (ByVal hdc As Long, qrc As
RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Const BDR_RAISED = &H5
Private Const BDR_SUNKEN = &HA
Private Const BF_BOTTOM = &H8
Private Const BF_LEFT = &H1
Private Const BF_RIGHT = &H4
Private Const BF_TOP = &H2
Private Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)
Public Enum ButtonStyle
    BASSORILIEVO = BDR_SUNKEN
    RILIEVO = BDR_RAISED
    NESSUNO = 0
End Enum
'Disegna il bordo attorno ad un oggetto,
'in rilievo, premuto o nullo
Public Sub Border(Obj As Control, Style As ButtonStyle, Optional Distance As
Integer = 0)
    Dim MyRect As RECT
    SettaRettangolo Obj, MyRect, Distance
    DrawEdge Obj.Parent.hdc, MyRect, Style, BF_RECT
    If Style = NESSUNO Then RepaintWindow Obj.Parent.hWnd
    If Style = BASSORILIEVO Then ReleaseCapture
End Sub
'Riempie i campi del rettangolo MyRect
'aumentando o diminuendo le coordinate
'a seconda di Distance
Private Sub SettaRettangolo(Obj As Control, MyRect As RECT, Optional
Distance As Integer = 0)
    Dim XConv As Long
    Dim YConv As Long
    Dim LastScale As Integer
    'Non chiedetemi perchè ho fatto la conversione a Twips, si vede che non
stavo bene...
    LastScale = Obj.Container.ScaleMode
    Obj.Container.ScaleMode = vbTwips
    XConv = Screen.TwipsPerPixelX
    YConv = Screen.TwipsPerPixelY
    SetRect MyRect, Obj.Left \ XConv, _
        Obj.Top \ YConv, _
        (Obj.Width + Obj.Left) \ XConv, _
        (Obj.Height + Obj.Top) \ YConv
    If Distance <> 0 Then InflateRect MyRect, Distance, Distance
    Obj.Container.ScaleMode = LastScale
End Sub
'Refresccccccccchhhhhhhh
Public Sub RepaintWindow( _
    ByRef objThis As Long, _
    Optional ByVal bClientAreaOnly As Boolean = True)
    Dim tR As RECT
    Dim tP As POINTAPI
    If (bClientAreaOnly) Then
        GetClientRect objThis, tR
    Else
        GetWindowRect objThis, tR
        tP.X = tR.Left
        tP.Y = tR.Top
        ScreenToClient objThis, tP
        tR.Left = tP.X
        tR.Top = tP.Y
        tP.X = tR.Right
        tP.Y = tR.Bottom
        ScreenToClient objThis, tP
        tR.Right = tP.X
        tR.Bottom = tP.Y
    End If
    InvalidateRect objThis, tR, 1
End Sub
fammi sapere se riesci a sistemare il tuo progetto!
(o se ho dimenticato di scriverti qualcosa    <-----    probabile...)
Ciao!
Faber

 label....!!
se ho capito, sul sito comune ci dovrebbe essere qualcosa sulla coolbar.




>Scusami ma non sono proprio riuscito ad usarlo nel mio prog......
[acc lo sapevo che avevo dimenticato qualcosa...]
cos'è che non va? ti da errore o proprio non fa nulla?
Faber

 wrote in message 8cfp6h$d59$1...@nslave1.tin.it...


>mi da degli errori nelle dichiarazioni......
sarebbe utile sapere *dove*, di preciso, da gli errori.
cmq ti servono queste dichiarazioni (non ho fatto altro che prenderle
nell'API Viewer)
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Type POINTAPI
        x As Long
        y As Long
End Type
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As
Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function InflateRect Lib "user32" (lpRect As RECT, ByVal x
As Long, ByVal y As Long) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long,
lpRect As RECT) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long,
lpRect As RECT) As Long
Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long,
lpPoint As POINTAPI) As Long
Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long,
lpRect As RECT, ByVal bErase As Long) As Long
ah, dal mouse_move della label togli questa riga:
If Finished Then Effetto lblButton
ti avevo detto di metterla ma avevo sbagliato
Ora ti funziona?
Faber

 wrote



no non funziona...... le chiamate le avevo messe a posto... l'errore me lo
da nell'evento mouse_move della label... in particolare è lblButton che
genera l'errore......!
ciao
Grazie
Federico

 wrote in message 8ci8ke$7hd$1...@nslave2.tin.it...


 si esatto voglio una toolbar piatta con i pulsanti che si sollevano... le


genera l'errore......!
si vede che la tua label non si chiama lblButton!
prova a sostituirla col nome della tua label!    :)
Faber

genera l'errore......!
ah, mi ero dimenticato... se gli oggetti a cui vuoi creare il bordo sono
delle PictureBox (o delle Image) imposta la proprietà BorderStyle a 0, poi
metti al posto di lblButton il nome del controllo corrispondente
Ciao!
Faber