Croix rouge, au secour !! personne sait parler le callback ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Croix rouge, au secour !! personne sait parler le callback ?

Message par Kwai chang caine »

Bonjour à tous

Comment feriez vous pour que la croix apparaisse au dessus du bouton et bien sur suive la fenetre.
Car le bleme c'est que la croix c'est aussi une fenetre.
Et que quand on clique sur le bouton la croix ne disparaisse pas derriere 8O
J'ai pensé aux fenetres filles, mais a ce moment la, le bouton se retrouve au dessus de la croix :?

A moins que vous ayez une meilleure methode qu'avec une fenetre pour la croix rouge peut etre un sprite, une image gadget a fond transparent un draw quelque chose :lol: etc ....,mais la ça dépasse de loin mes petites capacités. :oops:

Voici la croix:
http://purebasic.myftp.org/files/413/CroixRouge.png

Et le code:

Code : Tout sélectionner

Enumeration 
 #Window_Main = 1 
 #Button_0 = 2 
 #Croix = 3 
EndEnumeration 

Declare OpenMaskedWindow_CroixRouge(WinID, xx, yy, Title.s, imID) 
Declare myCallback(Hwnd.l, uMsg.l, wParam.l, lParam.l) 
Global Dim DistanceCroixRougeX(50) 
Global Dim DistanceCroixRougeY(50)
  
UsePNGImageDecoder() 
OpenWindow(#Window_Main,20,20,150,150,"Mère",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
CreateGadgetList(WindowID(#Window_Main)) 
ButtonGadget(#Button_0, 45, 45, 55, 55, "") 
OpenMaskedWindow_CroixRouge(#Croix, WindowX(#Window_Main) + 50, WindowY(#Window_Main) + 60, "CroixRouge", 0) 
SetWindowCallback(@myCallback(),#Window_Main) 
DistanceCroixRougeX(1) = WindowX(#Croix) - WindowX(#Window_Main)
DistanceCroixRougeY(1) = WindowY(#Croix) - WindowY(#Window_Main)

Repeat 
 event=WaitWindowEvent() 
Until event=#PB_Event_CloseWindow 


Procedure OpenMaskedWindow_CroixRouge(WinID, x, y, Title.s, imID) 

 HwndCroixRouge = OpenWindow(winID, GetSystemMetrics_(#SM_CXSCREEN), y, 44, 68, Title, #WS_POPUP) 
 Memhandle = GlobalAlloc_(#GMEM_MOVEABLE,1672) 
 *Mem = GlobalLock_(Memhandle) 
 UnpackMemory(?CroixRouge_Mask, *Mem) 
 Region = ExtCreateRegion_(0,1664, *Mem) 
 SetWindowRgn_(HwndCroixRouge, Region, #True) 
 Pic = CatchImage(imID,?CroixRouge) 
 Brush = CreatePatternBrush_(Pic) 
 SetClassLong_(HwndCroixRouge, #GCL_HBRBACKGROUND, Brush) 
 ResizeWindow(WinID, x, y, #PB_Ignore, #PB_Ignore) 
 GlobalUnlock_(Memhandle) 
 GlobalFree_(Memhandle) 
 DeleteObject_(Region) 
 ProcedureReturn HwndCroixRouge 

 DataSection 

  CroixRouge: 
  ;*********** 

  IncludeBinary "CroixRouge.png" 

  CroixRouge_Mask: 
  ;*********** 

  Data.l $680434A ,$3D670000,$50110000,$4792000 ,$86604204,$AAD292E0,$9184C004,$A093C34A,$A5282A84,$D3AA808A 
  Data.l $4A1934A8,$832A9285,$AA983A29,$8A2D2610,$20A17380,$4282876 ,$A3129942,$A1D4608 ,$38088862,$894A3A21 
  Data.l $2A94A352,$8A38584 ,$A858E846,$4E849A13,$3DA142A8,$842A608A,$56083A81,$13A884E8,$A84EA3DA,$8A411842 
  Data.l $7D848660,$E876A13A,$5A132A74,$42A708A4,$608AA798,$29E64E88,$93A24999,$926610A9,$842A5822,$A6084A75 
  Data.l $929C54E8,$953AA4D9,$2946610A,$18422D82,$8C6044A7,$9129A44E,$A9138A51,$2295B610,$6984A318,$E8D6624A 
  Data.l $58122A34,$A8908A5 ,$873A9A61,$960C3A39,$428E5929,$4A5A898 ,$3AA56088,$B767D882,$4A61474B,$75221961 
  Data.l $10468129,$989138EB,$429058F3,$7DA72818,$8229608A,$1E323A41,$1561E503,$A53A2C7 ,$731608CB,$846CA06 
  Data.l $EA0624FB,$B1055428,$1194108C,$108C42C8,$46D0EA26,$842AB2A5,$E32C1C65,$A9B846C0,$C09CC952,$93EBF4FA 
  Data.l $6541B062,$4EA71A3C,$52430EA8,$54B14EA8,$D29D8CA7,$87190550,$507352A6,$82AA4EAA,$8CA7AA58,$59D558C3 
  Data.l $D56C55A8,$58134D89,$82AB4119,$AC5AAB18,$A7566D4E,$D58C430C,$A719A851,$AB934156,$4EA50E3 ,$30CAAB54 
  Data.l $5EC4E5BC,$829D871D,$86191572,$C1445EE1,$5093620A,$70C38EAF,$758AAC1C,$60A12A34,$B1048B1D,$8EB22758 
  Data.l $C53A6546,$C32620A ,$9A8FC9CD,$A227C415,$21861D64,$EB4559BC,$CD885488,$E32A1E3A,$AB102B44,$32754475 
  Data.l $1865568A,$651EABCE,$882B882B,$2A543AD5,$8F1D64E3,$275B75BA,$65486CA4,$5163B104,$84EB8EB8,$CC32ADD4 
  Data.l $5CB18547,$9D72A347,$3AED0570,$B9629C65,$5333478E,$5780AED ,$5DB40CB1,$3104A3C7,$8EBD075E,$AF1B654A 
  Data.l $558751E3,$105703AF,$195230CB,$5902EC21,$4761E3B0,$196132A4,$89123487,$B0C      

 EndDataSection 

EndProcedure

Procedure.l myCallback(Hwnd.l, uMsg.l, wParam.l, lParam.l) 
  
 Select uMsg 
    
  Case #WM_ERASEBKGND 
   
   ProcedureReturn 
  
  Case #WM_PAINT ; Quand la fentre est déssinée ou redéssinée
    
  ; Deplacement de la croix rouge avec la fenetre  
             
   If IsWindow(#Croix)
    ResizeWindow(#Croix, WindowX(#Window_Main) + DistanceCroixRougeX(1), WindowY(#Window_Main) + DistanceCroixRougeY(1), #PB_Ignore, #PB_Ignore) 
    SetActiveWindow(#Croix) ; C'EST LA QU'EST L'OS
   EndIf   
   
   PaintDesktop_(BeginPaint_(Hwnd, ps.PAINTSTRUCT)) 
   EndPaint_(Hwnd, ps) 
  
  Case #WM_SIZING,#WM_MOVING ; Quand la fenetre est bougée ou déformée
           
   InvalidateRect_(Hwnd, 0, 1)
   
  EndSelect  
  
 ProcedureReturn #PB_ProcessPureBasicEvents 
 
EndProcedure
Merci beaucoup
Bonne journée
Dernière modification par Kwai chang caine le ven. 08/déc./2006 10:55, modifié 6 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

En continuant mes recherches, et en suivant les conseils de DOBRO comme quoi un code que l'on nous donne, il faut le triturer dans tous les sens pour essayer de comprendre. :wink:

J'ai pas compris grand chose au code de FLYPE d'origine qui est pour moi de la haute voltige, mais je suis arrivé à le simplifier au max pour coller au cas du dessus.

Donc une deuxieme methode, mais cette fois avec un sprite.
Mais à ma grande déception cette satanée croix de @#&@#" est encore derriere le bouton. :?

Si ça peux donner une idée de plus à quelqu'un.....

Pour l'image elle est dans le lien du POST de dessus

Code : Tout sélectionner

#Window = 1
#Button_0 = 2

Structure SPRITELIST
 width.l
 height.l
 nSprite.l
 ImageList.l
EndStructure

Global spr.SPRITELIST

Macro SpriteList_Init(hSpriteList, Window, n, w = 48, h = 48)
 hSpriteList\width     = w
 hSpriteList\height    = h
 hSpriteList\ImageList = ImageList_Create_(w, h, #ILC_COLOR32|#ILC_MASK, n, 0)
EndMacro

Macro SpriteList_Draw(hSpriteList, dc, index, x, y)
 ImageList_Draw_(hSpriteList\ImageList, index, dc, x, y, #ILD_NORMAL)
EndMacro

Macro SpriteList_Add(hSpriteList, index, ImageLabel, AlphaColor = #Black)
 CatchImage(image, ImageLabel)
 ResizeImage(image, hSpriteList\width, hSpriteList\height)
 ImageList_AddMasked_(hSpriteList\ImageList, ImageID(image), AlphaColor)
EndMacro


Procedure.l myCallback(hwnd.l, uMsg.l, wParam.l, lParam.l)
  
 Shared mx.l, my.l, sx.l, si.l
 Protected ps.PAINTSTRUCT, i.l, hdc.l, result.l = #PB_ProcessPureBasicEvents
  
 Select uMsg
    
  Case #WM_PAINT
      
   hdc = BeginPaint_(hwnd, ps)
   PaintDesktop_(hdc) ; Dessine le bureau en fond de la fenetre
   SpriteList_Draw(spr, hdc, 0, mx + 10, my + 10) ; Coordonnée du sprite
   EndPaint_(hwnd, ps)
      
  Case #WM_MOVING
 
   InvalidateRect_(hwnd, #Null, #False)
      
  Case #WM_ERASEBKGND
 
   Result = #False
      
 EndSelect
  
 ProcedureReturn result
  
EndProcedure

UsePNGImageDecoder()

If OpenWindow(#Window, 0, 0, 640, 480, "SpriteList", #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget)
 CreateGadgetList(WindowID(#Window))
 ButtonGadget(#Button_0, 30, 30, 40, 40, "")   
 SpriteList_Init(spr, #Window, 100, 50, 97)  ;SpriteList_Init(spr, #Window, 50,Hauteur, Largeur) 
 SpriteList_Add(spr, 100, ?SPRITE0, #Black)
 SetWindowCallback(@myCallback())
    
 Repeat
 Until WaitWindowEvent() = #PB_Event_CloseWindow
  
EndIf

DataSection
 SPRITE0: IncludeBinary "C:\CroixRouge.png"
EndDataSection
Merci
Bonne soirée
ImageLe bonheur est une route...
Pas une destination

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

Message par Backup »

Kwai chang caine a écrit : Pour l'image elle est dans le lien du POST de dessus
oui mais ce lien ne fonctionne pas !!
le fichier recuperé n'est pas un image valide :?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ce que je confirme.
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je suis vraiment une burne... :?
Deux de mes professeurs favoris passent et je ne suis meme pas foutu de leur réserver le meilleur accueuil. :cry: alors que j'attendais votre venue avec l'impatience d'une jeune mariée :lol: :lol:

Je vous demande de m'excuser, cela ne se reproduira plus, la prochaine fois, je verifierais a fond que l'image est derriere le lien.
Comme dit FLYPE (et il a raison) dans la prog faut etre rigoureux, c'est deja assez dur comme ça en faisant attention......

En fait, j'ai verifié et quand j'ai vu le panneau de telechargement, j'ai fait annuler, j'aurait du faire "ok" et je me serais apperçu de mon incomparable erreur. :oops:

Le lien est desormais corrigé.
Il faut renommer l'image en "CroixRouge.png"
Avant de vous deranger, j'ai cherché toute la journée, mais comme dab, je m'en remet à vous car je trouve plein de soluces, mais pas une ne marche.

J'ai aussi modifié le code du 1er POST.

C'est la derniere version que j'ai trouvé avec les fenetres skinable, la ça fait exactement ce que je veux, mais le bleme, c'est qu'a cause du SetActiveWindow(#Croix) ligne 48 dans la callback, je ne peux plus cliquer sur le bouton puisque la croix est continuellement "focusée".
Et si j'enleve cette ligne, bah .....la croix disparait derriere quand on clic pour déplacer la fenetre.

J'ai tout éssayé ce que mon neurone me dictait, et 6 heures n'en sont pas venue a bout.

Je suis désespéré :cry:

Encore merci de votre gentillesse.
ImageLe bonheur est une route...
Pas une destination

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

Message par Backup »

..........
Dernière modification par Backup le mar. 19/août/2014 15:05, modifié 1 fois.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Kwai chang caine a écrit :Je suis désespéré :cry:
autre règle Kwai chang caine : Ne jamais désespérer :D :twisted:
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci a tous les deux, je vois que vous n'etes toujours pas couché.
Moi j'allais y aller, mais j'ai jeté un dernier coup d'oeil dans l'espoir de vous rencontrer.
Et c'est fait, je vais donc pouvoir aller faire de beaux reves d'ici peu 8)

Bah en fait, c'est des boutons images que j'utilise dans le code d'origine.
C'est un lanceur de programmes , il recupere les icones de chaque prg et les mets dans un boutonimage.
Et la croix c'est quand l'utilisateur n'a pas le droit de demarrer ce bouton.
Je sais vous allez dire y'a qu'a le rendre inactif, ou invisible.
Mais comme vous avez pu le constater, j'aime bien faire simple :lol:

Donc chaque bouton lancé avec mon canon, si ça te rappelle quelque chose FLYPE :wink: a l'icone de l'application concernée barrée de rouge, si on a pas le droit de l'utiliser.

Par contre j'ai pensé on pourrait peut etre remplacer les boutons par autre chose, un sprite, une image tout cours, mais comment capter le clic souris pour lancer l'application ?????

Encore une autre idée on peut superposer deux images dans un bouton image pour faire l'icone de l'appli + la croix comme tu viens de faire dobro ???

Avez vous essayé le premier code ????

Ya pas un moyen d'expliquer a ce callback de malheur de me foutre la paix quand je clique sur le bouton, puisque ya que ça qui deconne . :P

Merci de votre aide, decidement, je n'ai meme pas la sagesse du jeune scarabé.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Au fait DOBRO, ta vu j'ai fait tout comme t'a dit.....procedure a la fin et tout et tout :lol: :lol:

@FLYPE
J'essaye de ne pas desesperer, mais quand tu vois que je suis stoppé a chaque fois par une broutille et que je n'arrive quasi jamais a resoudre seul, meme apres 2 jours de recherche, ya de quoi se les prendre et se les mordre......en plus je ne suis meme pas souple contrairement a mon avatar. :lol: :lol: :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bon de retour ce matin sur ce code.
Je viens de m'appercevoir qu'un bouton image désactivé perd son image 8O
Pas glop, pas glop le bouton image inactif :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Mwoua
Messages : 44
Inscription : lun. 24/oct./2005 10:28

Message par Mwoua »

Kwai chang caine a écrit :Je viens de m'appercevoir qu'un bouton image désactivé perd son image 8O
ah non, pas chez moi... #hein
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour mwoua

Ah bon, bien content de le savoir, il doit encore y avoir un bins dans mon code :?

Merci pour l'info
Bonne journée
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Mwoua
Messages : 44
Inscription : lun. 24/oct./2005 10:28

Message par Mwoua »

De rien, de rien

En fait, un "ButtonGadget", une fois "disable", devient tout gris, et l'image aussi, mais reste visible.

En éspérant t'avoir aidé

Bonne journée à twoua aussi :wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

J'ai trouvé une demi solution, pour pouvoir quand meme cliquer sur le bouton tout en gardant la croix.

Je crois que c'est de la bidouille, j'ai rajouté un timer :oops:

Mais ça marche "a peu pres" comme je voulais.

J'aimerais savoir ce que vous en pensez ????

Si vous avez l'ombre d'une autre idée :lol: qui fonctionnerait aussi bien, si ce n'est mieux :wink:

Voici la croix:
http://purebasic.myftp.org/files/413/CroixRouge.png

Code : Tout sélectionner

Enumeration 
 #Window_Main = 1 
 #Button_0 = 2 
 #Croix = 3 
EndEnumeration 

Declare OpenMaskedWindow_CroixRouge(WinID, xx, yy, Title.s, imID) 
Declare myCallback(Hwnd.l, uMsg.l, wParam.l, lParam.l) 
Global Dim DistanceCroixRougeX(50) 
Global Dim DistanceCroixRougeY(50) 
  
UsePNGImageDecoder() 
OpenWindow(#Window_Main,20,20,150,150,"Mère",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
SetTimer_(WindowID(#Window_Main), 1, 500,0) 
CreateGadgetList(WindowID(#Window_Main)) 
ButtonGadget(#Button_0, 45, 45, 55, 55, "") 
OpenMaskedWindow_CroixRouge(#Croix, WindowX(#Window_Main) + 50, WindowY(#Window_Main) + 60, "CroixRouge", 0) 
SetWindowCallback(@myCallback(),#Window_Main) 
DistanceCroixRougeX(1) = WindowX(#Croix) - WindowX(#Window_Main) 
DistanceCroixRougeY(1) = WindowY(#Croix) - WindowY(#Window_Main) 

Repeat 
 event=WaitWindowEvent()
 
 Select event
  
  Case #PB_Event_Gadget
   MessageRequester("","Bouton cliqué",0)
  Case #WM_TIMER 
      
   ; Remise des croix rouges sur les boutons
       
   If EventwParam() = 1 And Glissade = 0 And (GetActiveWindow() < 501 Or GetActiveWindow() > 542)
      
    Delay(1)   
                  
    If IsWindow(#Croix) 
     SetActiveWindow(#Croix)
    EndIf   
   
   EndIf 
 
 EndSelect
    
Until event=#PB_Event_CloseWindow 


Procedure OpenMaskedWindow_CroixRouge(WinID, x, y, Title.s, imID) 

 HwndCroixRouge = OpenWindow(winID, GetSystemMetrics_(#SM_CXSCREEN), y, 44, 68, Title, #WS_POPUP) 
 Memhandle = GlobalAlloc_(#GMEM_MOVEABLE,1672) 
 *Mem = GlobalLock_(Memhandle) 
 UnpackMemory(?CroixRouge_Mask, *Mem) 
 Region = ExtCreateRegion_(0,1664, *Mem) 
 SetWindowRgn_(HwndCroixRouge, Region, #True) 
 Pic = CatchImage(imID,?CroixRouge) 
 Brush = CreatePatternBrush_(Pic) 
 SetClassLong_(HwndCroixRouge, #GCL_HBRBACKGROUND, Brush) 
 ResizeWindow(WinID, x, y, #PB_Ignore, #PB_Ignore) 
 GlobalUnlock_(Memhandle) 
 GlobalFree_(Memhandle) 
 DeleteObject_(Region) 
 ProcedureReturn HwndCroixRouge 

 DataSection 

  CroixRouge: 
  ;*********** 

  IncludeBinary "CroixRouge.png" 

  CroixRouge_Mask: 
  ;*********** 

  Data.l $680434A ,$3D670000,$50110000,$4792000 ,$86604204,$AAD292E0,$9184C004,$A093C34A,$A5282A84,$D3AA808A 
  Data.l $4A1934A8,$832A9285,$AA983A29,$8A2D2610,$20A17380,$4282876 ,$A3129942,$A1D4608 ,$38088862,$894A3A21 
  Data.l $2A94A352,$8A38584 ,$A858E846,$4E849A13,$3DA142A8,$842A608A,$56083A81,$13A884E8,$A84EA3DA,$8A411842 
  Data.l $7D848660,$E876A13A,$5A132A74,$42A708A4,$608AA798,$29E64E88,$93A24999,$926610A9,$842A5822,$A6084A75 
  Data.l $929C54E8,$953AA4D9,$2946610A,$18422D82,$8C6044A7,$9129A44E,$A9138A51,$2295B610,$6984A318,$E8D6624A 
  Data.l $58122A34,$A8908A5 ,$873A9A61,$960C3A39,$428E5929,$4A5A898 ,$3AA56088,$B767D882,$4A61474B,$75221961 
  Data.l $10468129,$989138EB,$429058F3,$7DA72818,$8229608A,$1E323A41,$1561E503,$A53A2C7 ,$731608CB,$846CA06 
  Data.l $EA0624FB,$B1055428,$1194108C,$108C42C8,$46D0EA26,$842AB2A5,$E32C1C65,$A9B846C0,$C09CC952,$93EBF4FA 
  Data.l $6541B062,$4EA71A3C,$52430EA8,$54B14EA8,$D29D8CA7,$87190550,$507352A6,$82AA4EAA,$8CA7AA58,$59D558C3 
  Data.l $D56C55A8,$58134D89,$82AB4119,$AC5AAB18,$A7566D4E,$D58C430C,$A719A851,$AB934156,$4EA50E3 ,$30CAAB54 
  Data.l $5EC4E5BC,$829D871D,$86191572,$C1445EE1,$5093620A,$70C38EAF,$758AAC1C,$60A12A34,$B1048B1D,$8EB22758 
  Data.l $C53A6546,$C32620A ,$9A8FC9CD,$A227C415,$21861D64,$EB4559BC,$CD885488,$E32A1E3A,$AB102B44,$32754475 
  Data.l $1865568A,$651EABCE,$882B882B,$2A543AD5,$8F1D64E3,$275B75BA,$65486CA4,$5163B104,$84EB8EB8,$CC32ADD4 
  Data.l $5CB18547,$9D72A347,$3AED0570,$B9629C65,$5333478E,$5780AED ,$5DB40CB1,$3104A3C7,$8EBD075E,$AF1B654A 
  Data.l $558751E3,$105703AF,$195230CB,$5902EC21,$4761E3B0,$196132A4,$89123487,$B0C      

 EndDataSection 

EndProcedure 

Procedure.l myCallback(Hwnd.l, uMsg.l, wParam.l, lParam.l) 
  
 Select uMsg 
    
  Case #WM_ERASEBKGND 
    
   ProcedureReturn 
  
  Case #WM_PAINT ; Quand la fentre est déssinée ou redéssinée 
    
  ; Deplacement de la croix rouge avec la fenetre  
              
   If IsWindow(#Croix) 
    ResizeWindow(#Croix, WindowX(#Window_Main) + DistanceCroixRougeX(1), WindowY(#Window_Main) + DistanceCroixRougeY(1), #PB_Ignore, #PB_Ignore) 
    ;SetActiveWindow(#Croix) ; C'EST LA QU'EST L'OS 
   EndIf    
    
   PaintDesktop_(BeginPaint_(Hwnd, ps.PAINTSTRUCT)) 
   EndPaint_(Hwnd, ps) 
  
  Case #WM_SIZING,#WM_MOVING ; Quand la fenetre est bougée ou déformée 
            
   InvalidateRect_(Hwnd, 0, 1) 
   SetActiveWindow(#Croix) 
    
  EndSelect  
  
 ProcedureReturn #PB_ProcessPureBasicEvents 
  
EndProcedure
Merci et bonne journée
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Bonsoir tout le monde,

j'ai essayé de faire un bouton automatique (incluant dessin + texte) suite à la demande de Kwai chang caine, mais je me heurte à un soucis : la deuxième ligne qui appelle le bouton (type Cancel) ne s'affiche pas correctement, et je ne comprends pas pourquoi ???

voici le code :

Code : Tout sélectionner

Enumeration
  #FontID
  #img
EndEnumeration

Enumeration
  #_mbOK
  #_mbCANCEL
  #_mbQUIT
EndEnumeration

Enumeration
  #_Gadget_OK
  #_Gadget_CANCEL
  #_Gadget_QUIT
  #_Gadget_tmp
EndEnumeration

Procedure MyButton(gadget.l, x.l, y.l, width.l, height.l, texte.s, type.l)
Protected hauteur.l, longueur.l, hautimg.l, largimg.l

  CreateImage(type,width,height)
    StartDrawing(ImageOutput(type))

      DrawingMode(#PB_2DDrawing_Transparent)
      DrawingFont(FontID(#FontID))

      Box(0,0,width,height,RGB(200,200,200))
      Select type
        Case #_mbOK
          CatchImage(#img, ?ICO_ok)
        Case #_mbCANCEL
          CatchImage(#img, ?ICO_cancel)
        Case #_mbQUIT
          CatchImage(#img, ?ICO_quit)
        Default
          MessageRequester("** ERREUR **","Bouton de type ("+Str(type)+") est inconnu")
          End
      EndSelect

      hautimg=ImageHeight(#img)
      largimg=ImageWidth(#img)
      hauteur = TextHeight(texte)
      longueur = TextWidth(texte)
      DrawImage(ImageID(#img),5,(height-hautimg)/2)

      DrawText(5 + largimg + 5, (height - hauteur)/2, texte,RGB(255,255,255)) ; [CouleurTexte [, CouleurFond]])

    StopDrawing()
  ButtonImageGadget(gadget,x,y,width,height,ImageID(type))
EndProcedure

LoadFont(#FontID, "Courier", 8, #PB_Font_Bold)

If OpenWindow(0, 0, 0, 220, 100, "New ButtonImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    
    MyButton(#_Gadget_OK,10,10,50,30,"Ok",#_mbOK)
    MyButton(#_Gadget_CANCEL,70,10,85,30,"Cancel",#_mbCANCEL)
    MyButton(#_Gadget_QUIT,120,50,70,30,"Quit",#_mbQUIT)

  EndIf
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow Or EventMenu() = #_Gadget_Quit
EndIf

DataSection

 ICO_ok     :  IncludeBinary "ok.ico"
 ICO_cancel :  IncludeBinary "cancel.ico"
 ICO_quit   :  IncludeBinary "quit.ico"

EndDataSection
et les icones

http://flaith.free.fr/img/Ok.ico
http://flaith.free.fr/img/Cancel.ico
http://flaith.free.fr/img/Quit.ico

merci d'avance :)
Dernière modification par flaith le ven. 08/déc./2006 23:00, modifié 1 fois.
Répondre