Page 3 sur 5

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 9:48
par Kwai chang caine
J'vais faire encore mumuse avec ta flèche... (euh... sans sous-entendu hein! )
Bon bah tant pis....un tres court instant....j'me suis fait une fausse joie...vu que ça fait un moment que ma femme joue plus avec :mrgreen:
C'est comme tous les jouets..un jour on s'en lasse....bon j'ai pas a me plaindre...elle l'a pas cassé :lol:

@Kernadec
Ouuui !!! les "tonbou" y restent...t'es un chef 8)
Pour le scintillement..j'ai bien peur qu'il faille encore passer par une callback et encore si ça change quelque chose :roll:
Et ben dis donc....jamais on aurais pu croire que faire une fleche comme celle ci faisait appel au plus haut niveau de la prog :(

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 10:10
par kernadec
bonjour KCC
voila un code qui n'est pas parfait, mais cela dit avec un leger tremblement acceptable pendant le déplacement
enfin, tu va voir si ca te convient.
c'est avec screenshot de la fenêtre et ses boutons pour le redessiner pendant le déplacement de l'imagegadget
il te reste à l'optimiser. hi hi hi.

justement, je viens de rajouter un "setactivegadget" pour que les boutons soit réinitialisés

Cordialement

Code : Tout sélectionner

; #####################################################
; #######     kernadec en janvier 2010           ######
;        sur l'dée de fleche du projet KCC  
;      flèche au choix 8 directions avec la molette
;       deplacement clic gauche taille clic droit
; #####################################################
#WM_MOUSEWHEEL = $20A 
Enumeration
#Fenetre
#Image_0
#Image_1
#Image_2
#ImageGadget
#ImageGadget_2
#boutonGadget_0
#boutonGadget_1
#boutonGadget_2
#boutonGadget_3
#boutonGadget_4
#boutonGadget_5
#boutonGadget_6
#boutonGadget_7
#Fenetre_0
EndEnumeration
Global dc.l,epais.l,fleche.l,px.l,bm.l
winl.l=800
winh.l=600
Posx.l=0
Posy.l=0
Posl.l=300
Posh.l=300
epais=15
Px=30
Procedure.w MouseWheelDelta() 
		z.w=((EventwParam()>>16)&$FFFF) 
		ProcedureReturn -(z/100) 
EndProcedure 
Procedure Ligne(x,y,x1,y1,Width,color) 
pen=CreatePen_(#PS_SOLID,Width,color) 
penOld=SelectObject_(DC,pen) 
MoveToEx_(DC,x,y,0):LineTo_(DC,x1,y1) 
DeleteObject_(pen) 
DeleteObject_(penOld) 
EndProcedure 
Procedure dessin(Posx,Posy,Posl,Posh) 
     DisableGadget(#ImageGadget,0)
     dc=StartDrawing(ImageOutput(#Image_1))
				DrawImage(ImageID(#Image_2),0,0,ImageWidth(#Image_2),ImageHeight(#Image_2)) 
				If fleche=0
						Ligne(Posx,Posy+px,Posx+Posl-px,Posy+px,epais,RGB(226,23,29)) ; Horizontale
						Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
						Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2*3,Posy+Posh-px*2,epais,RGB(226, 23, 29))
						Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2,Posy+Posh-px*2,epais,RGB(226, 23, 29))
				EndIf
				If fleche=1
						Ligne(Posx+px,Posy+Posh-px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Horizontale
								Ligne(Posx+px,Posy,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
						Ligne(Posx+Posl-px*2,Posy+Posh-px/2*3,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
						Ligne(Posx+Posl-px*2,Posy+Posh-px/2,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
				EndIf
				If fleche=2
						Ligne(Posx+px,Posy+px,Posx+Posl,Posy+px,epais,RGB(226, 23, 29)) ; Horizontale
						Ligne(Posx+px,Posy+px,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
						Ligne(Posx+px,Posy+Posh-px,Posx+px/2*3,Posy+Posh-px*2,epais,RGB(226, 23, 29))
						Ligne(Posx+px,Posy+Posh-px,Posx+px/2,Posy+Posh-px*2,epais,RGB(226, 23, 29))
				EndIf
				If fleche=3
						Ligne(Posx+px,Posy+Posh-px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Horizontale
						Ligne(Posx+Posl-px,Posy,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
						Ligne(Posx+px*2,Posy+Posh-px/2*3,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29))
						Ligne(Posx+px*2,Posy+Posh-px/2,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29))
				EndIf
				If fleche=4
						Ligne(Posx+px,Posy+Posh-px,Posx+Posl,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Horizontale
						Ligne(Posx+px,Posy+px,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
						Ligne(Posx+px,Posy+px,Posx+px/2*3,Posy+px*2,epais,RGB(226, 23, 29))
						Ligne(Posx+px,Posy+px,Posx+px/2,Posy+px*2,epais,RGB(226, 23, 29))
				EndIf
				If fleche=5
						Ligne(Posx+px,Posy+px,Posx+Posl-px,Posy+px,epais,RGB(226, 23, 29)) ; Horizontale
						Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px,Posy+Posh,epais,RGB(226, 23, 29)) ; Verticale
						Ligne(Posx+px*2,Posy+px/2*3,Posx+px,Posy+px,epais,RGB(226, 23, 29))
						Ligne(Posx+px*2,Posy+px/2,Posx+px,Posy+px,epais,RGB(226, 23, 29))
				EndIf
				If fleche=6
						Ligne(Posx,Posy+Posh-px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Horizontale
						Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
						Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px/2*3,Posy+px*2,epais,RGB(226, 23, 29))
						Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px/2,Posy+px*2,epais,RGB(226, 23, 29))
				EndIf
				If fleche=7
						Ligne(Posx+px,Posy+px,Posx+Posl-px,Posy+px,epais,RGB(226, 23, 29)) ; Horizontale
						Ligne(Posx+px,Posy+px,Posx+px,Posy+Posh,epais,RGB(226, 23, 29)) ; Verticale
						Ligne(Posx+Posl-px*2,Posy+px/2*3-y1,Posx+Posl-px,Posy+px-y1,epais,RGB(226, 23, 29))
						Ligne(Posx+Posl-px*2,Posy+px/2-y1,Posx+Posl-px,Posy+px-y1,epais,RGB(226, 23, 29))
				EndIf
				DrawingMode(1)
				DrawingFont(FontID(0))
				DrawText(480,50,"NORD",RGB(0,0,255),RGB(225,225,225))
				DrawText(80,150,"OUEST",RGB(100,200,100),RGB(225,225,225))
				DrawText(680,430,"EST",RGB(255,0,255),RGB(225,225,225))
				DrawText(200,500,"SUD",RGB(205,205,0),RGB(225,225,225))
		    DrawingMode(4)
        Delay(4)
				ButtonGadget(#boutonGadget_0, 120,80, 50, 30, "texte" )
		    ButtonGadget(#boutonGadget_1, 440,180, 50, 30, "texte" )
		    ButtonGadget(#boutonGadget_2, 240,390, 50, 30, "texte" )
		    ButtonGadget(#boutonGadget_3, 620,290, 50, 30, "texte" )
		    SetActiveGadget(#boutonGadget_0)
		    SetActiveGadget(#boutonGadget_1)
		    SetActiveGadget(#boutonGadget_2)
		    SetActiveGadget(#boutonGadget_3)
		   StopDrawing()
		   DisableGadget(#ImageGadget,1)
		   SetGadgetState(#ImageGadget,ImageID(#Image_1))	  
EndProcedure

LoadFont(0, "Arial", 32)

hwnd.l=OpenWindow(#Fenetre, 0, 0,winl,winh, "",#WS_SYSMENU|#PB_Window_ScreenCentered)
			CreateImage(#Image_0,winl,winh)
			CreateImage(#Image_1,winl,winh)
			CreateImage(#Image_2,winl-6,winh-32)
			CreateImage(5,winl,winh)
			StartDrawing(ImageOutput(#Image_0))
				Box(0,0,winl,winh,RGB(225,225,225))
		  StopDrawing()
	 	  ImageGadget(#ImageGadget,Posx,Posy,200,200,ImageID(#Image_0))
		  SetGadgetState(#ImageGadget,ImageID(#Image_0))
  	  ButtonGadget(#boutonGadget_0, 120,80, 50, 30, "texte" )
		  ButtonGadget(#boutonGadget_1, 440,180, 50, 30, "texte" )
		  ButtonGadget(#boutonGadget_2, 240,390, 50, 30, "texte" )
		  ButtonGadget(#boutonGadget_3, 620,290, 50, 30, "texte" )
	 DC=StartDrawing(ImageOutput(#Image_2))
	  	For i=1 To 50  ; boucle de dessin des bouton sur la fenetre aveant screenshot
		  WindowEvent()
		  Next i
      BitBlt_(DC,0,0,ImageWidth(#Image_2),ImageHeight(#Image_2),GetDC_(hwnd),0,0,#SRCCOPY)
      StopDrawing()
 		  dessin(Posx,Posy,Posl,Posh)
		  bm=#False
Repeat
event = WaitWindowEvent()
		Select Event
				Case #PB_Event_Gadget 
				Select EventGadget() 
						Case #boutonGadget_0
						Debug "B0"
						Delay(2)
						RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
						Case #boutonGadget_1
						Debug "B1"
						Delay(2)
						RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
						Case #boutonGadget_2
						Debug "B2"
						Delay(2)
						RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
						Case #boutonGadget_3
						Debug "B3"
						Delay(2)
						RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
				EndSelect
					Case #PB_Event_CloseWindow
						Quit = #True  
				EndSelect
				If event=#WM_MOUSEWHEEL 
				fleche+Abs(MouseWheelDelta())
				fleche=fleche%8
				If fleche>7:fleche=7:EndIf
						dessin(Posx,Posy,Posl,Posh) 
				EndIf
				If GetAsyncKeyState_(#VK_LBUTTON) Or GetAsyncKeyState_(#VK_RBUTTON) 
				If event=#WM_RBUTTONUP   
				bm=#False
				EndIf
				If event=#WM_LBUTTONUP   
				bm=#False
				EndIf
				If event=#WM_LBUTTONDOWN
				bm=#True
				Posx1 = WindowMouseX(0)-Posx
				Posy1 = WindowMouseY(0)-Posy
				EndIf
				If event=#WM_RBUTTONDOWN
				bm=#True
				Posl1 = WindowMouseX(0)-Posl
				Posh1 = WindowMouseY(0)-Posh
				EndIf
				EndIf
				If event=#WM_MOUSEMOVE
				
				If bm=#True
				If GetAsyncKeyState_(#VK_LBUTTON)
					Posx = WindowMouseX(0)-Posx1
					Posy = WindowMouseY(0)-Posy1
					dessin(Posx,Posy,Posl,Posh)
				EndIf 
				EndIf 
				If GetAsyncKeyState_(#VK_RBUTTON) 
					Posl=WindowMouseX(0)-Posl1
					Posh=WindowMouseY(0)-Posh1
					dessin(Posx,Posy,Posl,Posh)
				EndIf
				EndIf
Until Quit = #True

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 10:40
par Kwai chang caine
Ouaiahhh cette fois tu touche la perfection du bout de l'ongle...
Un peu comme scrat et son gland 8)

Image

Je vais essayer de retourner la langue de vipere

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 11:38
par Kwai chang caine
Bon....moi l'histoire des scintillements ça dépasse mes connaissances, si personne ne trouve, je demanderais chez les français qui parlent pas français.....y'a des cadors des callback et tout le toutim la bas 8)
Par contre KCC il a tué la vilaine vipere :?

Et en plus il a supprimé les autres fleches, car en fait les seules qui repondent au doigt et à l'oeil du bout de la fleche a la souris c'est la zero et la un 8)

So, the winner is !!!
The zero for the first actor and one in the second role in "The return of personal transparency arrow"

Code : Tout sélectionner

; #####################################################
; #######     kernadec en janvier 2010           ######
;        sur l'dée de fleche du projet KCC  
;      flèche au choix 8 directions avec la molette
;       deplacement clic gauche taille clic droit
; #####################################################
#WM_MOUSEWHEEL = $20A 
Enumeration
#Fenetre
#Image_0
#Image_1
#Image_2
#ImageGadget
#ImageGadget_2
#boutonGadget_0
#boutonGadget_1
#boutonGadget_2
#boutonGadget_3
#boutonGadget_4
#boutonGadget_5
#boutonGadget_6
#boutonGadget_7
#Fenetre_0
EndEnumeration
Global dc.l,epais.l,fleche.l,px.l,bm.l
winl.l=800
winh.l=600
Posx.l=0
Posy.l=0
Posl.l=300
Posh.l=300
epais=10
Px=30
Procedure.w MouseWheelDelta() 
      z.w=((EventwParam()>>16)&$FFFF) 
      ProcedureReturn -(z/100) 
EndProcedure 
Procedure Ligne(x,y,x1,y1,Width,color) 
pen=CreatePen_(#PS_SOLID,Width,color) 
penOld=SelectObject_(DC,pen) 
MoveToEx_(DC,x,y,0):LineTo_(DC,x1,y1) 
DeleteObject_(pen) 
DeleteObject_(penOld) 
EndProcedure 
Procedure dessin(Posx,Posy,Posl,Posh) 
 Static MemTypeFleche
     DisableGadget(#ImageGadget,0)
     dc=StartDrawing(ImageOutput(#Image_1))
            DrawImage(ImageID(#Image_2),0,0,ImageWidth(#Image_2),ImageHeight(#Image_2)) 
            
            If MemTypeFleche <> Fleche
             MemTypeFleche = Fleche
             SetWindowTitle(#Fenetre, "Fleche n° " + Str(Fleche))
            EndIf
            
            If fleche=0
                  Ligne(Posx,Posy+px,Posx+Posl-px,Posy+px,epais,RGB(226,23,29)) ; Horizontale
                  Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
               
                 If PosH >= (PosY / 2)
                  Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2*3,Posy+Posh-px*2,epais,RGB(226, 23, 29))
                  Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2,Posy+Posh-px*2,epais,RGB(226, 23, 29))
                 Else
                  Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2*3,Posy+Posh+px/2,epais,RGB(226, 23, 29))
                  Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2,Posy+Posh+px/2,epais,RGB(226, 23, 29))
                 EndIf
                EndIf
            If fleche=1
                  Ligne(Posx+px,Posy+Posh-px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Horizontale
                  Ligne(Posx+px,Posy,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
                  
                  If PosL >= (PosX / 4) 
                   Ligne(Posx+Posl-px*2,Posy+Posh-px/2*3,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
                   Ligne(Posx+Posl-px*2,Posy+Posh-px/2,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
                  Else
                   Ligne(Posx+Posl+px/2,Posy+Posh-px/2*3,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
                   Ligne(Posx+Posl+px/2,Posy+Posh-px/2,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
                  EndIf 
            EndIf
         
            DrawingMode(1)
            DrawingFont(FontID(0))
            DrawText(480,50,"NORD",RGB(0,0,255),RGB(225,225,225))
            DrawText(80,150,"OUEST",RGB(100,200,100),RGB(225,225,225))
            DrawText(680,430,"EST",RGB(255,0,255),RGB(225,225,225))
            DrawText(200,500,"SUD",RGB(205,205,0),RGB(225,225,225))
          DrawingMode(4)
        Delay(4)
          ;HideGadget(#boutonGadget_0, #False)
          ;ButtonGadget(#boutonGadget_0, 120,80, 50, 30, "B0" )
;           ButtonGadget(#boutonGadget_1, 440,180, 50, 30, "B1" )
;           ButtonGadget(#boutonGadget_2, 240,390, 50, 30, "B2" )
;           ButtonGadget(#boutonGadget_3, 620,290, 50, 30, "B3" )
;           SetActiveGadget(#boutonGadget_0)
;           SetActiveGadget(#boutonGadget_1)
;           SetActiveGadget(#boutonGadget_2)
;           SetActiveGadget(#boutonGadget_3)
         StopDrawing()
         DisableGadget(#ImageGadget,1)
         SetGadgetState(#ImageGadget,ImageID(#Image_1))     
EndProcedure

LoadFont(0, "Arial", 32)

hwnd.l=OpenWindow(#Fenetre, 0, 0,winl,winh, "Fleche n° 0",#WS_SYSMENU|#PB_Window_ScreenCentered)
         CreateImage(#Image_0,winl,winh)
         CreateImage(#Image_1,winl,winh)
         CreateImage(#Image_2,winl-6,winh-32)
         CreateImage(5,winl,winh)
         StartDrawing(ImageOutput(#Image_0))
            Box(0,0,winl,winh,RGB(225,225,225))
        StopDrawing()
         ImageGadget(#ImageGadget,Posx,Posy,200,200,ImageID(#Image_0))
        SetGadgetState(#ImageGadget,ImageID(#Image_0))
       ButtonGadget(#boutonGadget_0, 120,80, 50, 30, "B0" )
        ButtonGadget(#boutonGadget_1, 440,180, 50, 30, "B1" )
          ButtonGadget(#boutonGadget_2, 240,390, 50, 30, "B2" )
          ButtonGadget(#boutonGadget_3, 620,290, 50, 30, "B3" )
    DC=StartDrawing(ImageOutput(#Image_2))
        For i=1 To 50  ; boucle de dessin des bouton sur la fenetre aveant screenshot
        WindowEvent()
        Next i
      BitBlt_(DC,0,0,ImageWidth(#Image_2),ImageHeight(#Image_2),GetDC_(hwnd),0,0,#SRCCOPY)
      StopDrawing()
        dessin(Posx,Posy,Posl,Posh)
        bm=#False
        
Repeat
event = WaitWindowEvent()
      Select Event
            Case #PB_Event_Gadget 
            Select EventGadget() 
                  Case #boutonGadget_0
                  Debug "B0"
                  Delay(2)
                  RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
                  Case #boutonGadget_1
                  Debug "B1"
                  Delay(2)
                  RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
                  Case #boutonGadget_2
                  Debug "B2"
                  Delay(2)
                  RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
                  Case #boutonGadget_3
                  Debug "B3"
                  Delay(2)
                  RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
            EndSelect
               Case #PB_Event_CloseWindow
                  Quit = #True  
            EndSelect
            If event=#WM_MOUSEWHEEL 
            fleche+Abs(MouseWheelDelta())
            fleche=fleche%2
            If fleche>1:fleche=1:EndIf
                  dessin(Posx,Posy,Posl,Posh) 
            EndIf
            If GetAsyncKeyState_(#VK_LBUTTON) Or GetAsyncKeyState_(#VK_RBUTTON) 
            If event=#WM_RBUTTONUP   
            bm=#False
            EndIf
            If event=#WM_LBUTTONUP   
            bm=#False
            EndIf
            If event=#WM_LBUTTONDOWN
            bm=#True
            Posx1 = WindowMouseX(0)-Posx
            Posy1 = WindowMouseY(0)-Posy
            EndIf
            If event=#WM_RBUTTONDOWN
            bm=#True
            Posl1 = WindowMouseX(0)-Posl
            Posh1 = WindowMouseY(0)-Posh
            EndIf
            EndIf
            If event=#WM_MOUSEMOVE
            
            If bm=#True
            If GetAsyncKeyState_(#VK_LBUTTON)
               Posx = WindowMouseX(0)-Posx1
               Posy = WindowMouseY(0)-Posy1
               dessin(Posx,Posy,Posl,Posh)
            EndIf 
            EndIf 
            If GetAsyncKeyState_(#VK_RBUTTON) 
               Posl=WindowMouseX(0)-Posl1
               Posh=WindowMouseY(0)-Posh1
               dessin(Posx,Posy,Posl,Posh)
            EndIf
            EndIf
Until Quit = #True
EDIT
J'crois mon bon KERNADEC qu'on tiens le bon bout comme dirait la peripatéticienne :D
Cette fois plus de scintillement ....j'ai enlevé tes

Code : Tout sélectionner

ButtonGadget(#boutonGadget_3, 620,290, 50, 30, "B3" )
SetActiveGadget(#boutonGadget_0)
et ça marche.....ça marche ...je marche...je marche...je me leve de mon bureau ..et je marche ...c'est un miracle ..tu as fait un miracle !!!! 8O
Quoi que j'suis con...je marchais deja ce matin :?

J'y comprend rien....remarque c'est peut etre normal....car quand je comprend...ça marche jamais :oops:

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 11:50
par kernadec
j'ai testé tes corrections bien vu, c'est vrai que j'ai tendance a compliqué..
Et je suis heureux que cela convienne.

merci, pour ton humour dans les posts

Cordialement

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 11:52
par Kwai chang caine
Tu as vu la derniere modif sans scintillement ???? :roll:
Car je crois qu'on a posté ensemble :roll:

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 12:27
par kernadec
wouahou trop fort, là tu embrasse la perfection.
"l'imagination est plus importante que le savoir" je sais plus de qui c'est
mais c'est ca

Cordialement

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 12:57
par Kwai chang caine
Merci, on lui chatouille les narpions a la perfection a nous deux :lol:

Bon j'ai fait un hook souris pour pouvoir avoir un mouvement fluide du deplacement et surtout remonter le bon PbId au survol.
D'apres SROD, utiliser "WM_Mouse" n'est pas suffisant pour la fluidité, et nombreux evenements "passent a trave" si on se deplace trop vite :?
Donc apres avoir utilisé un hook hyper performant de NETMAESTRO, mais trop compliqué pour ma pauvre tronche, je me suis rabatu sur celui de FLUID BYTE je crois :roll:

Maintenant, faut que tu ressorte si tu pouvais ton appareil photo, car j'ai pas tout compris a ta combine, et il ne faut pas oublier que les autres gadgets bougent aussi.
Alors lorsque tu bouge un bouton et bah y reviens a son ancienne place, car je suppose que la photo n'est pas mise a jour :roll:

Crois tu cela possible de la mettre a jour ???

Code : Tout sélectionner

; #####################################################
; #######     kernadec en janvier 2010           ######
;        sur l'dée de fleche du projet KCC  
;      flèche au choix 8 directions avec la molette
;       deplacement clic gauche taille clic droit
; #####################################################

#WM_MOUSEWHEEL = $20A

Enumeration 100
 #Fenetre
 #Image_0
 #Image_1
 #Image_2
 #ImageGadget
 #ImageGadget_2
 #boutonGadget_0
 #boutonGadget_1
 #boutonGadget_2
 #boutonGadget_3
 #boutonGadget_4
 #boutonGadget_5
 #boutonGadget_6
 #boutonGadget_7
 #Fenetre_0
EndEnumeration

Global dc.l,epais.l,fleche.l,px.l,bm.l, GadgetSurvoler,HookMouse
winl.l=800
winh.l=600
Posx.l=0
Posy.l=0
Posl.l=300
Posh.l=300
epais=10
Px=30

Procedure HookProc(nCode, wParam, lParam)
 GetCursorPos_(@point.POINT) 
 Handle = WindowFromPoint_(Point\X | (Point\Y << 32))
 GadgetSurvoler = GetDlgCtrlID_(Handle) ; PbId du gadget survolé
EndProcedure

Procedure.w MouseWheelDelta() 
 z.w=((EventwParam()>>16)&$FFFF) 
 ProcedureReturn -(z/100) 
EndProcedure

Procedure Ligne(x,y,x1,y1,Width,color) 
 pen=CreatePen_(#PS_SOLID,Width,color) 
 penOld=SelectObject_(DC,pen) 
 MoveToEx_(DC,x,y,0):LineTo_(DC,x1,y1) 
 DeleteObject_(pen) 
 DeleteObject_(penOld) 
EndProcedure

Procedure dessin(Posx,Posy,Posl,Posh) 
 
 Static MemTypeFleche
 DisableGadget(#ImageGadget,0)
 dc=StartDrawing(ImageOutput(#Image_1))
 DrawImage(ImageID(#Image_2),0,0,ImageWidth(#Image_2),ImageHeight(#Image_2)) 
            
 If MemTypeFleche <> Fleche
  MemTypeFleche = Fleche
  SetWindowTitle(#Fenetre, "Fleche n° " + Str(Fleche))
 EndIf
 
 If Fleche =0

  Ligne(Posx,Posy+px,Posx+Posl-px,Posy+px,epais,RGB(226,23,29)) ; Horizontale
  Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale

  If PosH >= (PosY / 2)
   Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2*3,Posy+Posh-px*2,epais,RGB(226, 23, 29))
   Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2,Posy+Posh-px*2,epais,RGB(226, 23, 29))
  Else
   Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2*3,Posy+Posh+px/2,epais,RGB(226, 23, 29))
   Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2,Posy+Posh+px/2,epais,RGB(226, 23, 29))
  EndIf
  
 EndIf
 
 If Fleche =1
 
  Ligne(Posx+px,Posy+Posh-px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Horizontale
  Ligne(Posx+px,Posy,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
  
  If PosL >= (PosX / 4) 
   Ligne(Posx+Posl-px*2,Posy+Posh-px/2*3,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
   Ligne(Posx+Posl-px*2,Posy+Posh-px/2,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
  Else
   Ligne(Posx+Posl+px/2,Posy+Posh-px/2*3,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
   Ligne(Posx+Posl+px/2,Posy+Posh-px/2,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
  EndIf 
 
 EndIf

 DrawingMode(1)
  DrawingFont(FontID(0))
  DrawText(480,50,"NORD",RGB(0,0,255),RGB(225,225,225))
  DrawText(80,150,"OUEST",RGB(100,200,100),RGB(225,225,225))
  DrawText(680,430,"EST",RGB(255,0,255),RGB(225,225,225))
  DrawText(200,500,"SUD",RGB(205,205,0),RGB(225,225,225))
  Delay(1)
 StopDrawing()
 
 DisableGadget(#ImageGadget,1)
 SetGadgetState(#ImageGadget,ImageID(#Image_1))
 
EndProcedure

LoadFont(0, "Arial", 32)

hwnd.l=OpenWindow(#Fenetre, 0, 0,winl,winh, "Fleche n° 0",#WS_SYSMENU|#PB_Window_ScreenCentered)
CreateImage(#Image_0,winl,winh)
CreateImage(#Image_1,winl,winh)
CreateImage(#Image_2,winl-6,winh-32)
CreateImage(5,winl,winh)
HookMouse = SetWindowsHookEx_(#WH_MOUSE_LL, @HookProc(), GetModuleHandle_(0), 0)

StartDrawing(ImageOutput(#Image_0))
 Box(0,0,winl,winh,RGB(225,225,225))
StopDrawing()

ImageGadget(#ImageGadget,Posx,Posy,200,200,ImageID(#Image_0))
SetGadgetState(#ImageGadget,ImageID(#Image_0))
ButtonGadget(#boutonGadget_0, 120,80, 50, 30, "B0" )
ButtonGadget(#boutonGadget_1, 440,180, 50, 30, "B1" )
ButtonGadget(#boutonGadget_2, 240,390, 50, 30, "B2" )
ButtonGadget(#boutonGadget_3, 620,290, 50, 30, "B3" )

DC = StartDrawing(ImageOutput(#Image_2))

 For i = 1 To 50  ; Boucle de dessin des boutons sur la fenetre avant screenshot
  WindowEvent()
 Next
 
 BitBlt_(DC, 0, 0, ImageWidth(#Image_2), ImageHeight(#Image_2), GetDC_(hwnd), 0, 0, #SRCCOPY)

StopDrawing()

dessin(Posx,Posy,Posl,Posh)
bm=#False
        
Repeat
 
 event = WaitWindowEvent()
 
 Select Event
 
  Case #PB_Event_Gadget 
   
   Select EventGadget() 
   
    Case #boutonGadget_0
     Debug "B0"
     Delay(2)
     RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
    Case #boutonGadget_1
     Debug "B1"
     Delay(2)
     RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
    Case #boutonGadget_2
     Debug "B2"
     Delay(2)
     RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
    Case #boutonGadget_3
     Debug "B3"
     Delay(2)
     RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
   EndSelect
 
  Case #PB_Event_CloseWindow
  
   Quit = #True
   
 EndSelect

 If event=#WM_MOUSEWHEEL 
  
  fleche+Abs(MouseWheelDelta())
  Fleche =fleche%2
  
  If fleche>1:Fleche =1:EndIf
   dessin(Posx,Posy,Posl,Posh) 
  EndIf
 
  If GetAsyncKeyState_(#VK_LBUTTON) Or GetAsyncKeyState_(#VK_RBUTTON) 
   
   If event=#WM_RBUTTONUP   
    bm=#False
   EndIf
   
   If event=#WM_LBUTTONUP   
    bm=#False
   EndIf
 
   If event=#WM_LBUTTONDOWN
    bm=#True
    Posx1 = WindowMouseX(#Fenetre)-Posx
    Posy1 = WindowMouseY(#Fenetre)-Posy
   EndIf
 
   If event=#WM_RBUTTONDOWN
    bm=#True
    Posl1 = WindowMouseX(#Fenetre)-Posl
    Posh1 = WindowMouseY(#Fenetre)-Posh
   EndIf
 
 EndIf
 
 If event=#WM_MOUSEMOVE
   
  If GetAsyncKeyState_(#VK_LBUTTON)
  
   If IsGadget(GadgetSurvoler)
   
    ResizeGadget(GadgetSurvoler, WindowMouseX(#Fenetre) - 20, WindowMouseY(#Fenetre) - 20, #PB_Ignore, #PB_Ignore)
        
   EndIf
   
  EndIf
  
  If bm=#True And GadgetSurvoler = 0 
 
   If GetAsyncKeyState_(#VK_LBUTTON)
    Posx = WindowMouseX(#Fenetre)-Posx1
    Posy = WindowMouseY(#Fenetre)-Posy1
    dessin(Posx,Posy,Posl,Posh)
   EndIf 
     
   If GetAsyncKeyState_(#VK_RBUTTON)
    Posl=WindowMouseX(#Fenetre)-Posl1
    Posh=WindowMouseY(#Fenetre)-Posh1
    dessin(Posx,Posy,Posl,Posh)
   EndIf
   
  EndIf 
  
 EndIf

Until Quit = #True

UnhookWindowsHookEx_(HookMouse)


Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 13:09
par cederavic
Bouerf, je procède totalement différement de vous lol
Mais c'est pas plus mal d'avoir plusieurs version :)
C'est pas encore parfait mais ça avance plutot bien :

Code : Tout sélectionner

Enumeration
   #Fenetre
   #Fenetre_BG
   #Fleche
   #FlecheGadget
   #ButtonGadget
   #EditorGadget
EndEnumeration

Declare WinCB(hWnd, Msg, wParam, lParam)

Procedure DessineFleche(x1, y1, x2, y2, Epaisseur, BorderlColor, GradientColor1, GradientColor2, GradientColor3)
   If x1 > x2
      Depart_X = x2
      Fin_X = x1
   Else
      Depart_X = x1
      Fin_X = x2
   EndIf
   If y1 > y2
      Depart_Y = y2
      Fin_Y = y1
   Else
      Depart_Y = y1
      Fin_Y = y2
   EndIf
   Largeur = Fin_X - Depart_X 
   Hauteur = Fin_Y - Depart_Y 
   If Largeur <= 0 : Largeur = 1 : EndIf : If Hauteur <= 0 : Hauteur = 1 : EndIf
   
   CreateImage(#Fleche, Largeur, Hauteur, 32)
   StartDrawing(ImageOutput(#Fleche))

      DrawingMode(#PB_2DDrawing_Gradient)
      LinearGradient(0, Epaisseur, 0, Hauteur - Epaisseur - 1)
      FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
      Box(0, 0, Largeur, Hauteur)
      
      DrawingMode(#PB_2DDrawing_Default)
      LineXY(Epaisseur * 2 + 1, 1, 2, Epaisseur * 2, BorderlColor)
      LineXY(Epaisseur * 2 , 1, Epaisseur * 4 - 1, Epaisseur * 2, BorderlColor)
      LineXY(0, Epaisseur * 2 + 1, Epaisseur * 1.5 - 1, Epaisseur * 2 + 1, BorderlColor)
      LineXY(Epaisseur * 2.5, Epaisseur * 2 + 1, Epaisseur * 4, Epaisseur * 2 + 1, BorderlColor)
      LineXY(Epaisseur * 1.5, Epaisseur * 2 + 1, Epaisseur * 1.5, Hauteur - Epaisseur / 2, BorderlColor)
      LineXY(Epaisseur * 2.5 - 1, Epaisseur * 2 + 1, Epaisseur * 2.5 - 1, Hauteur - Epaisseur * 1.5, BorderlColor)
      LineXY(Epaisseur * 1.5, Hauteur - Epaisseur / 2 - 1, Largeur, Hauteur - Epaisseur / 2 - 1, BorderlColor)
      LineXY(Epaisseur * 2.5 - 1, Hauteur - Epaisseur * 1.5, Largeur, Hauteur - Epaisseur * 1.5, BorderlColor)
      LineXY( Largeur - 1, Hauteur - Epaisseur * 1.5, Largeur - 1, Hauteur - Epaisseur / 2 - 1, BorderlColor)
      
      DrawingMode(#PB_2DDrawing_AlphaChannel)
      Box(0, 0, Largeur, Hauteur, RGBA(0, 0, 0, 0))
     
      Box(Epaisseur * 1.5, Hauteur - Epaisseur - Epaisseur / 2, Largeur - Epaisseur, Epaisseur, RGBA(0, 0, 0, 255))
      Box(Epaisseur * 1.5, Epaisseur, Epaisseur, Hauteur - Epaisseur - Epaisseur / 2, RGBA(0, 0, 0, 255))
      
      For ty = 0 To Epaisseur * 2
        LineXY(Epaisseur * 2 - ty +1, ty + 1, Epaisseur * 2 + ty, ty + 1, RGBA(0, 0, 0, 255))
      Next
      
      LineXY(0, 1, Largeur, 1, RGBA(0, 0, 0, 0))
      
  StopDrawing()
      
      
  hDC = StartDrawing(ImageOutput(#Fleche))
    
    If Largeur < Epaisseur * 4 Or Hauteur < Epaisseur * 4
      DrawingMode(#PB_2DDrawing_AlphaChannel)
      Box(0, 0, Largeur, Hauteur, RGBA(0, 0, 0, 0))
    ElseIf x1 < x2  And y1  > y2 ; Haut Droit
      StretchBlt_(hDC, Largeur, 0, -Largeur, Hauteur, hDC, 0, 0, Largeur, Hauteur, #SRCCOPY)
    ElseIf x1 < x2 And y1 < y2 ; Bas Droit
      StretchBlt_(hDC, Largeur, Hauteur, -Largeur, -Hauteur, hDC, 0, 0, Largeur, Hauteur, #SRCCOPY)
    ElseIf x1   > x2 And y1 < y2  ; Haut gauche
      StretchBlt_(hDC, 0, Hauteur, Largeur, -Hauteur, hDC, 0, 0, Largeur, Hauteur, #SRCCOPY)
    EndIf
    
  StopDrawing()

  SetGadgetState(#FlecheGadget, ImageID(#Fleche))
  ResizeGadget(#FlecheGadget, Depart_X, Depart_Y, Largeur, Hauteur)
   
EndProcedure

CreateImage(#Fleche, 10, 10, 32)

OpenWindow(#Fenetre, 0, 0, 800, 600, "Fleche multidirectionnelle",  #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered| #PB_Window_Invisible)
  SmartWindowRefresh(#Fenetre, 1) 
  
  
  ButtonGadget(#ButtonGadget, 10, 10, 100, 20, "Test")
  EditorGadget(#EditorGadget, 200, 300, 200, 300)
    AddGadgetItem(#EditorGadget, -1, "Youpla boom!")
  
  ImageGadget(#FlecheGadget,0, 0, 0, 0, ImageID(#Fleche))
  
  CreateImage(#Fenetre_BG, 800, 600)
  StartDrawing(ImageOutput(#Fenetre_BG))
    a = 1
    For x = 0 To 800 Step 10
      For y = 0 To 600 Step 10
        a * -1
        If a = 1 : Color = RGB(80, 80, 80) : Else : Color = #White : EndIf
        Box(x, y, 10, 10, Color)
      Next
    Next
  StopDrawing()
 
  SetWindowCallback(@WinCB())

DessineFleche(112, 6, 326, 298, 12, RGB(16, 16, 16), RGB(75, 64, 64), RGB(128, 140, 128), RGB(230, 230, 250))
HideWindow(#Fenetre, 0)

Repeat
  
  Evenement = WindowEvent()
  
  Select Evenement

    Case #WM_MOUSEMOVE
      If GetAsyncKeyState_(#VK_LBUTTON)
        oldMouseX = MouseX
        oldMouseY = MouseY
        MouseX = WindowMouseX(#Fenetre)
        MouseY = WindowMouseY(#Fenetre)
        If Depart_X < 0
          Depart_X = MouseX
          Depart_Y = MouseY
        EndIf
        
        x1 = Depart_X : x2 = MouseX
        y1 = Depart_Y : y2 = MouseY
        If x1 > x2
          dx1 = x2
          dx2 = x1
        Else
          dx1 = x1
          dx2 = x2
        EndIf
        If y1 > y2
          dy1 = y2
          dy2 = y1
        Else
          dy1 = y1
          dy2 = y2
        EndIf

        hRgn = CreateRectRgn_(Depart_X, MouseY, OldMouseX, OldMouseY)
          RedrawWindow_(WindowID(#Fenetre), 0, hRgn, #RDW_INVALIDATE | #RDW_UPDATENOW | #RDW_ALLCHILDREN)
        DeleteObject_(hRgn)
        
        
        hRgn = CreateRectRgn_(MouseX, Depart_Y, OldMouseX, OldMouseY)
          RedrawWindow_(WindowID(#Fenetre), 0, hRgn, #RDW_INVALIDATE | #RDW_UPDATENOW | #RDW_ALLCHILDREN)
        DeleteObject_(hRgn)
        
        deltaX = Abs(MouseX - oldMouseX) + 2 : deltaY = Abs(MouseY - OldMouseY) + 2
        
        hRgn  = CreateRectRgn_(dx1 + 2,       dy1 + 2,      dx2 - 2,      dy2 - 2)
        hRgn2 = CreateRectRgn_(dx1 + 2,       dy1 + 2,      dx2 - 2,      dy2 - 2)
        hRgn3 = CreateRectRgn_(dx1 + deltaX,  dy1 + deltaY, dx2 - deltaX, dy2 - deltaY)
          CombineRgn_(hRgn, hRgn2, hRgn3, #RGN_XOR)
          RedrawWindow_(WindowID(#Fenetre), 0, hRgn, #RDW_INVALIDATE | #RDW_UPDATENOW | #RDW_ALLCHILDREN)
        DeleteObject_(hRgn)
        DeleteObject_(hRgn2)
        DeleteObject_(hRgn3)
        
        hDC = GetDC_(WindowID(#Fenetre))
        hBrush = CreateSolidBrush_(RGB(180, 32, 32))
        hRgn = CreateRectRgn_(dx1, dy1, dx2, dy2)
          FrameRgn_(hDC, hRgn, hBrush, 2, 2)
        DeleteObject_(hBrush)
        DeleteObject_(hRgn)

      Else
        Depart_X = -1
      EndIf   
      
    Case #WM_LBUTTONUP
      MouseX = WindowMouseX(#Fenetre)
      MouseY = WindowMouseY(#Fenetre)
      DessineFleche(Depart_X, Depart_Y, MouseX , MouseY, 16, RGB(16, 16, 16), RGB(75, 64, 64), RGB(128, 140, 128), RGB(230, 230, 250))    
      
  EndSelect

Until Evenement = #PB_Event_CloseWindow


Procedure WinCB(hWnd, Msg, wParam, lParam)

  Select Msg
    Case #WM_PAINT
 
      hBmp = ImageID(#Fenetre_BG)
      hDC = BeginPaint_(hWnd, @ps.PAINTSTRUCT)
     
        hDC2 = CreateCompatibleDC_(hDC)
       
          SelectObject_ (hDC2, hBmp)
          BitBlt_(hDC, 0, 0, WindowWidth(#Fenetre), WindowHeight(#Fenetre), hDC2, 0, 0, #SRCCOPY)
          ReleaseDC_(hWnd, hDC)
         
        DeleteDC_(hDC2)
      EndPaint_(hWnd, @ps)
      ProcedureReturn #True
   
    Default
      ProcedureReturn #PB_ProcessPureBasicEvents
   
  EndSelect

EndProcedure


Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 13:43
par Kwai chang caine
Ouaaahhh !!! elle est top cool ta fleche aussi...
Rien a voir pour l'utilisation... 8O

T'as repensé du debut...remarque comme la premiere pensée venait de moi...j'crois que c'est pas une mauvaise idée :lol:
Donc apparement elle est pas deplaçable ta fleche.....hummmm..oui pourquoi pas ?? :roll:

Reste encore a voir si ta fleche elle va s'entendre avec tous les autres gadgets dans mon programme ...car c'est souvent la que ça coince :?

Parce que je suppose que le deplacement c'est ce qui est le plus dur a faire et fait scintiller ??
Ou alors c'est que t'as pas daigné vouloir jouer dans le meme bac a sable que nous :lol: :lol:

Toi aussi tu chatouille la perfection :D

Au fait vous savez comment je sais que moi, je commence a la chatouiller ???
Parce que la perfection, quand elle me voit arriver ....
Elle est morte de rire !!!!! :lol: :lol:
Maintenant que j'y pense...j'ai des doutes affreux ..
J'suis pas sur que ce soit vraiment une marque de respect qu'elle me témoigne ?? :roll:

PIAF (Edit) Excusez moi, mais j'peux pas m'en passer de celle la..elle me fait toujours rire :oops:

Tu sais apres rajout de mon hook et d'une gestion du CTRL
Ta fleche elle commence a faire comme celle de cupidon....elle me transperce le coeur 8)
Car on peut la deplacer facilement en plus (Souris + CTRL)

Code : Tout sélectionner

Enumeration
   #Fenetre
   #Fenetre_BG
   #Fleche
   #FlecheGadget
   #ButtonGadget
   #EditorGadget
EndEnumeration
Global GadgetSurvoler,HookMouse
Declare WinCB(hWnd, Msg, wParam, lParam)

Procedure HookProc(nCode, wParam, lParam)
 GetCursorPos_(@point.POINT) 
 Handle = WindowFromPoint_(Point\X | (Point\Y << 32))
 GadgetSurvoler = GetDlgCtrlID_(Handle) ; PbId du gadget survolé
EndProcedure

Procedure DessineFleche(x1, y1, x2, y2, Epaisseur, BorderlColor, GradientColor1, GradientColor2, GradientColor3)
   If x1 > x2
      Depart_X = x2
      Fin_X = x1
   Else
      Depart_X = x1
      Fin_X = x2
   EndIf
   If y1 > y2
      Depart_Y = y2
      Fin_Y = y1
   Else
      Depart_Y = y1
      Fin_Y = y2
   EndIf
   Largeur = Fin_X - Depart_X 
   Hauteur = Fin_Y - Depart_Y 
   If Largeur <= 0 : Largeur = 1 : EndIf : If Hauteur <= 0 : Hauteur = 1 : EndIf
   
   CreateImage(#Fleche, Largeur, Hauteur, 32)
   StartDrawing(ImageOutput(#Fleche))

      DrawingMode(#PB_2DDrawing_Gradient)
      LinearGradient(0, Epaisseur, 0, Hauteur - Epaisseur - 1)
      FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
      Box(0, 0, Largeur, Hauteur)
      
      DrawingMode(#PB_2DDrawing_Default)
      LineXY(Epaisseur * 2 + 1, 1, 2, Epaisseur * 2, BorderlColor)
      LineXY(Epaisseur * 2 , 1, Epaisseur * 4 - 1, Epaisseur * 2, BorderlColor)
      LineXY(0, Epaisseur * 2 + 1, Epaisseur * 1.5 - 1, Epaisseur * 2 + 1, BorderlColor)
      LineXY(Epaisseur * 2.5, Epaisseur * 2 + 1, Epaisseur * 4, Epaisseur * 2 + 1, BorderlColor)
      LineXY(Epaisseur * 1.5, Epaisseur * 2 + 1, Epaisseur * 1.5, Hauteur - Epaisseur / 2, BorderlColor)
      LineXY(Epaisseur * 2.5 - 1, Epaisseur * 2 + 1, Epaisseur * 2.5 - 1, Hauteur - Epaisseur * 1.5, BorderlColor)
      LineXY(Epaisseur * 1.5, Hauteur - Epaisseur / 2 - 1, Largeur, Hauteur - Epaisseur / 2 - 1, BorderlColor)
      LineXY(Epaisseur * 2.5 - 1, Hauteur - Epaisseur * 1.5, Largeur, Hauteur - Epaisseur * 1.5, BorderlColor)
      LineXY( Largeur - 1, Hauteur - Epaisseur * 1.5, Largeur - 1, Hauteur - Epaisseur / 2 - 1, BorderlColor)
      
      DrawingMode(#PB_2DDrawing_AlphaChannel)
      Box(0, 0, Largeur, Hauteur, RGBA(0, 0, 0, 0))
     
      Box(Epaisseur * 1.5, Hauteur - Epaisseur - Epaisseur / 2, Largeur - Epaisseur, Epaisseur, RGBA(0, 0, 0, 255))
      Box(Epaisseur * 1.5, Epaisseur, Epaisseur, Hauteur - Epaisseur - Epaisseur / 2, RGBA(0, 0, 0, 255))
      
      For ty = 0 To Epaisseur * 2
        LineXY(Epaisseur * 2 - ty +1, ty + 1, Epaisseur * 2 + ty, ty + 1, RGBA(0, 0, 0, 255))
      Next
      
      LineXY(0, 1, Largeur, 1, RGBA(0, 0, 0, 0))
      
  StopDrawing()
      
      
  hDC = StartDrawing(ImageOutput(#Fleche))
    
    If Largeur < Epaisseur * 4 Or Hauteur < Epaisseur * 4
      DrawingMode(#PB_2DDrawing_AlphaChannel)
      Box(0, 0, Largeur, Hauteur, RGBA(0, 0, 0, 0))
    ElseIf x1 < x2  And y1  > y2 ; Haut Droit
      StretchBlt_(hDC, Largeur, 0, -Largeur, Hauteur, hDC, 0, 0, Largeur, Hauteur, #SRCCOPY)
    ElseIf x1 < x2 And y1 < y2 ; Bas Droit
      StretchBlt_(hDC, Largeur, Hauteur, -Largeur, -Hauteur, hDC, 0, 0, Largeur, Hauteur, #SRCCOPY)
    ElseIf x1   > x2 And y1 < y2  ; Haut gauche
      StretchBlt_(hDC, 0, Hauteur, Largeur, -Hauteur, hDC, 0, 0, Largeur, Hauteur, #SRCCOPY)
    EndIf
    
  StopDrawing()

  SetGadgetState(#FlecheGadget, ImageID(#Fleche))
  ResizeGadget(#FlecheGadget, Depart_X, Depart_Y, Largeur, Hauteur)
   
EndProcedure

CreateImage(#Fleche, 10, 10, 32)

OpenWindow(#Fenetre, 0, 0, 800, 600, "Fleche multidirectionnelle",  #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered| #PB_Window_Invisible)
  SmartWindowRefresh(#Fenetre, 1) 
  
  
  ButtonGadget(#ButtonGadget, 10, 10, 100, 20, "Test")
  EditorGadget(#EditorGadget, 200, 300, 200, 300)
    AddGadgetItem(#EditorGadget, -1, "Youpla boom!")
  
  ImageGadget(#FlecheGadget,0, 0, 0, 0, ImageID(#Fleche))
  
  CreateImage(#Fenetre_BG, 800, 600)
  StartDrawing(ImageOutput(#Fenetre_BG))
    a = 1
    For x = 0 To 800 Step 10
      For y = 0 To 600 Step 10
        a * -1
        If a = 1 : Color = RGB(80, 80, 80) : Else : Color = #White : EndIf
        Box(x, y, 10, 10, Color)
      Next
    Next
  StopDrawing()

  SetWindowCallback(@WinCB())

DessineFleche(112, 6, 326, 298, 12, RGB(16, 16, 16), RGB(75, 64, 64), RGB(128, 140, 128), RGB(230, 230, 250))
HideWindow(#Fenetre, 0)
HookMouse = SetWindowsHookEx_(#WH_MOUSE_LL, @HookProc(), GetModuleHandle_(0), 0)

Repeat
  
  Evenement = WaitWindowEvent()
  
  Select Evenement

    Case #WM_MOUSEMOVE
           
      If GetAsyncKeyState_(#VK_LBUTTON)
       
       If GetAsyncKeyState_(#VK_CONTROL)
  
        If IsGadget(GadgetSurvoler)
        
         ResizeGadget(GadgetSurvoler, WindowMouseX(#Fenetre) - 10, WindowMouseY(#Fenetre) - 10, #PB_Ignore, #PB_Ignore)
             
        EndIf
   
       Else
       
        oldMouseX = MouseX
        oldMouseY = MouseY
        MouseX = WindowMouseX(#Fenetre)
        MouseY = WindowMouseY(#Fenetre)
        If Depart_X < 0
          Depart_X = MouseX
          Depart_Y = MouseY
        EndIf
        
        x1 = Depart_X : x2 = MouseX
        y1 = Depart_Y : y2 = MouseY
        If x1 > x2
          dx1 = x2
          dx2 = x1
        Else
          dx1 = x1
          dx2 = x2
        EndIf
        If y1 > y2
          dy1 = y2
          dy2 = y1
        Else
          dy1 = y1
          dy2 = y2
        EndIf

        hRgn = CreateRectRgn_(Depart_X, MouseY, OldMouseX, OldMouseY)
          RedrawWindow_(WindowID(#Fenetre), 0, hRgn, #RDW_INVALIDATE | #RDW_UPDATENOW | #RDW_ALLCHILDREN)
        DeleteObject_(hRgn)
        
        
        hRgn = CreateRectRgn_(MouseX, Depart_Y, OldMouseX, OldMouseY)
          RedrawWindow_(WindowID(#Fenetre), 0, hRgn, #RDW_INVALIDATE | #RDW_UPDATENOW | #RDW_ALLCHILDREN)
        DeleteObject_(hRgn)
        
        deltaX = Abs(MouseX - oldMouseX) + 2 : deltaY = Abs(MouseY - OldMouseY) + 2
        
        hRgn  = CreateRectRgn_(dx1 + 2,       dy1 + 2,      dx2 - 2,      dy2 - 2)
        hRgn2 = CreateRectRgn_(dx1 + 2,       dy1 + 2,      dx2 - 2,      dy2 - 2)
        hRgn3 = CreateRectRgn_(dx1 + deltaX,  dy1 + deltaY, dx2 - deltaX, dy2 - deltaY)
          CombineRgn_(hRgn, hRgn2, hRgn3, #RGN_XOR)
          RedrawWindow_(WindowID(#Fenetre), 0, hRgn, #RDW_INVALIDATE | #RDW_UPDATENOW | #RDW_ALLCHILDREN)
        DeleteObject_(hRgn)
        DeleteObject_(hRgn2)
        DeleteObject_(hRgn3)
        
        hDC = GetDC_(WindowID(#Fenetre))
        hBrush = CreateSolidBrush_(RGB(180, 32, 32))
        hRgn = CreateRectRgn_(dx1, dy1, dx2, dy2)
          FrameRgn_(hDC, hRgn, hBrush, 2, 2)
        DeleteObject_(hBrush)
        DeleteObject_(hRgn)
       
       EndIf
      
      Else
        Depart_X = -1
      EndIf   
      
    Case #WM_LBUTTONUP
     
     If Not GetAsyncKeyState_(#VK_CONTROL)
      MouseX = WindowMouseX(#Fenetre)
      MouseY = WindowMouseY(#Fenetre)
      DessineFleche(Depart_X, Depart_Y, MouseX , MouseY, 16, RGB(16, 16, 16), RGB(75, 64, 64), RGB(128, 140, 128), RGB(230, 230, 250))    
     EndIf 
      
  EndSelect

Until Evenement = #PB_Event_CloseWindow
UnhookWindowsHookEx_(HookMouse)

Procedure WinCB(hWnd, Msg, wParam, lParam)

  Select Msg
    Case #WM_PAINT

      hBmp = ImageID(#Fenetre_BG)
      hDC = BeginPaint_(hWnd, @ps.PAINTSTRUCT)
     
        hDC2 = CreateCompatibleDC_(hDC)
       
          SelectObject_ (hDC2, hBmp)
          BitBlt_(hDC, 0, 0, WindowWidth(#Fenetre), WindowHeight(#Fenetre), hDC2, 0, 0, #SRCCOPY)
          ReleaseDC_(hWnd, hDC)
         
        DeleteDC_(hDC2)
      EndPaint_(hWnd, @ps)
      ProcedureReturn #True
   
    Default
      ProcedureReturn #PB_ProcessPureBasicEvents
   
  EndSelect

EndProcedure

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 14:10
par kernadec
@Kcc
je pense que si tu bouge un gadget, il faut reprendre une photo
mais si tu prend une nouvelle photo, il te faut effacer ou rafraichir les drawtext,
car il faut prendre une photo que des gadget pour garder la transparence des drawtext ,
sinon la flèche passeras au dessus.

Le code de la photo c'est l' entète du programme

@ Cederavic
je vois que toi aussi tu t'amuse bien. merci
je trouve ta solution remarquable et plus souple car il serait très facile de disposer de plusieurs
flèches et de rajouter des gadget la demande les déplacer etc...
excellent.

Cordialement

Code : Tout sélectionner

StartDrawing(ImageOutput(#Image_0))
Box(0,0,winl,winh,RGB(225,225,225))
StopDrawing()
ImageGadget(#ImageGadget,Posx,Posy,200,200,ImageID(#Image_0))
SetGadgetState(#ImageGadget,ImageID(#Image_0))
ButtonGadget(#boutonGadget_0, 120,80, 50, 30, "B0" )
ButtonGadget(#boutonGadget_1, 440,180, 50, 30, "B1" )
ButtonGadget(#boutonGadget_2, 240,390, 50, 30, "B2" )
ButtonGadget(#boutonGadget_3, 620,290, 50, 30, "B3" )
; ajout de gadget à suivre
DC=StartDrawing(ImageOutput(#Image_2))      ; Photo Windows
For i=1 To 50 :WindowEvent( ):Next i    ; boucle de dessin des bouton sur la fenêtre avant screenshot
BitBlt_(DC,0,0,ImageWidth(#Image_2),ImageHeight(#Image_2),GetDC_(hwnd),0,0,#SRCCOPY)
StopDrawing()

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 14:23
par Kwai chang caine
Oulala ....ça deviens compliqué et j'crois que CEDERAVIC il est en train de nous mettre un "vent" la :(
J'arrive deja meme plus a lire sa plaque d'immatriculation :?

Car une chose que je n'avais pas pensé c'est qu'avec ton code.....je ne suis pas arrivé a remonter le PbId, ça me donne zero...et zero c'est pas beaucoup :(
Je pense que ça va me poser des problemes avec tout le foutoir que j'ai deja mis en place dans mon prog :(

J'espere que je ne vais pas te vexer, mais j'irais bien voir comment il est le sable dans le bac a CEDERAVIC :roll:
Si tu veux je te laisse ma pelle et mon sceau ???? y va peut etre me preter les siens ???
Tu peux aussi venir dans le meme bac.....on doit rentrer a trois :lol:

Je pense que la meilleure solution est celle de CEDERAVIC, je me demande comment je n'y ai pas pensé avant, pour ne pas dire du depart ?? :roll:

Ah siiiiii !!!! je me rappelle pourquoi ...c'est qu'a force de frequenter des tronches...
j'ai oublié que j'etais une nouille en programmation :mrgreen:

Reste encore a adapter dans mon code...car c'est souvent la que je m'apperçois d'une autre tuile

Je te te remercie encore une fois de ta gentillesse et de ta competence KERNADEC. 8)

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 14:36
par kernadec
@Kcc
pas de soucis,
je l'ai dit dans le post précèdent la solution de Cederavic est top.
je comprend que tu l'adopte, c'est même ton intérêt hi hi hi hi...

bonne journée a tous

Cordialement

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 14:51
par Kwai chang caine
Des fois ça m'embete que les gens y se defoncent pour moi et qu'a la fin ça serve pas a grand chose, j'ai honte :oops:
Je l'ai deja dit, mais je court toujours apres le temps, alors je sais ce qu'il vaut.
Et comme je ne code jamais pour m'entrainer, mais toujours pour essayer d'avancer dans un programme...et ben ça me fait mal pour les autres :(
J'suis content que tu sois pas triste ou en colere :D
FlecheMan a écrit :merci, pour ton humour dans les posts
Moi je te remercie de ton aide precieuse, meme si elle n'a pas aboutie :(

Vu que j'suis un rigolo en prog...la moindre des choses c'est d'etre aussi rigolo tout court
C'est la seule chose que je peux offrir en echange de votre aide et de votre gentillesse a tous :oops:

Alors c'est le deal sur les deux forums...moi j'dis des conneries...et vous tous des choses intelligentes....et tout le monde il est content :lol:
C'est juste un peu plus dur en anglais...vu que je le parle bien que sous la torture :?

Et comme dirait mon ami HENRI qui me manque aussi :(

Faut Riiigoleeeer, hihihii :lol: Faut Riiigoleeeer, hihihii, avant qu'le ciel nous tombe sur la teeete :lol: :lol:
Faut Riiigoleeeer Faut Riiigoleeeer, Pour empêcher le ciel de tomber :lol: :lol:


Image

Re: Rendre transparent une couleur dans une imagegadget

Publié : mer. 17/févr./2010 18:00
par cederavic
Je vous prêtrais bien ma pelle mais ça ne vous servirais à rien... L'API win32 faut l'attaquer au marteau piqueur :P et j'ai justement plusieurs sortie sur mon compresseurs, vous pouvez vous y brancher sans soucis :)
Plus serieusement, mon code c'est du bricolage, c'est très loin de la perfection...
Mais je continu à faire mumuse 8)