Fenêtre avec skin au format PNG (support alpha)

Programmation d'applications complexes
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fenêtre avec skin au format PNG (support alpha)

Message par Ar-S »

Ok, ba mince alors j'avais rien capté effectivement.
Faut dire qu'avec mes soft 3D, il faut procéder de la sorte pour créer un objet non rectangulaire sur un "plan" plat, du coup j'ai cru que c'était le même principe.
Prends le temps de souper mais je suis curieux de voir ton exemple.

Voilà l'image en fond transparent :

Image
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Fenêtre avec skin au format PNG (support alpha)

Message par Le Soldat Inconnu »

et voilà, donc à partir de ton image PNG "About_alpha.png" mise avec le fichier PB

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4.40
;
; Explication du programme :
; Pour faire une fenêtre "A propos"

ProcedureDLL SetLayeredWindow2(WindowID) ; Mettre l'attribut WS_EX_LAYERED à la fenêtre
	SetWindowLong_(WindowID, #GWL_EXSTYLE, GetWindowLong_(WindowID, #GWL_EXSTYLE) | #WS_EX_LAYERED) ; Mettre l'attribut WS_EX_LAYERED à la fenêtre
EndProcedure
Procedure AlphaImageWindow2(WindowID, ImageID) ; Mettre une image PNG comme fond d'une fenêtre
  Protected Image_HDC, Image_Bitmap.BITMAP, ContextOffset.POINT, Blend.BLENDFUNCTION, Image
	
	; Dimension de l'image
	GetObject_(ImageID, SizeOf(BITMAP), @Image_Bitmap)
	
	Image = CreateImage(#PB_Any, Image_Bitmap\bmWidth, Image_Bitmap\bmHeight, 32)
	StartDrawing(ImageOutput(Image))
		DrawingMode(#PB_2DDrawing_AlphaBlend)
		DrawAlphaImage(ImageID, 0, 0)
		DrawingMode(#PB_2DDrawing_AlphaChannel)
		DrawAlphaImage(ImageID, 0, 0)
	StopDrawing()
	
	; Chargement du HDC
	Image_HDC = CreateCompatibleDC_(#NULL)
	Image_Ancienne = SelectObject_(Image_HDC, ImageID(Image))
	
	; L'image est mise en skin de la fenêtre
	Blend\SourceConstantAlpha = 255 ; niveau de transparence
	Blend\AlphaFormat = 1 ; Support de la couche alpha
	Blend\BlendOp = 0
	Blend\BlendFlags = 0
	UpdateLayeredWindow_(WindowID, 0, 0, @Image_Bitmap + 4, Image_HDC, @ContextOffset, 0, @Blend, 2)
	
	; Fermeture du HDC
	SelectObject_(Image_HDC, Image_Ancienne)
	DeleteDC_(Image_HDC)
	
	; Supression de l'image
	FreeImage(Image)
	
EndProcedure


UsePNGImageDecoder()
LoadImage(0, "About_Alpha.png")

; Création de la fenêtre et de la GadgetList, de la même taille que l'image
If OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "A propos", #PB_Window_BorderLess | #PB_Window_ScreenCentered) = 0
  End
EndIf

SetLayeredWindow2(WindowID(0))
AlphaImageWindow2(WindowID(0), ImageID(0))

; La zone de texte
If OpenWindow(1, WindowX(0) + 70, WindowY(0) + 82, 407, 171, "A propos", #PB_Window_BorderLess, WindowID(0)) = 0
  End
EndIf
EditorGadget(0, 0, 0, 407, 171, #PB_Editor_ReadOnly)
Texte.s = "Fenêtre : " + #CRLF$
Texte + "- Je suis une fenêtre 'A propos'" + #CRLF$
Texte + "- Et comme je suis belle !" + #CRLF$
Texte + "- Oh mirroir mon beau mirroir" + #CRLF$
Texte + "- Qui est la plus belle ?" + #CRLF$
Texte + "Le mirroir" + #CRLF$
Texte + "- C'est la fenêtre de ma chambre !" + #CRLF$
SetGadgetText(0, Texte)

; Chargement de curseur
Curseur_Deplacer = LoadCursor_(0, #IDC_SIZEALL)
Curseur_Bouton = LoadCursor_(0, #IDC_HAND)
Curseur_Normal = LoadCursor_(0, #IDC_ARROW)

Repeat

	If ClicDroit_Deplacer ; si le bouton droit de la souris est appuyé, on déplace la fenêtre en même temps que la souris
    Event = WindowEvent()
		
    ResizeWindow(0, DesktopMouseX() - PositionX, DesktopMouseY() - PositionY, #PB_Ignore, #PB_Ignore)
		ResizeWindow(1, WindowX(0) + 70, WindowY(0) + 82, #PB_Ignore, #PB_Ignore)
    
	Else
    Event = WaitWindowEvent()
	EndIf
  
	Select Event
		Case #WM_MOUSEMOVE
			If WindowMouseX(0) >= 540 And WindowMouseY(0) >= 340
				If Souris_Fermer = 0
					SetClassLong_(WindowID(0), #GCL_HCURSOR, Curseur_Bouton)
					Souris_Fermer = 1
				EndIf
			Else
				If Souris_Fermer = 1
					SetClassLong_(WindowID(0), #GCL_HCURSOR, Curseur_Normal)
					Souris_Fermer = 0
				EndIf
			EndIf
		Case #WM_LBUTTONDOWN
			If WindowMouseX(0) >= 540 And WindowMouseY(0) >= 340
				; Si on clique pour fermer
				Event = #PB_Event_CloseWindow
			Else
				; Sinon, on déplace la fenêtre
				ClicDroit_Deplacer = 1
				PositionX = WindowMouseX(0)
				PositionY = WindowMouseY(0)
				SetClassLong_(WindowID(0), #GCL_HCURSOR, Curseur_Deplacer) ; choix du curseur déplacement
			EndIf
		Case #WM_LBUTTONUP
			ClicDroit_Deplacer = 0
			SetClassLong_(WindowID(0), #GCL_HCURSOR, Curseur_Normal) ; choix du curseur normal
	EndSelect
  
  
Until Event = #PB_Event_CloseWindow
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fenêtre avec skin au format PNG (support alpha)

Message par Ar-S »

Rolala c'est carrément Excellent ! Et merci pour les commentaires, avec la gestion du fermer et du déplacement en plus !!!
Non de Diou je me répète mais c'est excellent !!!
Grace à toi je vais créer des interfaces de fou !
Merci mille fois
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Fenêtre avec skin au format PNG (support alpha)

Message par Kwai chang caine »

Excuse moi du deterrage, j'avais loupé ce POST, je viens de le découvrir grâce à un lien que tu as mis sur un autre :oops:
Image
Merci de ce travail SOLDAT et du partage 8)
Les fenêtres skinnées sont la chose qui m'ont fait choisir PB quand je recherchais un nouveau langage.
En fait je ne savais pas ça possible 8O

Et ce n'est que quand je suis tombé sur un code de MISHA y'a 6 ans que je suis tombé à la renverse de mon siège.... 8O
Ouaaahh!!!! des fenêtres comme une image ..
Certes fallait créer un masque, c'était un peu plus compliqué :(

Depuis ce jour, j'ai adopté PB, pour d'autres raisons aussi, et n'ai cessé de créer des fenêtres de ce type.
Et le somnum, c'est bien après, j'ai trouvé un code VB6 qui faisait la même chose ...la boucle était bouclée

C'est d'ailleurs un peu ma marque de fabrique comme disent mes collègues (Des ardoises, Vélo, Ecran, assiettes, etc .. ):lol:
En fait c'est cool y'a toujours une image qui correspond a l'idée du programme 8)

Et tu va rire comme ça fait 6 ans que je fait ça...et bien j'en arrive a avoir envie de créer des applis toute grise a la VLC :lol:
Comme quoi on est jamais content :roll:

Encore merci
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Fenêtre avec skin au format PNG (support alpha)

Message par Le Soldat Inconnu »

Ben regarde sur mon site la librairie SkinWindow

J'ai pas finis l'aide mais il y a des exemples. C'est basé sur ce poste, mais avec support de gadget, bouton image de la forme que l'on souhaite, etc ..
le sujet est ici :
http://www.purebasic.fr/french/viewtopi ... =3&t=10193
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Fenêtre avec skin au format PNG (support alpha)

Message par Kwai chang caine »

Merci Soldat....c'est trop cool une appli qui en plus de marcher est belle. 8O
Mes chefs me disaient au debut, qu'un client ce qui l'interessait c'etait que l'appli soit efficace plutot que belle.
Ce a quoi je retorquais que l'un n'empechais pas l'autre :?

C'est vrai a quoi bon se marier avec alice saprich, si on peut avoir adriana piloté par le cerveau d'einstein :mrgreen:
Je telechargerais ça de chez moi, le proxy du boulot y veut pas comme dab, :? peut etre que un de tes skins est fait avec le corps de clara morgane :lol: :lol:
Encore merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Fenêtre avec skin au format PNG (support alpha)

Message par MetalOS »

Dommage que ce n'est compatible avec Mac OS X. Je ne trouve rien pour faire des skin avec PB sous Mac :(
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Fenêtre avec skin au format PNG (support alpha)

Message par blendman »

tu as regardé sur le forum allemand ?
Car il y a pas mal d'utilisateurs sous mac qui sont sur le forum allemand je crois, et aussi sur le forum Anglais.
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Fenêtre avec skin au format PNG (support alpha)

Message par MetalOS »

Oui j'ai parcouru pas mal de post sur le forum anglais sans résultat pour le moment mais je n'est pas essayer sur le forum allemand. Je vais refaire les deux.
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Fenêtre avec skin au format PNG (support alpha)

Message par MetalOS »

Je ne trouve rien pour Mac OS :cry:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Fenêtre avec skin au format PNG (support alpha)

Message par Kwai chang caine »

@Soldat
Crois tu que ce serais possible que outre le skin ton code puisse laisser apparaitre les gadgets qui sont sur la fenetre skinnée ??? :roll:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Fenêtre avec skin au format PNG (support alpha)

Message par Backup »

ce qui serait bien, c'est une Doc en fait ... ;)

je crois que sa lib permet meme de skinner les Gadgets ...

mais au vu du nombre de fonctions de la Lib
une Doc (format Chm ?? ) est OBLIGATOIRE ... ( tu vas t'bouger oui ? ) :lol:
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Fenêtre avec skin au format PNG (support alpha)

Message par MetalOS »

Et une version pour mac aussi, alors bouge toi comme dit Dobro :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Fenêtre avec skin au format PNG (support alpha)

Message par Le Soldat Inconnu »

ben le chm liste toutes les fonctions mais j'ai pas eu le temps de finir.

Par contre il y a 5 exemples

et ça permet de faire çà par exemple :
Image

ou ça
Image

Le sujet est ici :
http://www.purebasic.fr/french/viewtopi ... skinwindow
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Fenêtre avec skin au format PNG (support alpha)

Message par Backup »

excellent la calculette couleur !! 8O
Répondre