Page 2 sur 2

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

Publié : mar. 06/oct./2009 21:00
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

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

Publié : mar. 06/oct./2009 22:01
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

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

Publié : mar. 06/oct./2009 22:37
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

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

Publié : sam. 03/mars/2012 19:33
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

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

Publié : lun. 05/mars/2012 22:05
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

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

Publié : mar. 06/mars/2012 9:48
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)

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

Publié : mar. 17/avr./2012 15:35
par MetalOS
Dommage que ce n'est compatible avec Mac OS X. Je ne trouve rien pour faire des skin avec PB sous Mac :(

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

Publié : mar. 17/avr./2012 15:37
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.

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

Publié : mar. 17/avr./2012 15:57
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.

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

Publié : jeu. 19/avr./2012 6:12
par MetalOS
Je ne trouve rien pour Mac OS :cry:

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

Publié : jeu. 19/avr./2012 9:08
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:

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

Publié : jeu. 19/avr./2012 11:03
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:

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

Publié : jeu. 19/avr./2012 11:48
par MetalOS
Et une version pour mac aussi, alors bouge toi comme dit Dobro :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:

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

Publié : ven. 20/avr./2012 20:55
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

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

Publié : ven. 20/avr./2012 21:44
par Backup
excellent la calculette couleur !! 8O