Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB6] Form trasparente ...

    Ciao a tutti,

    e' possibile rendere una form trasparente ???
    (Voi direte SIIII) , ma io vorrei che i pulsanti, bottoni etc, siano visibili ...

    Spero di essere stato chiaro nello spiegare il mio problema

    Grazie a tutti
    Filippo

  2. #2
    Ciao. Anch'io sto ho esattamente il tuo stesso problema. Però, cercando in rete, ho trovato questo codice:

    codice:
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
    Private Declare Function ReleaseCapture Lib "user32" () As Long
    Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
    Private Const RGN_OR = 2
    Private Const RGN_DIFF = 4
    Private Const WM_NCLBUTTONDOWN = &HA1
    Private Const HTCAPTION = 2
    
    Private Sub EffettoVetro(EffettoVetroB As Boolean)
    'Attenzione! ecco alcuni suggerimenti per il corretto funzionamento.
    'consiglio di impostare ScaleMode su 3 -Pixel direttamente in fase progettuale
    Dim Larghezza As Long, Altezza As Long
    Dim posControlloLeft, posControlloTop
    Dim i As Integer
    Dim r As Long
    Dim scostamento As Long
    Dim InternoForm As Long
    Dim diffaltezza As Long
    Dim difflarghezza As Long
    Larghezza = ScaleX(Width, vbTwips, vbPixels)
    Altezza = ScaleY(Height, vbTwips, vbPixels)
    
    'se il bordo del form non è impostato su none c'è una discrepanza
    'tra altezza e larghezza effettive con altezza e larghezza del form
    difflarghezza = (Larghezza - ScaleWidth) / 2
    diffaltezza = Altezza - difflarghezza - ScaleHeight
    If EffettoVetroB = False Then
    Regione = CreateRectRgn(0, 0, Larghezza, Altezza)
    SetWindowRgn hwnd, Regione, True
    Exit Sub
    End If
    Regione = CreateRectRgn(0, 0, 0, 0)
    If EffettoVetroB = True Then
    InternoForm = CreateRectRgn(0, 0, Larghezza, Altezza)
    CombineRgn Regione, InternoForm, InternoForm, RGN_DIFF
    End If
    
    ' Combina regioni dei controlli nel form
    On Local Error Resume Next
    'alcuni controlli possono generare errore. Tra questi:
    'Gli Shape, Timer, ecc
    For i = 0 To Me.Controls.Count - 1
    posControlloLeft = ScaleX(Me.Controls(i).Left, Me.ScaleMode, vbPixels) + difflarghezza
    posControlloTop = ScaleX(Me.Controls(i).Top, Me.ScaleMode, vbPixels) + diffaltezza
    r = CreateRectRgn(posControlloLeft, posControlloTop, posControlloLeft + ScaleX(Me.Controls(i).Width, Me.ScaleMode, vbPixels), posControlloTop + ScaleY(Me.Controls(i).Height, Me.ScaleMode, vbPixels))
    CombineRgn Regione, r, Regione, RGN_OR
    Next
    Err = 0
    SetWindowRgn hwnd, Regione, True
    End Sub
    Per funzionare, funziona. Solo che io avrei bisogno che anche lo sfondo della label del mio form fosse trasparente e non basta impostare
    codice:
    BackStyle = transparent
    perchè così il suo sfondo diventa bianco! Se qualcuno ha qualche idea...
    Ciao!

  3. #3
    Grazie ...
    adesso lo provo e ti faccio sapere

    Filippo

  4. #4
    Originariamente inviato da Daniele87
    Ciao. Anch'io sto ho esattamente il tuo stesso problema. Però, cercando in rete, ho trovato questo codice:

    codice:
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
    Private Declare Function ReleaseCapture Lib "user32" () As Long
    Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
    Private Const RGN_OR = 2
    Private Const RGN_DIFF = 4
    Private Const WM_NCLBUTTONDOWN = &HA1
    Private Const HTCAPTION = 2
    
    Private Sub EffettoVetro(EffettoVetroB As Boolean)
    'Attenzione! ecco alcuni suggerimenti per il corretto funzionamento.
    'consiglio di impostare ScaleMode su 3 -Pixel direttamente in fase progettuale
    Dim Larghezza As Long, Altezza As Long
    Dim posControlloLeft, posControlloTop
    Dim i As Integer
    Dim r As Long
    Dim scostamento As Long
    Dim InternoForm As Long
    Dim diffaltezza As Long
    Dim difflarghezza As Long
    Larghezza = ScaleX(Width, vbTwips, vbPixels)
    Altezza = ScaleY(Height, vbTwips, vbPixels)
    
    'se il bordo del form non è impostato su none c'è una discrepanza
    'tra altezza e larghezza effettive con altezza e larghezza del form
    difflarghezza = (Larghezza - ScaleWidth) / 2
    diffaltezza = Altezza - difflarghezza - ScaleHeight
    If EffettoVetroB = False Then
    Regione = CreateRectRgn(0, 0, Larghezza, Altezza)
    SetWindowRgn hwnd, Regione, True
    Exit Sub
    End If
    Regione = CreateRectRgn(0, 0, 0, 0)
    If EffettoVetroB = True Then
    InternoForm = CreateRectRgn(0, 0, Larghezza, Altezza)
    CombineRgn Regione, InternoForm, InternoForm, RGN_DIFF
    End If
    
    ' Combina regioni dei controlli nel form
    On Local Error Resume Next
    'alcuni controlli possono generare errore. Tra questi:
    'Gli Shape, Timer, ecc
    For i = 0 To Me.Controls.Count - 1
    posControlloLeft = ScaleX(Me.Controls(i).Left, Me.ScaleMode, vbPixels) + difflarghezza
    posControlloTop = ScaleX(Me.Controls(i).Top, Me.ScaleMode, vbPixels) + diffaltezza
    r = CreateRectRgn(posControlloLeft, posControlloTop, posControlloLeft + ScaleX(Me.Controls(i).Width, Me.ScaleMode, vbPixels), posControlloTop + ScaleY(Me.Controls(i).Height, Me.ScaleMode, vbPixels))
    CombineRgn Regione, r, Regione, RGN_OR
    Next
    Err = 0
    SetWindowRgn hwnd, Regione, True
    End Sub
    Per funzionare, funziona. Solo che io avrei bisogno che anche lo sfondo della label del mio form fosse trasparente e non basta impostare
    codice:
    BackStyle = transparent
    perchè così il suo sfondo diventa bianco! Se qualcuno ha qualche idea...
    Ciao!
    scusate se riesumo questo vecchio post ma a me questo codice fa sparire completamente il form... c'è qualcosa che funziona?

    con option explicit mi dice che Regione non è stata dichiarata
    wlf4ever

  5. #5
    prova a mettere "dim regione as long" sotto a questo
    codice:
    Dim i As Integer
    Dim r As Long
    Dim scostamento As Long
    Dim InternoForm As Long
    Dim diffaltezza As Long
    Dim difflarghezza As Long

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.