begin process at 2008 05 12 08:26:39
1 170 153 membres
57 nouveaux aujourd'hui
13 956 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FORM AVEC BORDS IRREGULIERS A PARTIR D'UNE IMAGE


Information sur la source

Catégorie :Graphique Classé sous : form, irrégulier, skin, image, bord Niveau : Initié Date de création : 01/05/2001 Vu / téléchargé: 19 672 / 1 697

Note :
9,1 / 10 - par 58 personnes
9,10 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (36)
Ajouter un commentaire et/ou une note

Description

Vous connaissez tous le logiciel winamp ??? avec des skins transparent ?
Voici comment faire pareil , et très rapidement !!!
(y'a un exemple dasn le zip)
il faut:
- une picturebox(picture1) avec la l'image ke vous voulez dedans

Source

  • '----- DANS UNE FORM -----
  • Private Sub Form_Load()
  • Dim WindowRegion As Long
  • 'Propriétés de la picture box
  • Picture1.AutoRedraw = True
  • Picture1.BorderStyle = 0
  • Picture1.ScaleMode = 3
  • 'Position de la picture box
  • Picture1.Top = 0: Picture1.Left = 0
  • '"Découpe" la form suivant Picture1
  • WindowRegion = MakeRegion(Picture1)
  • SetWindowRgn Me.hWnd, WindowRegion, True
  • End Sub
  • '----- DANS UN MODULE -----
  • Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
  • Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
  • Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  • Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
  • Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  • Public Const RGN_OR = 2
  • Public Function MakeRegion(picSkin As PictureBox) As Long
  • ' faites une fenêtre "région" basée sur une picture de picture box
  • ' Ceci ce fait en passant l'image pixel par pixel et en créant une
  • ' région pour chaque pixel non transparent
  • ' Le code est optimisé, il est donc assez rapide
  • Dim X As Long, Y As Long, StartLineX As Long
  • Dim FullRegion As Long, LineRegion As Long
  • Dim TransparentColor As Long
  • Dim InFirstRegion As Boolean
  • Dim InLine As Boolean
  • Dim hDC As Long
  • Dim PicWidth As Long
  • Dim PicHeight As Long
  • hDC = picSkin.hDC
  • PicWidth = picSkin.ScaleWidth
  • PicHeight = picSkin.ScaleHeight
  • InFirstRegion = True: InLine = False
  • X = Y = StartLineX = 0
  • ' Ici, la couleur de transparence est basé sur le pixel en haut a gauche
  • ' Mais vous pouvez mettre la couleur ke vous voulez
  • TransparentColor = GetPixel(hDC, 0, 0)
  • For Y = 0 To PicHeight - 1
  • For X = 0 To PicWidth - 1
  • If GetPixel(hDC, X, Y) = TransparentColor Or X = PicWidth Then
  • If InLine Then
  • InLine = False
  • LineRegion = CreateRectRgn(StartLineX, Y, X, Y + 1)
  • If InFirstRegion Then
  • FullRegion = LineRegion
  • InFirstRegion = False
  • Else
  • CombineRgn FullRegion, FullRegion, LineRegion, RGN_OR
  • DeleteObject LineRegion
  • End If
  • End If
  • Else
  • If Not InLine Then
  • InLine = True
  • StartLineX = X
  • End If
  • End If
  • Next
  • Next
  • MakeRegion = FullRegion
  • End Function
'----- DANS UNE FORM -----
Private Sub Form_Load()
    Dim WindowRegion As Long
    'Propriétés de la picture box
    Picture1.AutoRedraw = True
    Picture1.BorderStyle = 0
    Picture1.ScaleMode = 3
    
    'Position de la picture box
     Picture1.Top = 0: Picture1.Left = 0
    
    '"Découpe" la form suivant Picture1
    WindowRegion = MakeRegion(Picture1)
    SetWindowRgn Me.hWnd, WindowRegion, True
End Sub

'----- DANS UN MODULE -----

Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Const RGN_OR = 2

Public Function MakeRegion(picSkin As PictureBox) As Long
    
    ' faites une fenêtre "région" basée sur une picture de picture box
    ' Ceci ce fait en passant l'image pixel par pixel et en créant une
    ' région pour chaque pixel non transparent
    ' Le code est optimisé, il est donc assez rapide
    
    Dim X As Long, Y As Long, StartLineX As Long
    Dim FullRegion As Long, LineRegion As Long
    Dim TransparentColor As Long
    Dim InFirstRegion As Boolean
    Dim InLine As Boolean
    Dim hDC As Long
    Dim PicWidth As Long
    Dim PicHeight As Long
    
    hDC = picSkin.hDC
    PicWidth = picSkin.ScaleWidth
    PicHeight = picSkin.ScaleHeight
    
    InFirstRegion = True: InLine = False
    X = Y = StartLineX = 0
    
    ' Ici, la couleur de transparence est basé sur le pixel en haut a gauche
    ' Mais vous pouvez mettre la couleur ke vous voulez
    TransparentColor = GetPixel(hDC, 0, 0)
    
    For Y = 0 To PicHeight - 1
        For X = 0 To PicWidth - 1
            
            If GetPixel(hDC, X, Y) = TransparentColor Or X = PicWidth Then

                If InLine Then
                    InLine = False
                    LineRegion = CreateRectRgn(StartLineX, Y, X, Y + 1)
                    
                    If InFirstRegion Then
                        FullRegion = LineRegion
                        InFirstRegion = False
                    Else
                        CombineRgn FullRegion, FullRegion, LineRegion, RGN_OR

                        DeleteObject LineRegion
                    End If
                End If
            Else
                If Not InLine Then
                    InLine = True
                    StartLineX = X
                End If
            End If
        Next
    Next
    
    MakeRegion = FullRegion
End Function
   

Conclusion

Voila !

CE CODE N'EST PAS DE MOI:
Je l'ai trouvé a l'adresse suivante :
http://www.freevbcode.com/ShowCode.Asp?ID=1124
comme je l'ai pas trouvé avant sur ce site, g pensé utile de le rajouter

@+
fabs ;-)
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de maurice08 le 04/01/2002 12:02:10

    Ca être gengen si bien fonctione !
    g parasite  dans ce qui doit être transparent !!!
    que fais je ???

  • signaler à un administrateur
    Commentaire de cyrilp le 11/01/2002 12:16:08

    J'adore !

    Maintenant, je m'en sers pour toutes les nouvelles app. que je fais, avec un look design !

    Pour un code aussi court et pourtant aussi puissant, je met tout simplement 10/10 !

    A++

  • signaler à un administrateur
    Commentaire de cyrilp le 11/01/2002 12:18:12

    Euuuuuuh...
    Je voulais noter le code (j'avais en + l'intention de mettre de 10) mais je trouve pas l'onglet "Donner une note"... Hey Nix, why ????

    A++

  • signaler à un administrateur
    Commentaire de Ouneufe le 14/01/2002 00:39:50

    Ce code est très bon. Le seul souci c'est le temps qu'il faut à la machine pour calculer le skin à chaque démarrage (pixel par pixel). G remédié au problème( reste + qu'à faire un OCX).

  • signaler à un administrateur
    Commentaire de OzStriker59 le 24/02/2002 13:53:44

    J'ai fait un copier-coller dans VB 6 mais rien ne se passe ! Faut-il ajouter autre chose  ?

  • signaler à un administrateur
    Commentaire de lous le 06/03/2002 09:33:20

    Il est super celui la rapide et il deconne pas avec certains pixel...
    J'avais ca avec les autres les decoupes malfaites...
    20/10 heeeu 10/10 =))

  • signaler à un administrateur
    Commentaire de Tito le 12/04/2002 00:07:26

    pas mal, on peut améliorer l'effet en elargissant la plage de couleur qui va servir à la transparance (cela supprime les "taches") :
    remplacer:
    If GetPixel(hDC, X, Y) = TransparentColor Or X = PicWidth Then
    par:
    If (GetPixel(hDC, X, Y) < TransparentColor + lngFeather And GetPixel(hDC, X, Y) > TransparentColor - lngFeather) Or X = PicWidth Then

    ou lngFeather est un LONG définissant la couleur de transparance (en général =RGB(255,255,255) pour faire disparaitre un fond blanc)

  • signaler à un administrateur
    Commentaire de Chris_Thal le 11/07/2002 23:41:49

    Je te remercie, ce code m'a beaucoup aidé, mais j'ai relevé une petite erreur dans le code:
    il est écrit
         If GetPixel(hDC, X, Y) = TransparentColor Or X = PicWidth Then
    alors qu'il faudrait
         If GetPixel(hDC, X, Y) = TransparentColor Or X = PicWidth - 1 Then

    Effectivement, X n'atteint jamais X = PicWidth... Tu remarqueras que ça change le résultat dans ton exemple (apparition du damier blanc du fond de l'image).

  • signaler à un administrateur
    Commentaire de Benj1105 le 23/07/2002 10:12:49

    Ca marche aps chez moi :( la découpe est très mal faite (ca me coupe la moitié de l image je sais pas pourquoi)

  • signaler à un administrateur
    Commentaire de Tilois le 04/08/2002 09:26:32

    C'est trop bon ca comme source !!

  • signaler à un administrateur
    Commentaire de Moria le 27/08/2002 11:05:43

    Dans : Private Sub Form_Load()
    Rajoute : Form1.ShowInTaskbar = True

    Voila :)

  • signaler à un administrateur
    Commentaire de Nerdz le 27/08/2002 20:54:53

    Pk est-ce que sa coupe en plein milieu de mon image ?
    Sinon c super
    Bravo

  • signaler à un administrateur
    Commentaire de Bioacide le 12/09/2002 21:04:04

    Sur un fond noir c'est laid

  • signaler à un administrateur
    Commentaire de Zog2002 le 14/12/2002 11:54:32

    Il faut laisser une bordure de la couleur coulue transparente tout autour de l'image, autrement dit, le dessin ne doit pas toucher le bord du BMP et ça marche impec....

  • signaler à un administrateur
    Commentaire de Berenger le 07/02/2003 22:00:03

    Génial jusque là, j'utilisait un code d'une centaine de lignes pour faire la meme chose.
    J'en de mande plus : Quelqu'un connait-il un système d'anti-crénelage pour le bord d'une fenêtre redessinée (Comme WinAmp 3) ?
    C quand meme génial alors je te met 10/10 :)

  • signaler à un administrateur
    Commentaire de Mémère le 29/03/2003 18:55:30 administrateur CS

    Ne marche pas quand on change l'image chez moi, ça fait n'importe quoi, des zone qui disparaissent, d'autres qui devrait et qui ne le font pas.

  • signaler à un administrateur
    Commentaire de Mémère le 29/03/2003 18:58:05 administrateur CS

    Marche grace au commentaire de Zog2002

  • signaler à un administrateur
    Commentaire de bluelive le 28/04/2003 22:40:16

    Quelqu'un peut-il me dire s'il a trouvé le moyen de redimensionner après le picturebox par ex en affectant une zone précise du picturebox (disons coin inférieur droit) pour le redim..?

  • signaler à un administrateur
    Commentaire de lenassim le 12/05/2003 10:37:10

    C'est  tres bien continu

  • signaler à un administrateur
    Commentaire de Noiretulipe le 18/05/2003 18:48:02

    C vrai que sur un fond noir c pas beau du tout !!!
    beurk, beurk, beurk ....
    sinon, rien d'autre à dire !

  • signaler à un administrateur
    Commentaire de Noiretulipe le 18/05/2003 18:50:08

    g changé l'image et non, plus se coté pa bo ... Rien que du bonheur !!!
    lol
    Très bon prog !

  • signaler à un administrateur
    Commentaire de paline le 05/06/2003 18:02:46

    Vraiment excellent.
    J'i remarqué que les lignes qui ne commencent pas par la couleur de transparence déconnent un peu mais c'est génial
    10/10

  • signaler à un administrateur
    Commentaire de jefftabasco le 30/06/2003 06:42:57

    Par hasard qq c comment adapter ce code en .NET ?

  • signaler à un administrateur
    Commentaire de ICIoBRa le 04/07/2003 22:55:03

    Bravo et merciàa Chris_Thal qui est le seul a avoir trouvé le grand bug de cette source !

  • signaler à un administrateur
    Commentaire de Xav88 le 27/12/2003 18:11:10

    Ba chez moi ça marche pas. J'ai des vagues blanches autour de l'image (l'image du zip).
    Je comprends pas, si quelqu'un peut m'aider......

    Xav

  • signaler à un administrateur
    Commentaire de Xav88 le 27/12/2003 18:22:14

    Ca marche ou presque:
    Après avoir testé la modification de Chris_Thal je n'ai plus de vagues mais des points qui correspondent aux points sur l'image mais quand je les supprime en mettant un fond bien blanc j'ai le même problème. Bouuuuouuu

    Sinon ça à l'air bien

    Xav

  • signaler à un administrateur
    Commentaire de Xav88 le 27/12/2003 18:45:49

    C'est bon là ça marche à 100%. Bravo Bravo Bravo et 10/10!!!!!!!

    Xav

  • signaler à un administrateur
    Commentaire de dionysos6868 le 11/01/2004 10:19:30

    Super taff je vais tester ca.........

    ca va donner une super loc a programme ca merci

  • signaler à un administrateur
    Commentaire de SkYsO le 03/02/2004 14:31:49

    Salut à tous

    Ca marche vraiment pas mal tout ca :)

    Par contre le temps de calcul est vraiment super long suivant l'image utilisée.
    Quelqu'un aurait il une solution d'optimisation du code ?
    Car bon je ne peux changer la taille de l'image

    merci :)

  • signaler à un administrateur
    Commentaire de Guygz le 12/06/2004 15:44:36

    FAT !
    Enormous !
    Gigantesk !

  • signaler à un administrateur
    Commentaire de Prog1001 le 15/07/2004 16:33:42

    C'est tous ce que je recherchais
    Merveilleux
    fantastique code !!
    10/10

  • signaler à un administrateur
    Commentaire de claudenduaya le 31/07/2004 17:21:54

    vraiment cool;

    10/10 et sur tout avec les image au format  bmp

  • signaler à un administrateur
    Commentaire de AsselusBorealiss le 18/11/2004 23:08:12

    Salut  a tous
    pour l'exemple ( vu la date du 1er post  )

    a la place de :

      LineRegion = CreateRectRgn(StartLineX, Y, X, Y + 1)

    remplacer par


    LineRegion = CreateRectRgn(StartLineX + 1, Y, X, Y + 1)

    et hop plus aucune trace ...reste que les lettres

    a+
    Assel

    10/10 cool code

  • signaler à un administrateur
    Commentaire de SkyRocKo le 18/03/2005 22:35:01

    Hello !

    10/10,  Vraiment excellent !!!

    Que dire de plus, un truc pas mal serait de rajouter un paramètre optionnel : un seuil de tolérence en pourcentage pour les couleur, mais bon, c'est déjà super bien :)

    Bonne continuation

    ++

  • signaler à un administrateur
    Commentaire de jnbrunet le 06/07/2006 07:01:38

    Salut,
    ca marche très bien! seulement, il découte seulement autour de mon image...et j'ai un rectangle au milieu de l'image donc j'aimerai rendre transparent....et pourtant il est de la meme couleur que les contours qui ont été découpé...pourquoi n'est-il pas découpé?

    Merci
    Jn

  • signaler à un administrateur
    Commentaire de fabulofr le 02/12/2006 22:08:50

    Superbe, merci ^^
    10/10 sans probleme ca marche impec' !!

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS