
Rendre transparent une couleur dans une imagegadget
Re: Rendre transparent une couleur dans une imagegadget
Je pense etre sur une bonne piste... Je voulais te donner quelque chose de fonctionnel ce soir mais je n'ai pas pu avancer comme je le voulais. C'est mon annif aurjou'dhui alors entre la famille, les potes etc j'ai pas eu vraiment le temps. Je te ferais ça pour ce weekend 

- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Rendre transparent une couleur dans une imagegadget
Merci beaucoup CEDERAVIC.....
Te casse pas la tete, y'a pas le feu au lac non plus....c'est super gentil
Avec ton talent...tu va me faire regretter d'avoir commencé mon programme sans te demander comment m'y prendre avant
En tout cas bon anniversaire...c'est important un anniversaire...surtout si tu as noir de gens pour te le feter
Et pis 20 ans...ça se fete pas tous les jours
Te casse pas la tete, y'a pas le feu au lac non plus....c'est super gentil
Avec ton talent...tu va me faire regretter d'avoir commencé mon programme sans te demander comment m'y prendre avant

En tout cas bon anniversaire...c'est important un anniversaire...surtout si tu as noir de gens pour te le feter

Et pis 20 ans...ça se fete pas tous les jours

Re: Rendre transparent une couleur dans une imagegadget
bon anniversaire alors !! 



Re: Rendre transparent une couleur dans une imagegadget
Bah le forum ne m'a pas dit qu'il y avait de nouveaux message ici
Merci
Bon voila un truc "à peut pret" présentable... c'est très loin d'être terminé et c'est "sale" mais c'est pour te donner une idée de mon idée (ça me fait byzard cette phrase
)
C'est tout simple, click au milieux de la flèche pour la déplacer, et sur les bouts pour la euh... tu verra
Je ferais de belles flèches plus tard, je vais d'abord finir la partie fonctionnelle!
Edit : tu utilisais tres mal ton Hook pour la sourie, regarde comment je fais 

Merci

Bon voila un truc "à peut pret" présentable... c'est très loin d'être terminé et c'est "sale" mais c'est pour te donner une idée de mon idée (ça me fait byzard cette phrase

C'est tout simple, click au milieux de la flèche pour la déplacer, et sur les bouts pour la euh... tu verra

Je ferais de belles flèches plus tard, je vais d'abord finir la partie fonctionnelle!
Code : Tout sélectionner
Structure ArrowData
IsArrow.b
GadgetID.l
hGdt.l
ImageID.l
hBmp.l
SnapImg.l
x.l
y.l
Size.b
Width.l
Height.l
Locked.b
StartMove.point
Moving.b
AnchorA.point
AnchorA_Moving.b
AnchorB.point
AnchorB_Moving.b
EndStructure
Structure MSLLHOOKSTRUCT
pt.point
mouseData.l
flags.l
time.l
dwExtraInfo.l
EndStructure
Enumeration
#ArrowType_Direct
#ArrowType_Kneed
#ArrowType_Rounded
EndEnumeration
Declare.l ArrowGadget(GadgetID.l, x.l, y.l, width.l, height.l, type.b = #ArrowType_Direct)
Declare.b UpdateArrowGadget(GadgetID.l)
Declare.l DrawArrow(Image.l, x1.l, y1.l, x2.l, y2.l, size.l, BorderlColor.l, GradientColor1.l, GradientColor2.l, GradientColor3.l)
Declare.l MouseHookCallback(nCode.l, wParam.l, lParam.l)
Declare.l WindowCallback(hWnd.l, Msg.l, lParam.l, wParam.l)
#WND_Main = 0
#TB_Main = 0
Enumeration
#GDT_Arrow = 12
EndEnumeration
Global hMouseHook.l, *CurrentArrow.ArrowData
hWnd = OpenWindow(0, 0, 0, 800, 600, "ArrowGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Invisible)
ArrowGadget(#GDT_Arrow, 10, 10, 100, 100)
ButtonGadget(20, 200, 200, 150, 30, "test")
SetWindowCallback(@WindowCallback())
TextGadget(21, 300, 10, 110, 20, "yoooooo")
CreateImage(1, 20, 20)
ImageGadget(22, 400, 400, 20, 20, ImageID(1))
hMouseHook = SetWindowsHookEx_(#WH_MOUSE_LL, @MouseHookCallback(), GetModuleHandle_(0), 0)
CreateImage(2, 800, 600)
StartDrawing(ImageOutput(2))
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()
HideWindow(#WND_Main, 0)
Repeat
Select WaitWindowEvent(2)
Case #WM_CLOSE
Quit = #True
Case #PB_Event_Gadget
Debug EventGadget()
EndSelect
Until Quit = #True
Procedure.l MouseHookCallback(nCode.l, wParam.l, lParam.l)
Shared MouseX.l, MouseY.l
*MouseInfo.MSLLHOOKSTRUCT = lParam
*UserData.ArrowData
GadgetID.l = GetDlgCtrlID_(WindowFromPoint_(*MouseInfo\pt\x | (*MouseInfo\pt\y << 32)))
If IsGadget(GadgetID)
*UserData = GetGadgetData(GadgetID)
If *UserData <> #Null
If *UserData\IsArrow = #True And *UserData\Locked = #False
*CurrentArrow = *UserData
If nCode >= 0
hWndParent.l = GetParent_(*UserData\hGdt)
GetWindowInfo_(hWndParent, @WndInfo.WINDOWINFO)
oldMouseX = MouseX : oldMouseY = MouseY
MouseX.l = *MouseInfo\pt\x - WndInfo\rcClient\left
MouseY.l = *MouseInfo\pt\y - WndInfo\rcClient\top
MouseDeltaX = MouseX - oldMouseX : MouseDeltaY = MouseY - oldMouseY
Select wParam
Case #WM_LBUTTONDOWN
rc1.Rect
rc1\left = *UserData\x + *UserData\AnchorA\x - *UserData\Size / 2
rc1\top = *UserData\y + *UserData\AnchorA\y - *UserData\Size / 2
rc1\right = *UserData\x + *UserData\AnchorA\x + *UserData\Size / 2
rc1\bottom = *UserData\y + *UserData\AnchorA\y + *UserData\Size / 2
rc2.Rect
rc2\left = *UserData\x + *UserData\AnchorB\x - *UserData\Size / 2
rc2\top = *UserData\y + *UserData\AnchorB\y - *UserData\Size / 2
rc2\right = *UserData\x + *UserData\AnchorB\x + *UserData\Size / 2
rc2\bottom = *UserData\y + *UserData\AnchorB\y + *UserData\Size / 2
rc3.Rect
rc3\left = *UserData\x
rc3\top = *UserData\y
rc3\right = *UserData\x + *UserData\Width
rc3\bottom = *UserData\y + *UserData\Height
If PtInRect_(@rc1, MouseX | (MouseY << 32))
*UserData\AnchorA_Moving = #True
ElseIf PtInRect_(@rc2, MouseX | (MouseY << 32))
*UserData\AnchorB_Moving = #True
ElseIf PtInRect_(@rc3, MouseX | (MouseY << 32))
*UserData\Moving = #True
*UserData\StartMove\x = MouseX - *UserData\x
*UserData\StartMove\y = MouseY - *UserData\y
Else
*UserData\AnchorA_Moving = #False
*UserData\AnchorB_Moving = #False
*UserData\Moving = #False
EndIf
If (*UserData\Moving = #True Or *UserData\AnchorA_Moving = #True Or *UserData\AnchorB_Moving = #True)
HideGadget(*UserData\GadgetID, 1)
UpdateWindow_(hWndParent)
hDC = GetDC_(hWndParent)
*UserData\SnapImg = CreateImage(#PB_Any, WndInfo\rcClient\right, WndInfo\rcClient\bottom)
hDC2 = StartDrawing(ImageOutput(*UserData\SnapImg))
BitBlt_(hDC2, 0, 0, WndInfo\rcClient\right, WndInfo\rcClient\bottom, hDC, 0, 0, #SRCPAINT | $40000000)
StopDrawing()
ReleaseDC_(hWndParent, hDC)
EndIf
Case #WM_LBUTTONUP
*UserData\AnchorA_Moving = #False
*UserData\AnchorB_Moving = #False
*UserData\Moving = #False
UpdateArrowGadget(GadgetID)
HideGadget(*UserData\GadgetID, 0)
UpdateWindow_(hWndParent)
Case #WM_MOUSEMOVE
If (*UserData\Moving = #True Or *UserData\AnchorA_Moving = #True Or *UserData\AnchorB_Moving = #True)
StartDrawing(WindowOutput(GetDlgCtrlID_(hWndParent)))
DrawImage(ImageID(*UserData\SnapImg), 0, 0)
Circle(*UserData\x + *UserData\AnchorA\x, *UserData\y + *UserData\AnchorA\y, *UserData\Size / 2, #Green)
Circle(*UserData\x + *UserData\AnchorB\x, *UserData\y + *UserData\AnchorB\y, *UserData\Size / 2, #Green)
LineXY(*UserData\x + *UserData\AnchorA\x, *UserData\y + *UserData\AnchorA\y, *UserData\x + *UserData\AnchorB\x, *UserData\y + *UserData\AnchorB\y, #Green)
StopDrawing()
EndIf
If *UserData\AnchorA_Moving = #True
*UserData\AnchorA\x = MouseX - *UserData\x
*UserData\AnchorA\y = MouseY - *UserData\y
EndIf
If *UserData\AnchorB_Moving = #True
*UserData\AnchorB\x = MouseX - *UserData\x
*UserData\AnchorB\y = MouseY - *UserData\y
EndIf
If *UserData\Moving = #True
*UserData\AnchorA\x + MouseDeltaX
*UserData\AnchorA\y + MouseDeltaY
*UserData\AnchorB\x + MouseDeltaX
*UserData\AnchorB\y + MouseDeltaY
EndIf
Case #WM_MOUSEWHEEL
Case #WM_RBUTTONDOWN
Case #WM_RBUTTONUP
EndSelect
EndIf
EndIf
EndIf
Else
If nCode >= 0
If *CurrentArrow <> #Null
hWndParent.l = GetParent_(*CurrentArrow\hGdt)
GetWindowInfo_(hWndParent, @WndInfo.WINDOWINFO)
oldMouseX = MouseX : oldMouseY = MouseY
MouseX.l = *MouseInfo\pt\x - WndInfo\rcClient\left
MouseY.l = *MouseInfo\pt\y - WndInfo\rcClient\top
MouseDeltaX = MouseX - oldMouseX : MouseDeltaY = MouseY - oldMouseY
EndIf
Select wParam
Case #WM_LBUTTONUP
If *CurrentArrow <> #Null
*CurrentArrow\AnchorA_Moving = #False
*CurrentArrow\AnchorB_Moving = #False
*CurrentArrow\Moving = #False
UpdateArrowGadget(*CurrentArrow\GadgetID)
HideGadget(*CurrentArrow\GadgetID, 0)
UpdateWindow_(hWndParent)
EndIf
Case #WM_MOUSEMOVE
If *CurrentArrow <> #Null And (*CurrentArrow\Moving = #True Or *CurrentArrow\AnchorA_Moving = #True Or *CurrentArrow\AnchorB_Moving = #True)
StartDrawing(WindowOutput(GetDlgCtrlID_(hWndParent)))
DrawImage(ImageID(*CurrentArrow\SnapImg), 0, 0)
Circle(*CurrentArrow\x + *CurrentArrow\AnchorA\x, *CurrentArrow\y + *CurrentArrow\AnchorA\y, *CurrentArrow\Size / 2, #Green)
Circle(*CurrentArrow\x + *CurrentArrow\AnchorB\x, *CurrentArrow\y + *CurrentArrow\AnchorB\y, *CurrentArrow\Size / 2, #Green)
LineXY(*CurrentArrow\x + *CurrentArrow\AnchorA\x, *CurrentArrow\y + *CurrentArrow\AnchorA\y, *CurrentArrow\x + *CurrentArrow\AnchorB\x, *CurrentArrow\y + *CurrentArrow\AnchorB\y, #Green)
StopDrawing()
If *CurrentArrow\AnchorA_Moving = #True
*CurrentArrow\AnchorA\x = MouseX - *CurrentArrow\x
*CurrentArrow\AnchorA\y = MouseY - *CurrentArrow\y
EndIf
If *CurrentArrow\AnchorB_Moving = #True
*CurrentArrow\AnchorB\x = MouseX - *CurrentArrow\x
*CurrentArrow\AnchorB\y = MouseY - *CurrentArrow\y
EndIf
If *CurrentArrow\Moving = #True
*CurrentArrow\AnchorA\x + MouseDeltaX
*CurrentArrow\AnchorA\y + MouseDeltaY
*CurrentArrow\AnchorB\x + MouseDeltaX
*CurrentArrow\AnchorB\y + MouseDeltaY
EndIf
EndIf
EndSelect
EndIf
EndIf
ProcedureReturn CallNextHookEx_(hMouseHook, nCode, wParam, lParam)
EndProcedure
Procedure.b UpdateArrowGadget(GadgetID.l)
If IsGadget(GadgetID)
*UserData.ArrowData = GetGadgetData(GadgetID)
; Redefine Sizes
If *UserData\AnchorA\x < *UserData\AnchorB\x
MinX = *UserData\AnchorA\x
MaxX = *UserData\AnchorB\x
newWidth = Abs(MaxX - MinX) + *UserData\Size
*UserData\x = *UserData\x + MinX - *UserData\Size / 2
*UserData\AnchorA\x = *UserData\Size / 2
*UserData\AnchorB\x = newWidth - *UserData\Size / 2
*UserData\Width = newWidth
Else
MinX = *UserData\AnchorB\x
MaxX = *UserData\AnchorA\x
newWidth = Abs(MaxX - MinX) + *UserData\Size
*UserData\x = *UserData\x + MinX - *UserData\Size / 2
*UserData\AnchorB\x = *UserData\Size / 2
*UserData\AnchorA\x = newWidth - *UserData\Size / 2
*UserData\Width = newWidth
EndIf
If *UserData\AnchorA\y < *UserData\AnchorB\y
MinY = *UserData\AnchorA\y
MaxY = *UserData\AnchorB\y
newHeight = Abs(MaxY - MinY) + *UserData\Size
*UserData\y = *UserData\y + MinY - *UserData\Size / 2
*UserData\AnchorA\y = *UserData\Size / 2
*UserData\AnchorB\y = newHeight - *UserData\Size / 2
*UserData\Height = newHeight
Else
MinY = *UserData\AnchorB\y
MaxY = *UserData\AnchorA\y
newHeight = Abs(MaxY - MinY) + *UserData\Size
*UserData\y = *UserData\y + MinY - *UserData\Size / 2
*UserData\AnchorB\y = *UserData\Size / 2
*UserData\AnchorA\y = newHeight - *UserData\Size / 2
*UserData\Height = newHeight
EndIf
FreeImage(*UserData\ImageID)
*UserData\ImageID = CreateImage(#PB_Any, *UserData\Width, *UserData\Height, 32)
*UserData\hBmp = ImageID(*UserData\ImageID)
StartDrawing(ImageOutput(*UserData\ImageID))
Box(*UserData\AnchorA\x - *UserData\Size / 2, *UserData\AnchorA\y - *UserData\Size / 2, *UserData\Size, *UserData\Size, RGBA(255, 0, 0, 255))
Circle(*UserData\AnchorB\x, *UserData\AnchorB\y, 2, RGBA(255, 0, 0, 255))
If *UserData\AnchorA\x <= *UserData\AnchorB\x And *UserData\AnchorA\y <= *UserData\AnchorB\y
LineXY(*UserData\AnchorA\x + *UserData\Size / 2, *UserData\AnchorA\y - *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y - 2, RGBA(255, 0, 0, 255))
LineXY(*UserData\AnchorA\x - *UserData\Size / 2, *UserData\AnchorA\y + *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y + 2, RGBA(255, 0, 0, 255))
ElseIf *UserData\AnchorA\x <= *UserData\AnchorB\x And *UserData\AnchorA\y >= *UserData\AnchorB\y
LineXY(*UserData\AnchorA\x - *UserData\Size / 2, *UserData\AnchorA\y - *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y - 2, RGBA(255, 0, 0, 255))
LineXY(*UserData\AnchorA\x + *UserData\Size / 2, *UserData\AnchorA\y + *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y + 2, RGBA(255, 0, 0, 255))
ElseIf *UserData\AnchorA\x >= *UserData\AnchorB\x And *UserData\AnchorA\y <= *UserData\AnchorB\y
LineXY(*UserData\AnchorA\x - *UserData\Size / 2, *UserData\AnchorA\y - *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y - 2, RGBA(255, 0, 0, 255))
LineXY(*UserData\AnchorA\x + *UserData\Size / 2, *UserData\AnchorA\y + *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y + 2, RGBA(255, 0, 0, 255))
ElseIf*UserData\AnchorA\x >= *UserData\AnchorB\x And *UserData\AnchorA\y >= *UserData\AnchorB\y
LineXY(*UserData\AnchorA\x - *UserData\Size / 2, *UserData\AnchorA\y + *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y + 2, RGBA(255, 0, 0, 255))
LineXY(*UserData\AnchorA\x + *UserData\Size / 2, *UserData\AnchorA\y - *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y - 2, RGBA(255, 0, 0, 255))
EndIf
FillArea(*UserData\Width / 2 , *UserData\Height / 2, -1, RGBA(255, 0, 0, 255))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, *UserData\Width, *UserData\Height, RGBA(0, 0, 0, 0))
Box(*UserData\AnchorA\x - *UserData\Size / 2, *UserData\AnchorA\y - *UserData\Size / 2, *UserData\Size, *UserData\Size, RGBA(255, 0, 0, 255))
Circle(*UserData\AnchorB\x, *UserData\AnchorB\y, 2, RGBA(255, 0, 0, 255))
If *UserData\AnchorA\x <= *UserData\AnchorB\x And *UserData\AnchorA\y <= *UserData\AnchorB\y
LineXY(*UserData\AnchorA\x + *UserData\Size / 2, *UserData\AnchorA\y - *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y - 2, RGBA(255, 0, 0, 255))
LineXY(*UserData\AnchorA\x - *UserData\Size / 2, *UserData\AnchorA\y + *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y + 2, RGBA(255, 0, 0, 255))
ElseIf *UserData\AnchorA\x <= *UserData\AnchorB\x And *UserData\AnchorA\y >= *UserData\AnchorB\y
LineXY(*UserData\AnchorA\x - *UserData\Size / 2, *UserData\AnchorA\y - *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y - 2, RGBA(255, 0, 0, 255))
LineXY(*UserData\AnchorA\x + *UserData\Size / 2, *UserData\AnchorA\y + *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y + 2, RGBA(255, 0, 0, 255))
ElseIf *UserData\AnchorA\x >= *UserData\AnchorB\x And *UserData\AnchorA\y <= *UserData\AnchorB\y
LineXY(*UserData\AnchorA\x - *UserData\Size / 2, *UserData\AnchorA\y - *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y - 2, RGBA(255, 0, 0, 255))
LineXY(*UserData\AnchorA\x + *UserData\Size / 2, *UserData\AnchorA\y + *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y + 2, RGBA(255, 0, 0, 255))
ElseIf*UserData\AnchorA\x >= *UserData\AnchorB\x And *UserData\AnchorA\y >= *UserData\AnchorB\y
LineXY(*UserData\AnchorA\x - *UserData\Size / 2, *UserData\AnchorA\y + *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y + 2, RGBA(255, 0, 0, 255))
LineXY(*UserData\AnchorA\x + *UserData\Size / 2, *UserData\AnchorA\y - *UserData\Size / 2, *UserData\AnchorB\x, *UserData\AnchorB\y - 2, RGBA(255, 0, 0, 255))
EndIf
FillArea(*UserData\Width / 2 , *UserData\Height / 2, -1, RGBA(255, 0, 0, 255))
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(*UserData\AnchorA\x, *UserData\AnchorA\y, *UserData\AnchorB\x, *UserData\AnchorB\y)
FrontColor(#Red) : GradientColor(0.80, #Blue) : BackColor(#Green)
Box(0, 0, *UserData\Width, *UserData\Height)
StopDrawing()
ResizeGadget(GadgetID, *UserData\x, *UserData\y, *UserData\Width, *UserData\Height)
SetGadgetState(GadgetID, *UserData\hBmp)
Else
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
Procedure.l ArrowGadget(GadgetID.l, x.l, y.l, width.l, height.l, type.b = #ArrowType_Direct)
*UserData.ArrowData = AllocateMemory(SizeOf(ArrowData))
*UserData\IsArrow = #True
*UserData\GadgetID = GadgetID
*UserData\ImageID = CreateImage(#PB_Any, width, height, 32)
*UserData\hBmp = ImageID(*UserData\ImageID)
*UserData\Size = 24
*UserData\x = x
*UserData\y = y
*UserData\Width = width
*UserData\Height = height
*UserData\AnchorA\x = *UserData\Size / 2
*UserData\AnchorA\y = height / 2
*UserData\AnchorB\x = Width - *UserData\Size / 2
*UserData\AnchorB\y = height / 2
Result.l = ImageGadget(GadgetID, x, y, width, height, *UserData\hBmp)
If GadgetID = #PB_Any
*UserData\hGdt = GadgetID(Result)
Else
*UserData\hGdt = GadgetID(GadgetID)
EndIf
SetGadgetData(*UserData\GadgetID, *UserData)
UpdateArrowGadget(GadgetID)
ProcedureReturn Result
EndProcedure
Procedure.l WindowCallback(hWnd.l, Msg.l, wParam.l, lParam.l)
Result.l = #PB_ProcessPureBasicEvents
Select Msg
Case #WM_PAINT
hBmp = ImageID(2)
hDC = BeginPaint_(hWnd, @ps.PAINTSTRUCT)
hDC2 = CreateCompatibleDC_(hDC)
SelectObject_ (hDC2, hBmp)
BitBlt_(hDC, 0, 0, WindowWidth(#WND_Main), WindowHeight(#WND_Main), hDC2, 0, 0, #SRCCOPY)
ReleaseDC_(hWnd, hDC)
DeleteDC_(hDC2)
EndPaint_(hWnd, @ps)
ProcedureReturn #True
Result = #True
EndSelect
ProcedureReturn Result
EndProcedure
Procedure.l DrawArrow(Image.l, x1.l, y1.l, x2.l, y2.l, size.l, BorderlColor.l, GradientColor1.l, GradientColor2.l, GradientColor3.l)
width = Abs(x2 - x1)
height = Abs(y2 - y1)
If width <= 0 : width = 1 : EndIf : If height <= 0 : height = 1 : EndIf
ResizeImage(Image, width, height, 32)
StartDrawing(ImageOutput(Image))
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(0, size, 0, height - size - 1)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(size * 2 + 1, 1, 2, size * 2, BorderlColor)
LineXY(size * 2 , 1, size * 4 - 1, size * 2, BorderlColor)
LineXY(0, size * 2 + 1, size * 1.5 - 1, size * 2 + 1, BorderlColor)
LineXY(size * 2.5, size * 2 + 1, size * 4, size * 2 + 1, BorderlColor)
LineXY(size * 1.5, size * 2 + 1, size * 1.5, height - size / 2, BorderlColor)
LineXY(size * 2.5 - 1, size * 2 + 1, size * 2.5 - 1, height - size * 1.5, BorderlColor)
LineXY(size * 1.5, height - size / 2 - 1, width, height - size / 2 - 1, BorderlColor)
LineXY(size * 2.5 - 1, height - size * 1.5, width, height - size * 1.5, BorderlColor)
LineXY( width - 1, height - size * 1.5, width - 1, height - size / 2 - 1, BorderlColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
Box(size * 1.5, height - size - size / 2, width - size, size, RGBA(0, 0, 0, 255))
Box(size * 1.5, size, size, height - size - size / 2, RGBA(0, 0, 0, 255))
For ty = 0 To size * 2
LineXY(size * 2 - ty +1, ty + 1, size * 2 + ty, ty + 1, RGBA(0, 0, 0, 255))
Next
LineXY(0, 1, width, 1, RGBA(0, 0, 0, 0))
StopDrawing()
hDC = StartDrawing(ImageOutput(Image))
If width < size * 4 Or height < size * 4
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
ElseIf x1 < x2 And y1 > y2
StretchBlt_(hDC, width, 0, -width, height, hDC, 0, 0, width, height, #SRCCOPY)
ElseIf x1 < x2 And y1 < y2
StretchBlt_(hDC, width, height, -width, -height, hDC, 0, 0, width, height, #SRCCOPY)
ElseIf x1 > x2 And y1 < y2
StretchBlt_(hDC, 0, height, width, -height, hDC, 0, 0, width, height, #SRCCOPY)
EndIf
StopDrawing()
EndProcedure

- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Rendre transparent une couleur dans une imagegadget
La on commence le Karl lagarfeld de la programmation...Callback, Structure, API, Hook....
C'est de la hautre couture....heureusement que tu m'as dit que c'etait sale...j'm'en serais pas apperçu
Si tu veux un jour, je te montrerais des codes que j'ai fait .....qui sont "sales"...ou plutot comment dirais je....a chier partout serait plus juste et encore un doux euphemisme
Cool le mode de deplacement.....
Par contre ta fleche elle a trop visité la haute couture...elle est tout en couleur
Moi je preferais de loin ta splendide fleche a angle droit precedente que j'ai commencé à incorporer dans mon code mercredi...
Car bon celle la....c'est pas vraiment une fleche..si ????
D'un autre coté, ça m'a donné une idée, si tu arrivais par un moyen magique, je ne sais pas lequel, à faire une fleche super bien nette comme celle d'avant, qui peut etre droite ET en angle droit....bah je pourrais laisser tomber mes petites fleches bleue en PNG toutes "pourites" qui ne sont pas resizable...et donc bien moins jolies que les tiennes...
Comme ça je pourrais faire ça =====> ça <===== et aussi en verticale, et selon un procédé pouvoir si on le désire les "casser" en angle droit, pour pouvoir faire comme celle que tu m'avais faites.
En tout cas merci beaucoup de continuer a m'aider
C'est de la hautre couture....heureusement que tu m'as dit que c'etait sale...j'm'en serais pas apperçu

Si tu veux un jour, je te montrerais des codes que j'ai fait .....qui sont "sales"...ou plutot comment dirais je....a chier partout serait plus juste et encore un doux euphemisme

Cool le mode de deplacement.....

Par contre ta fleche elle a trop visité la haute couture...elle est tout en couleur

Moi je preferais de loin ta splendide fleche a angle droit precedente que j'ai commencé à incorporer dans mon code mercredi...

Car bon celle la....c'est pas vraiment une fleche..si ????
D'un autre coté, ça m'a donné une idée, si tu arrivais par un moyen magique, je ne sais pas lequel, à faire une fleche super bien nette comme celle d'avant, qui peut etre droite ET en angle droit....bah je pourrais laisser tomber mes petites fleches bleue en PNG toutes "pourites" qui ne sont pas resizable...et donc bien moins jolies que les tiennes...
Comme ça je pourrais faire ça =====> ça <===== et aussi en verticale, et selon un procédé pouvoir si on le désire les "casser" en angle droit, pour pouvoir faire comme celle que tu m'avais faites.
En tout cas merci beaucoup de continuer a m'aider

Re: Rendre transparent une couleur dans une imagegadget
La fleche est moche oui, tres moche! Mais comme je l'ai dit, je boss essentielement sur la partie fonctionnelle pour l'instant (pas le graphisme quoi)... Mais je vois que la fleche en elle meme te tient à coeur, alors la voila

Code : Tout sélectionner
Structure ArrowData
IsArrow.b
Type.b
GadgetID.l
hGdt.l
ImageID.l
hBmp.l
SnapImg.l
x.l
y.l
Size.b
Width.l
Height.l
Locked.b
StartMove.point
Moving.b
AnchorA.point
AnchorA_Moving.b
AnchorB.point
AnchorB_Moving.b
EndStructure
Structure MSLLHOOKSTRUCT
pt.point
mouseData.l
flags.l
time.l
dwExtraInfo.l
EndStructure
Enumeration
#ArrowType_Direct
#ArrowType_Kneed
#ArrowType_Rounded
EndEnumeration
Declare.l ArrowGadget(GadgetID.l, x.l, y.l, width.l, height.l, type.b = #ArrowType_Direct)
Declare.b UpdateArrowGadget(GadgetID.l)
Declare.l DrawArrow(Image.l, x1.l, y1.l, x2.l, y2.l, size.l, BorderlColor.l, GradientColor1.l, GradientColor2.l, GradientColor3.l)
Declare.f GetAngle(x1, y1, x2, y2)
Declare.l MouseHookCallback(nCode.l, wParam.l, lParam.l)
Declare.l WindowCallback(hWnd.l, Msg.l, lParam.l, wParam.l)
#WND_Main = 0
#TB_Main = 0
Enumeration
#GDT_Arrow = 12
EndEnumeration
Global hMouseHook.l, *CurrentArrow.ArrowData
hWnd = OpenWindow(0, 0, 0, 800, 600, "ArrowGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Invisible)
ArrowGadget(#GDT_Arrow, 10, 10, 100, 100)
ButtonGadget(20, 200, 200, 150, 30, "test")
SetWindowCallback(@WindowCallback())
TextGadget(21, 300, 10, 110, 20, "yoooooo")
CreateImage(1, 20, 20)
ImageGadget(22, 400, 400, 20, 20, ImageID(1))
hMouseHook = SetWindowsHookEx_(#WH_MOUSE_LL, @MouseHookCallback(), GetModuleHandle_(0), 0)
CreateImage(2, 800, 600)
StartDrawing(ImageOutput(2))
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()
HideWindow(#WND_Main, 0)
Repeat
Select WaitWindowEvent(2)
Case #WM_CLOSE
Quit = #True
Case #PB_Event_Gadget
Debug EventGadget()
EndSelect
Until Quit = #True
Procedure.l MouseHookCallback(nCode.l, wParam.l, lParam.l)
Shared MouseX.l, MouseY.l
*MouseInfo.MSLLHOOKSTRUCT = lParam
*UserData.ArrowData
GadgetID.l = GetDlgCtrlID_(WindowFromPoint_(*MouseInfo\pt\x | (*MouseInfo\pt\y << 32)))
If IsGadget(GadgetID)
*UserData = GetGadgetData(GadgetID)
If *UserData <> #Null
If *UserData\IsArrow = #True And *UserData\Locked = #False
*CurrentArrow = *UserData
If nCode >= 0
hWndParent.l = GetParent_(*UserData\hGdt)
GetWindowInfo_(hWndParent, @WndInfo.WINDOWINFO)
oldMouseX = MouseX : oldMouseY = MouseY
MouseX.l = *MouseInfo\pt\x - WndInfo\rcClient\left
MouseY.l = *MouseInfo\pt\y - WndInfo\rcClient\top
MouseDeltaX = MouseX - oldMouseX : MouseDeltaY = MouseY - oldMouseY
Select wParam
Case #WM_LBUTTONDOWN
rc1.Rect
rc1\left = *UserData\x + *UserData\AnchorA\x - *UserData\Size / 2
rc1\top = *UserData\y + *UserData\AnchorA\y - *UserData\Size / 2
rc1\right = *UserData\x + *UserData\AnchorA\x + *UserData\Size / 2
rc1\bottom = *UserData\y + *UserData\AnchorA\y + *UserData\Size / 2
rc2.Rect
rc2\left = *UserData\x + *UserData\AnchorB\x - *UserData\Size / 2
rc2\top = *UserData\y + *UserData\AnchorB\y - *UserData\Size / 2
rc2\right = *UserData\x + *UserData\AnchorB\x + *UserData\Size / 2
rc2\bottom = *UserData\y + *UserData\AnchorB\y + *UserData\Size / 2
rc3.Rect
rc3\left = *UserData\x
rc3\top = *UserData\y
rc3\right = *UserData\x + *UserData\Width
rc3\bottom = *UserData\y + *UserData\Height
If PtInRect_(@rc1, MouseX | (MouseY << 32))
*UserData\AnchorA_Moving = #True
ElseIf PtInRect_(@rc2, MouseX | (MouseY << 32))
*UserData\AnchorB_Moving = #True
ElseIf PtInRect_(@rc3, MouseX | (MouseY << 32))
*UserData\Moving = #True
*UserData\StartMove\x = MouseX - *UserData\x
*UserData\StartMove\y = MouseY - *UserData\y
Else
*UserData\AnchorA_Moving = #False
*UserData\AnchorB_Moving = #False
*UserData\Moving = #False
EndIf
If (*UserData\Moving = #True Or *UserData\AnchorA_Moving = #True Or *UserData\AnchorB_Moving = #True)
HideGadget(*UserData\GadgetID, 1)
UpdateWindow_(hWndParent)
hDC = GetDC_(hWndParent)
*UserData\SnapImg = CreateImage(#PB_Any, WndInfo\rcClient\right, WndInfo\rcClient\bottom)
hDC2 = StartDrawing(ImageOutput(*UserData\SnapImg))
BitBlt_(hDC2, 0, 0, WndInfo\rcClient\right, WndInfo\rcClient\bottom, hDC, 0, 0, #SRCPAINT | $40000000)
StopDrawing()
ReleaseDC_(hWndParent, hDC)
EndIf
Case #WM_LBUTTONUP
*UserData\AnchorA_Moving = #False
*UserData\AnchorB_Moving = #False
*UserData\Moving = #False
UpdateArrowGadget(GadgetID)
HideGadget(*UserData\GadgetID, 0)
UpdateWindow_(hWndParent)
Case #WM_MOUSEMOVE
If (*UserData\Moving = #True Or *UserData\AnchorA_Moving = #True Or *UserData\AnchorB_Moving = #True)
StartDrawing(WindowOutput(GetDlgCtrlID_(hWndParent)))
DrawingMode(#PB_2DDrawing_Default)
DrawImage(ImageID(*UserData\SnapImg), 0, 0)
LineXY(*UserData\x + *UserData\AnchorA\x, *UserData\y + *UserData\AnchorA\y, *UserData\x + *UserData\AnchorB\x, *UserData\y + *UserData\AnchorB\y, 255)
DrawingMode(#PB_2DDrawing_Transparent )
DrawText(*UserData\x + *UserData\AnchorA\x, *UserData\y + *UserData\AnchorA\y, "FROM", 255)
DrawText(*UserData\x + *UserData\AnchorB\x, *UserData\y + *UserData\AnchorB\y, "TO", 255)
StopDrawing()
EndIf
If *UserData\AnchorA_Moving = #True
*UserData\AnchorA\x = MouseX - *UserData\x
*UserData\AnchorA\y = MouseY - *UserData\y
EndIf
If *UserData\AnchorB_Moving = #True
*UserData\AnchorB\x = MouseX - *UserData\x
*UserData\AnchorB\y = MouseY - *UserData\y
EndIf
If *UserData\Moving = #True
*UserData\AnchorA\x + MouseDeltaX
*UserData\AnchorA\y + MouseDeltaY
*UserData\AnchorB\x + MouseDeltaX
*UserData\AnchorB\y + MouseDeltaY
EndIf
Case #WM_MOUSEWHEEL
Case #WM_RBUTTONDOWN
Case #WM_RBUTTONUP
EndSelect
EndIf
EndIf
EndIf
Else
If nCode >= 0
If *CurrentArrow <> #Null
hWndParent.l = GetParent_(*CurrentArrow\hGdt)
GetWindowInfo_(hWndParent, @WndInfo.WINDOWINFO)
oldMouseX = MouseX : oldMouseY = MouseY
MouseX.l = *MouseInfo\pt\x - WndInfo\rcClient\left
MouseY.l = *MouseInfo\pt\y - WndInfo\rcClient\top
MouseDeltaX = MouseX - oldMouseX : MouseDeltaY = MouseY - oldMouseY
EndIf
Select wParam
Case #WM_LBUTTONUP
If *CurrentArrow <> #Null
*CurrentArrow\AnchorA_Moving = #False
*CurrentArrow\AnchorB_Moving = #False
*CurrentArrow\Moving = #False
UpdateArrowGadget(*CurrentArrow\GadgetID)
HideGadget(*CurrentArrow\GadgetID, 0)
UpdateWindow_(hWndParent)
EndIf
Case #WM_MOUSEMOVE
If *CurrentArrow <> #Null And (*CurrentArrow\Moving = #True Or *CurrentArrow\AnchorA_Moving = #True Or *CurrentArrow\AnchorB_Moving = #True)
StartDrawing(WindowOutput(GetDlgCtrlID_(hWndParent)))
DrawingMode(#PB_2DDrawing_Default)
DrawImage(ImageID(*CurrentArrow\SnapImg), 0, 0)
LineXY(*CurrentArrow\x + *CurrentArrow\AnchorA\x, *CurrentArrow\y + *CurrentArrow\AnchorA\y, *CurrentArrow\x + *CurrentArrow\AnchorB\x, *CurrentArrow\y + *CurrentArrow\AnchorB\y, 255)
DrawingMode(#PB_2DDrawing_Transparent )
DrawText(*CurrentArrow\x + *CurrentArrow\AnchorA\x, *CurrentArrow\y + *CurrentArrow\AnchorA\y, "FROM", 255)
DrawText(*CurrentArrow\x + *CurrentArrow\AnchorB\x, *CurrentArrow\y + *CurrentArrow\AnchorB\y, "TO", 255)
StopDrawing()
If *CurrentArrow\AnchorA_Moving = #True
*CurrentArrow\AnchorA\x = MouseX - *CurrentArrow\x
*CurrentArrow\AnchorA\y = MouseY - *CurrentArrow\y
EndIf
If *CurrentArrow\AnchorB_Moving = #True
*CurrentArrow\AnchorB\x = MouseX - *CurrentArrow\x
*CurrentArrow\AnchorB\y = MouseY - *CurrentArrow\y
EndIf
If *CurrentArrow\Moving = #True
*CurrentArrow\AnchorA\x + MouseDeltaX
*CurrentArrow\AnchorA\y + MouseDeltaY
*CurrentArrow\AnchorB\x + MouseDeltaX
*CurrentArrow\AnchorB\y + MouseDeltaY
EndIf
EndIf
EndSelect
EndIf
EndIf
ProcedureReturn CallNextHookEx_(hMouseHook, nCode, wParam, lParam)
EndProcedure
Procedure.b UpdateArrowGadget(GadgetID.l)
If IsGadget(GadgetID)
*UserData.ArrowData = GetGadgetData(GadgetID)
; Redefine Sizes
If *UserData\AnchorA\x < *UserData\AnchorB\x
MinX = *UserData\AnchorA\x
MaxX = *UserData\AnchorB\x
newWidth = Abs(MaxX - MinX) + *UserData\Size
*UserData\x = *UserData\x + MinX - *UserData\Size / 2
*UserData\AnchorA\x = *UserData\Size / 2
*UserData\AnchorB\x = newWidth - *UserData\Size / 2
*UserData\Width = newWidth
Else
MinX = *UserData\AnchorB\x
MaxX = *UserData\AnchorA\x
newWidth = Abs(MaxX - MinX) + *UserData\Size
*UserData\x = *UserData\x + MinX - *UserData\Size / 2
*UserData\AnchorB\x = *UserData\Size / 2
*UserData\AnchorA\x = newWidth - *UserData\Size / 2
*UserData\Width = newWidth
EndIf
If *UserData\AnchorA\y < *UserData\AnchorB\y
MinY = *UserData\AnchorA\y
MaxY = *UserData\AnchorB\y
newHeight = Abs(MaxY - MinY) + *UserData\Size
*UserData\y = *UserData\y + MinY - *UserData\Size / 2
*UserData\AnchorA\y = *UserData\Size / 2
*UserData\AnchorB\y = newHeight - *UserData\Size / 2
*UserData\Height = newHeight
Else
MinY = *UserData\AnchorB\y
MaxY = *UserData\AnchorA\y
newHeight = Abs(MaxY - MinY) + *UserData\Size
*UserData\y = *UserData\y + MinY - *UserData\Size / 2
*UserData\AnchorB\y = *UserData\Size / 2
*UserData\AnchorA\y = newHeight - *UserData\Size / 2
*UserData\Height = newHeight
EndIf
FreeImage(*UserData\ImageID)
*UserData\ImageID = CreateImage(#PB_Any, *UserData\Width, *UserData\Height, 32)
*UserData\hBmp = ImageID(*UserData\ImageID)
StartDrawing(ImageOutput(*UserData\ImageID))
Select *UserData\Type
Case #ArrowType_Direct
BorderColor = RGBA(32, 32, 32, 255)
GradientColor1 = RGB(230, 230, 250)
GradientColor2 = RGB(128, 140, 128)
GradientColor3 = RGB(75, 64, 64)
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, *UserData\Width, *UserData\Height, 0)
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, *UserData\Width, *UserData\Height, RGBA(0, 0, 0, 0))
a.f = GetAngle(*UserData\AnchorA\x, *UserData\AnchorA\y, *UserData\AnchorB\x, *UserData\AnchorB\y)
x1 = *UserData\AnchorA\x + Cos(a - #PI / 2) * *UserData\Size / 3
y1 = *UserData\AnchorA\y + Sin(a - #PI / 2) * *UserData\Size / 3
x2 = *UserData\AnchorB\x + Cos(a - #PI / 2) * *UserData\Size / 4
y2 = *UserData\AnchorB\y + Sin(a - #PI / 2) * *UserData\Size / 4
x3 = *UserData\AnchorA\x + Cos(a + #PI / 2) * *UserData\Size / 3
y3 = *UserData\AnchorA\y + Sin(a + #PI / 2) * *UserData\Size / 3
x4 = *UserData\AnchorB\x + Cos(a + #PI / 2) * *UserData\Size / 4
y4 = *UserData\AnchorB\y + Sin(a + #PI / 2) * *UserData\Size / 4
x5 = *UserData\AnchorB\x + Cos(a - #PI / 2) * *UserData\Size / 2
y5 = *UserData\AnchorB\y + Sin(a - #PI / 2) * *UserData\Size / 2
x6 = *UserData\AnchorB\x + Cos(a + #PI / 2) * *UserData\Size / 2
y6 = *UserData\AnchorB\y + Sin(a + #PI / 2) * *UserData\Size / 2
If *UserData\AnchorA\y > *UserData\AnchorB\y
x7 = *UserData\AnchorB\x + Cos(a + #PI) * *UserData\Size / 2
y7 = *UserData\AnchorB\y + Sin(a + #PI) * *UserData\Size / 2
Else
x7 = *UserData\AnchorB\x + Cos(a) * *UserData\Size / 2
y7 = *UserData\AnchorB\y + Sin(a) * *UserData\Size / 2
EndIf
LineXY(x1, y1, x2, y2, BorderColor)
LineXY(x3, y3, x4, y4, BorderColor)
LineXY(x1, y1, x3, y3, BorderColor)
LineXY(x2, y2, x5, y5, BorderColor)
LineXY(x4, y4, x6, y6, BorderColor)
LineXY(x5, y5, x7, y7, BorderColor)
LineXY(x6, y6, x7, y7, BorderColor)
FillArea(*UserData\Width / 2 , *UserData\Height / 2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, *UserData\Width, *UserData\Height, RGBA(0, 0, 0, 0))
a.f = GetAngle(*UserData\AnchorA\x, *UserData\AnchorA\y, *UserData\AnchorB\x, *UserData\AnchorB\y)
x1 = *UserData\AnchorA\x + Cos(a - #PI / 2) * *UserData\Size / 3
y1 = *UserData\AnchorA\y + Sin(a - #PI / 2) * *UserData\Size / 3
x2 = *UserData\AnchorB\x + Cos(a - #PI / 2) * *UserData\Size / 4
y2 = *UserData\AnchorB\y + Sin(a - #PI / 2) * *UserData\Size / 4
x3 = *UserData\AnchorA\x + Cos(a + #PI / 2) * *UserData\Size / 3
y3 = *UserData\AnchorA\y + Sin(a + #PI / 2) * *UserData\Size / 3
x4 = *UserData\AnchorB\x + Cos(a + #PI / 2) * *UserData\Size / 4
y4 = *UserData\AnchorB\y + Sin(a + #PI / 2) * *UserData\Size / 4
x5 = *UserData\AnchorB\x + Cos(a - #PI / 2) * *UserData\Size / 2
y5 = *UserData\AnchorB\y + Sin(a - #PI / 2) * *UserData\Size / 2
x6 = *UserData\AnchorB\x + Cos(a + #PI / 2) * *UserData\Size / 2
y6 = *UserData\AnchorB\y + Sin(a + #PI / 2) * *UserData\Size / 2
If *UserData\AnchorA\y > *UserData\AnchorB\y
x7 = *UserData\AnchorB\x + Cos(a + #PI) * *UserData\Size / 2
y7 = *UserData\AnchorB\y + Sin(a + #PI) * *UserData\Size / 2
Else
x7 = *UserData\AnchorB\x + Cos(a) * *UserData\Size / 2
y7 = *UserData\AnchorB\y + Sin(a) * *UserData\Size / 2
EndIf
LineXY(x1, y1, x2, y2, BorderColor)
LineXY(x3, y3, x4, y4, BorderColor)
LineXY(x1, y1, x3, y3, BorderColor)
LineXY(x2, y2, x5, y5, BorderColor)
LineXY(x4, y4, x6, y6, BorderColor)
LineXY(x5, y5, x7, y7, BorderColor)
LineXY(x6, y6, x7, y7, BorderColor)
FillArea(*UserData\Width / 2 , *UserData\Height / 2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(*UserData\AnchorA\x, *UserData\AnchorA\y, *UserData\AnchorB\x, *UserData\AnchorB\y)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, *UserData\Width, *UserData\Height)
DrawingMode(#PB_2DDrawing_Default)
a.f = GetAngle(*UserData\AnchorA\x, *UserData\AnchorA\y, *UserData\AnchorB\x, *UserData\AnchorB\y)
x1 = *UserData\AnchorA\x + Cos(a - #PI / 2) * *UserData\Size / 3
y1 = *UserData\AnchorA\y + Sin(a - #PI / 2) * *UserData\Size / 3
x2 = *UserData\AnchorB\x + Cos(a - #PI / 2) * *UserData\Size / 4
y2 = *UserData\AnchorB\y + Sin(a - #PI / 2) * *UserData\Size / 4
x3 = *UserData\AnchorA\x + Cos(a + #PI / 2) * *UserData\Size / 3
y3 = *UserData\AnchorA\y + Sin(a + #PI / 2) * *UserData\Size / 3
x4 = *UserData\AnchorB\x + Cos(a + #PI / 2) * *UserData\Size / 4
y4 = *UserData\AnchorB\y + Sin(a + #PI / 2) * *UserData\Size / 4
x5 = *UserData\AnchorB\x + Cos(a - #PI / 2) * *UserData\Size / 2
y5 = *UserData\AnchorB\y + Sin(a - #PI / 2) * *UserData\Size / 2
x6 = *UserData\AnchorB\x + Cos(a + #PI / 2) * *UserData\Size / 2
y6 = *UserData\AnchorB\y + Sin(a + #PI / 2) * *UserData\Size / 2
If *UserData\AnchorA\y > *UserData\AnchorB\y
x7 = *UserData\AnchorB\x + Cos(a + #PI) * *UserData\Size / 2
y7 = *UserData\AnchorB\y + Sin(a + #PI) * *UserData\Size / 2
Else
x7 = *UserData\AnchorB\x + Cos(a) * *UserData\Size / 2
y7 = *UserData\AnchorB\y + Sin(a) * *UserData\Size / 2
EndIf
LineXY(x1, y1, x2, y2, BorderColor)
LineXY(x3, y3, x4, y4, BorderColor)
LineXY(x1, y1, x3, y3, BorderColor)
LineXY(x2, y2, x5, y5, BorderColor)
LineXY(x4, y4, x6, y6, BorderColor)
LineXY(x5, y5, x7, y7, BorderColor)
LineXY(x6, y6, x7, y7, BorderColor)
EndSelect
StopDrawing()
ResizeGadget(GadgetID, *UserData\x, *UserData\y, *UserData\Width, *UserData\Height)
SetGadgetState(GadgetID, *UserData\hBmp)
Else
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
Procedure.l ArrowGadget(GadgetID.l, x.l, y.l, width.l, height.l, type.b = #ArrowType_Direct)
*UserData.ArrowData = AllocateMemory(SizeOf(ArrowData))
*UserData\IsArrow = #True
*UserData\Type = #ArrowType_Direct
*UserData\GadgetID = GadgetID
*UserData\ImageID = CreateImage(#PB_Any, width, height, 32)
*UserData\hBmp = ImageID(*UserData\ImageID)
*UserData\Size = 64
*UserData\x = x
*UserData\y = y
*UserData\Width = width
*UserData\Height = height
*UserData\AnchorA\x = *UserData\Size / 2
*UserData\AnchorA\y = height / 2
*UserData\AnchorB\x = Width - *UserData\Size / 2
*UserData\AnchorB\y = height / 2
Result.l = ImageGadget(GadgetID, x, y, width, height, *UserData\hBmp)
If GadgetID = #PB_Any
*UserData\hGdt = GadgetID(Result)
Else
*UserData\hGdt = GadgetID(GadgetID)
EndIf
SetGadgetData(*UserData\GadgetID, *UserData)
UpdateArrowGadget(GadgetID)
ProcedureReturn Result
EndProcedure
Procedure.l WindowCallback(hWnd.l, Msg.l, wParam.l, lParam.l)
Result.l = #PB_ProcessPureBasicEvents
Select Msg
Case #WM_PAINT
hBmp = ImageID(2)
hDC = BeginPaint_(hWnd, @ps.PAINTSTRUCT)
hDC2 = CreateCompatibleDC_(hDC)
SelectObject_ (hDC2, hBmp)
BitBlt_(hDC, 0, 0, WindowWidth(#WND_Main), WindowHeight(#WND_Main), hDC2, 0, 0, #SRCCOPY)
ReleaseDC_(hWnd, hDC)
DeleteDC_(hDC2)
EndPaint_(hWnd, @ps)
ProcedureReturn #True
Result = #True
EndSelect
ProcedureReturn Result
EndProcedure
Procedure.f GetAngle(x1, y1, x2, y2)
If y1 > y2
tmp = y1
y1 = y2
y2 = tmp
tmp = x1
x1 = x2
x2 = tmp
EndIf
x.f = x2 - x1
y.f = y2 - y1
n.f = Sqr(x * x + y * y)
If n : x / n : EndIf
ProcedureReturn ACos(x)
EndProcedure
C'est justement mon but, il y aura 3 type de fleche : #ArrowType_Direct = fleche direct comme actuelement, #ArrowType_Kneed = fleche coudée comme avant et #ArrowType_Rounded = fleche arrondieD'un autre coté, ça m'a donné une idée, si tu arrivais par un moyen magique, je ne sais pas lequel, à faire une fleche super bien nette comme celle d'avant, qui peut etre droite ET en angle droit....bah je pourrais laisser tomber mes petites fleches bleue en PNG toutes "pourites" qui ne sont pas resizable...et donc bien moins jolies que les tiennes...
Comme ça je pourrais faire ça =====> ça <===== et aussi en verticale, et selon un procédé pouvoir si on le désire les "casser" en angle droit, pour pouvoir faire comme celle que tu m'avais faites.
Re: Rendre transparent une couleur dans une imagegadget
bonsoir Kcc , Cederavic
@Cederavic merci pour ce code, Vraiment trop fort.
@Kcc C'est noël pour toi aussi une deuxième fois...
Voila un truc diffèrent mais pour le fun.. celui-çi utilise le mode DrawRotatedText.
Et on a tous remarqué que tu aime Fantaisie Software, alors ça devrait te plaire…
j’ai mis l’adresse du site pour télécharger les fontes freeware en début du code
Avec ce mode, on peut zoomer(roulette), déplacer faire une rotation drawtext de façon indépendante grâce aux clics sur les boutons.
Il faudra mieux un listicongadget pour régler les interférences des clics buttongadget avec les drawtexts.
Bonne Soirée et merci.
@Cederavic merci pour ce code, Vraiment trop fort.
@Kcc C'est noël pour toi aussi une deuxième fois...
Voila un truc diffèrent mais pour le fun.. celui-çi utilise le mode DrawRotatedText.
Et on a tous remarqué que tu aime Fantaisie Software, alors ça devrait te plaire…
j’ai mis l’adresse du site pour télécharger les fontes freeware en début du code
Avec ce mode, on peut zoomer(roulette), déplacer faire une rotation drawtext de façon indépendante grâce aux clics sur les boutons.
Il faudra mieux un listicongadget pour régler les interférences des clics buttongadget avec les drawtexts.
Bonne Soirée et merci.
Code : Tout sélectionner
; #####################################################
; kernadec en janvier 2010 PB441(DrawRotatedText)##
; sur l'idée de fleche du projet KCC ##
; flèche avec fontes zoom molette ##
; deplacement clic gauche, rotation clic droit ##
; #####################################################
; #### Destination "c:\windows\fonts" ####
;http://www.fontfreak.com/charactermaps/s/Squareheads.htm
;http://www.fontfreak.com/charactermaps/p/Pointers.htm
;http://www.fontfreak.com/charactermaps/h/Hots.htm
;http://www.fontfreak.com/charactermaps/t/ToonsOne.htm
;http://www.fontfreak.com/charactermaps/f/Fred.htm
#WM_MOUSEWHEEL = $20A
Enumeration
#Fenetre
#Image_0
#Image_1
#Image_2
#StringGadget_1
#ImageGadget
#ImageGadget_2
#boutonGadget_0
#boutonGadget_1
#boutonGadget_2
#boutonGadget_3
#boutonGadget_4
EndEnumeration
Structure tx
x0.l:y0.l:taille.d:ft.l:Angle.l
EndStructure
Global Dim pos.tx(4)
Global dc.l,epais.l,fleche.l,px.l,bm.l,fl.l,fonte$
winl.l=800
winh.l=600
Posx.l=0
Posy.l=0
Posl.l=300
Posh.l=300
epais=5
Px=30
fonte$="FRED" ;??
;fonte$="POINTERS" ;fleche
;fonte$="Squareheads" ; caricature
;fonte$="toons One" ; caricature2
;fonte$="HOTS" ;pin up
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
dc=StartDrawing(ImageOutput(#Image_1))
DrawImage(ImageID(#Image_2),0,0,ImageWidth(#Image_2),ImageHeight(#Image_2))
DrawingMode(1)
DrawingFont(FontID(0))
DrawRotatedText(Pos(0)\x0,Pos(0)\y0,Chr(66),Pos(0)\Angle,RGB(0,0,255))
DrawingFont(FontID(1))
DrawRotatedText(Pos(1)\x0,Pos(1)\y0,Chr(67),Pos(1)\Angle,RGB(100,200,100))
DrawingFont(FontID(2))
DrawRotatedText(Pos(2)\x0,Pos(2)\y0,Chr(70),Pos(2)\Angle,RGB(255,0,255))
DrawingFont(FontID(3))
DrawRotatedText(Pos(3)\x0,Pos(3)\y0,Chr(71),Pos(3)\Angle,RGB(205,205,0))
StopDrawing()
LoadFont(Pos(fl)\ft,fonte$, Pos(fl)\taille,#PB_Font_Bold)
DisableGadget(#ImageGadget,1)
SetGadgetState(#ImageGadget,ImageID(#Image_1))
EndProcedure
Pos(0)\ft=0:Pos(0)\x0=10:Pos(0)\y0=10:Pos(0)\taille=40
Pos(1)\ft=1:Pos(1)\x0=10:Pos(1)\y0=10:Pos(1)\taille=60
Pos(2)\ft=2:Pos(2)\x0=10:Pos(2)\y0=10:Pos(2)\taille=80
Pos(3)\ft=3:Pos(3)\x0=10:Pos(3)\y0=10:Pos(3)\taille=100
LoadFont(Pos(0)\ft,fonte$,Pos(0)\taille,#PB_Font_Bold)
LoadFont(Pos(1)\ft,fonte$,Pos(1)\taille,#PB_Font_Bold)
LoadFont(Pos(2)\ft,fonte$,Pos(2)\taille,#PB_Font_Bold)
LoadFont(Pos(3)\ft,fonte$,Pos(3)\taille,#PB_Font_Bold)
hwnd.l=OpenWindow(#Fenetre, 0, 0,winl,winh, "Fleche fonte",#WS_SYSMENU|#PB_Window_ScreenCentered)
CreateImage(#Image_0,winl,winh)
CreateImage(#Image_1,winl,winh)
CreateImage(#Image_2,winl-6,winh-32)
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:WindowEvent():Next i ; boucle de dessin des boutons sur la fenetre avant screenshot
BitBlt_(DC,0,0,ImageWidth(#Image_2),ImageHeight(#Image_2),GetDC_(hwnd),0,0,#SRCCOPY)
StopDrawing()
dessin(Pos(fl)\x0,Pos(fl)\y0,Posl,Posh)
bm=#False
Repeat
event =WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #boutonGadget_0
Debug "B0"
fl=0
SetCursorPos_(Pos(0)\x0+WindowX(#Fenetre),Pos(0)\y0+WindowY(#Fenetre))
; Delay(2)
RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
Case #boutonGadget_1
Debug "B1"
fl=1
SetCursorPos_(Pos(1)\x0+WindowX(#Fenetre),Pos(1)\y0+WindowY(#Fenetre))
;Delay(2)
RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
Case #boutonGadget_2
Debug "B2"
fl=2
SetCursorPos_(Pos(2)\x0+WindowX(#Fenetre),Pos(2)\y0+WindowY(#Fenetre))
; Delay(2)
RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
Case #boutonGadget_3
Debug "B3"
fl=3
SetCursorPos_(Pos(3)\x0+WindowX(#Fenetre),Pos(3)\y0+WindowY(#Fenetre))
;Delay(2)
RedrawWindow_(WindowID(#Fenetre), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
EndSelect
Case #PB_Event_CloseWindow
Quit = #True
EndSelect
LoadFont(Pos(fl)\ft,fonte$, Pos(fl)\taille,#PB_Font_Bold)
If event=#WM_MOUSEWHEEL
Pos(fl)\taille=Pos(fl)\taille+MouseWheelDelta()*2
LoadFont(Pos(fl)\ft,fonte$, Pos(fl)\taille,#PB_Font_Bold)
dessin(Pos(fl)\x0,Pos(fl)\y0,Posl,Posh)
EndIf
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
Pos(fl)\Angle=Pos(fl)\Angle+90
Pos(fl)\Angle=Pos(fl)\Angle%360
dessin(Pos(fl)\x0,Pos(fl)\y0,Posl,Posh)
If Pos(fl)\Angle=90:Pos(fl)\y0=Pos(fl)\y0+Pos(fl)\taille:EndIf
If Pos(fl)\Angle=180:Pos(fl)\x0=Pos(fl)\x0+Pos(fl)\taille:Pos(fl)\y0=Pos(fl)\y0:EndIf
If Pos(fl)\Angle=270:Pos(fl)\x0=Pos(fl)\x0:Pos(fl)\y0=Pos(fl)\y0-Pos(fl)\taille:EndIf
If Pos(fl)\Angle=0:Pos(fl)\x0=Pos(fl)\x0-Pos(fl)\taille:Pos(fl)\y0=Pos(fl)\y0:EndIf
dessin(Pos(fl)\x0,Pos(fl)\y0,Posl,Posh)
Debug Pos(fl)\x0
Debug Pos(fl)\y0
Debug Pos(fl)\Angle
bm=#True
Posl1 = WindowMouseX(0)-Posl
Posh1 = WindowMouseY(0)-Posh
EndIf
If event=#WM_MOUSEMOVE
If bm=#True
If GetAsyncKeyState_(#VK_LBUTTON)
If Pos(fl)\Angle=0:centrex.l=Pos(fl)\taille/2:centrey.l=Pos(fl)\taille/2:EndIf
If Pos(fl)\Angle=90:centrex.l=Pos(fl)\taille/2:centrey.l=-Pos(fl)\taille/2:EndIf
If Pos(fl)\Angle=180:centrex.l=-Pos(fl)\taille/2:centrey.l=-Pos(fl)\taille/2:EndIf
If Pos(fl)\Angle=270:centrex.l=-Pos(fl)\taille/2:centrey.l=Pos(fl)\taille/2:EndIf
Pos(fl)\x0=WindowMouseX(0)-centrex;-Posx1
Pos(fl)\y0=WindowMouseY(0)-centrey;-Posy1
dessin(Pos(fl)\x0,Pos(fl)\y0,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
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Rendre transparent une couleur dans une imagegadget
140 000 à 270 000 sont les chiffres estimatifs du nombre de mots que contiendrait la langue française
Et sans deconner...je sais...ça m'arrive pas souvent
Je reste sans voix....
J'en trouve pas un pour qualifier, premierement votre générosité, secondement votre competence
Cela me touche d'autant plus que je suis désespéré de ne pas arriver a terminier ce Xieme programme, qui etait censé m'aider a terminer les autres, tout ça pour une histoire finale de fleche transparente
J'suis pourtant a deux metres du bol de sangria....
Enfin ....on va dire de ce que je desirais avoir.
Mais la, je sais pas si c'est les jeux olympiques qui vous motivent, mais vous etes en train de transformer mon biplan a helice, en rafale
@CEDERAVIC
Deja je me serais jamais permis de dire que ta fleche elle est moche
Mais bon celle d'avant etait tellement belle, que quand j'ai vu cette "sucette", j'ai juste eu peur que tu abandonne l'ancienne, que j'avais adoptée et dont j'etais deja amoureux, pour me la remplacer par cette "confiserie" certe appetissante...mais j'suis au regime en ce moment
A part ça...comme je l'ai dit au dessus...y'a pas de mots
C'est rangé religieusement, pointeurs memoire, structure...militairement.
Ca donne envie de s'appeller CEDERAVIC quoi
Quand au rendu...alors la on est carrément dans les giciels de dessins vectoriels.
J'ai meme été vérifié si c'etait toujours un ImageGadget qui pouvait faire ça...
J'ai cru que c'etait tout en dessin....
C'est tellement fort que ça va faire comme quand ma maman elle me faisait un joli arbre au milieu de mon dessin quand j'avais 5 ans.
Et que la prof me punissait car elle disait, qu'on devait faire le dessin tout seul
J'me rappelle...j'me disait mais comment elle sait la prof que l'arbre c'est pas moi qui "l'a fait" ????
@KERNADEC
Tout pareil, mille merci
T'as raison, c'est NOEL
Cool..que dis je, genial cette fonction que tu apportes a mon "Daubiciel"
Je vais essayer de la rajouter, ça peut etre drolement utile de mettre un caractere comme tu l'as fait
@Tous les deux
En tout cas vos codes y vont pas etre de la fete, j'espere qu'ils ont rien contre les SDF, quand y vont se retrouver a coté des miens tout "pourites"
Je vais essayer de finir d'incorporer l'ancien code de SOLDAT, car si j'ai bien compris le nouveau est pas tout a fait terminé.
Et aussi celui de KERNADEC
Excelente journée à vous deux
Et sans deconner...je sais...ça m'arrive pas souvent

Je reste sans voix....
J'en trouve pas un pour qualifier, premierement votre générosité, secondement votre competence

Cela me touche d'autant plus que je suis désespéré de ne pas arriver a terminier ce Xieme programme, qui etait censé m'aider a terminer les autres, tout ça pour une histoire finale de fleche transparente

J'suis pourtant a deux metres du bol de sangria....
Enfin ....on va dire de ce que je desirais avoir.
Mais la, je sais pas si c'est les jeux olympiques qui vous motivent, mais vous etes en train de transformer mon biplan a helice, en rafale

@CEDERAVIC
Deja je me serais jamais permis de dire que ta fleche elle est moche

Mais bon celle d'avant etait tellement belle, que quand j'ai vu cette "sucette", j'ai juste eu peur que tu abandonne l'ancienne, que j'avais adoptée et dont j'etais deja amoureux, pour me la remplacer par cette "confiserie" certe appetissante...mais j'suis au regime en ce moment

A part ça...comme je l'ai dit au dessus...y'a pas de mots
C'est rangé religieusement, pointeurs memoire, structure...militairement.
Ca donne envie de s'appeller CEDERAVIC quoi

Quand au rendu...alors la on est carrément dans les giciels de dessins vectoriels.
J'ai meme été vérifié si c'etait toujours un ImageGadget qui pouvait faire ça...
J'ai cru que c'etait tout en dessin....
C'est tellement fort que ça va faire comme quand ma maman elle me faisait un joli arbre au milieu de mon dessin quand j'avais 5 ans.
Et que la prof me punissait car elle disait, qu'on devait faire le dessin tout seul

J'me rappelle...j'me disait mais comment elle sait la prof que l'arbre c'est pas moi qui "l'a fait" ????

@KERNADEC
Tout pareil, mille merci
T'as raison, c'est NOEL

Cool..que dis je, genial cette fonction que tu apportes a mon "Daubiciel"

Je vais essayer de la rajouter, ça peut etre drolement utile de mettre un caractere comme tu l'as fait
@Tous les deux
En tout cas vos codes y vont pas etre de la fete, j'espere qu'ils ont rien contre les SDF, quand y vont se retrouver a coté des miens tout "pourites"
Je vais essayer de finir d'incorporer l'ancien code de SOLDAT, car si j'ai bien compris le nouveau est pas tout a fait terminé.
Et aussi celui de KERNADEC
Excelente journée à vous deux
Re: Rendre transparent une couleur dans une imagegadget
Bonjour Kcc
Merci, Pour le fun je pensais que tu aller voir le clin d'oeil de fantaisie ..
chez Fontfreak.com, il y a une fonte Fred..... hihihihi
cordialement
Merci, Pour le fun je pensais que tu aller voir le clin d'oeil de fantaisie ..
chez Fontfreak.com, il y a une fonte Fred..... hihihihi
cordialement
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Rendre transparent une couleur dans une imagegadget
Bah j'ai cru que c'etait des polices un peu comme les autres...
Et comme je me suis jeté sur l'adaptation, j'ai pas été voir de suite
Mais des que tu me l'a dit, j'suis allé voir..
Un truc de guedin.... toutes ces polices elles sont a FREAK ???
Y'en a tellement....en tout cas j'en ai adoré une...geniale..
C'est une ou y'a une fifille
Trop cool, j'y aurais meme pas penser...on pourrait faire un truc de guedin avec ça..
Meme pas j'essaye d'y penser..car ça va donner lieu a une 34e appli non terminée.
Mais imagine...tu pose une question et hop la "zessegon" elle s'excute
On pourrait l'appeler zessegon
- Zessegon danse et hop devant nos yeux ebahis..elle fait un pas de deux
- Zessegon tourne et hop elle fait un trou dans le plancher...
- Zessegon leve la jambe.....
J'arrette...DOBRO y va etre obligé de mettre des Biiiiip a la place de mon ecriture
Ca me fait encore penser a un CD que j'avais eu...un truc avec une tres grande actrice, la grande classe...
c'est pas michelle morgan...
ni catherine deneuve...
ni sophie marceau...
attend je reflechi .............
Ahhh j'me rappelle c'est julia channel

Tu lui ecrivais...tourne toi et hop...elle se tournait
Comment tu t'appelles et elle repondait
Peut tu me faire une....."camomillle"....et hop elle le faisait..
Et une pro...parce qu'elle avait toujours le sourire..
Et tout le monde le sait..la camomille ..avec le sourire..c'est pas toujours evident
Super pas contrariante la fille...enfin la femme parfaite, a coté une asiatique, c'est une militante du MLF
Rien a voir avec la mienne ou j'suis obligé de m'y prendre 15 jours a l'avance pour lui demander une vraie camomille
Qu'est ce qu'on a pu se marrer avec ce CD...tout le monde il avait noir de choses a lui demander
Dans ces cas l'imagination de la gente masculine n'a pas de limite decentes
Enfin..quand on est seul devant un PC..on s'amuse comme on peut
PS...ça me fait penser a "aute" chose...
Julia elle supportait pas les "fotes dortografe".....
Car si elle comprenait pas elle te regardait comme un poisson pané qui a trainé au fond du frigo 15 jours
Avec guerrier001 elle se serait pas fait de retour de reins
Ca aurait été un super apprentissage pour nos enfants...une version fille et garçon.
Et hop ....j'suis sur que nos chers bambins y connaitraient tous les mots de la langue française en 2 jours
Et comme je me suis jeté sur l'adaptation, j'ai pas été voir de suite
Mais des que tu me l'a dit, j'suis allé voir..
Un truc de guedin.... toutes ces polices elles sont a FREAK ???

Y'en a tellement....en tout cas j'en ai adoré une...geniale..
C'est une ou y'a une fifille

Trop cool, j'y aurais meme pas penser...on pourrait faire un truc de guedin avec ça..
Meme pas j'essaye d'y penser..car ça va donner lieu a une 34e appli non terminée.

Mais imagine...tu pose une question et hop la "zessegon" elle s'excute

On pourrait l'appeler zessegon
- Zessegon danse et hop devant nos yeux ebahis..elle fait un pas de deux
- Zessegon tourne et hop elle fait un trou dans le plancher...
- Zessegon leve la jambe.....
J'arrette...DOBRO y va etre obligé de mettre des Biiiiip a la place de mon ecriture

Ca me fait encore penser a un CD que j'avais eu...un truc avec une tres grande actrice, la grande classe...
c'est pas michelle morgan...
ni catherine deneuve...
ni sophie marceau...
attend je reflechi .............

Ahhh j'me rappelle c'est julia channel


Tu lui ecrivais...tourne toi et hop...elle se tournait
Comment tu t'appelles et elle repondait
Peut tu me faire une....."camomillle"....et hop elle le faisait..
Et une pro...parce qu'elle avait toujours le sourire..
Et tout le monde le sait..la camomille ..avec le sourire..c'est pas toujours evident

Super pas contrariante la fille...enfin la femme parfaite, a coté une asiatique, c'est une militante du MLF

Rien a voir avec la mienne ou j'suis obligé de m'y prendre 15 jours a l'avance pour lui demander une vraie camomille

Qu'est ce qu'on a pu se marrer avec ce CD...tout le monde il avait noir de choses a lui demander

Dans ces cas l'imagination de la gente masculine n'a pas de limite decentes

Enfin..quand on est seul devant un PC..on s'amuse comme on peut

PS...ça me fait penser a "aute" chose...
Julia elle supportait pas les "fotes dortografe".....
Car si elle comprenait pas elle te regardait comme un poisson pané qui a trainé au fond du frigo 15 jours

Avec guerrier001 elle se serait pas fait de retour de reins

Ca aurait été un super apprentissage pour nos enfants...une version fille et garçon.
Et hop ....j'suis sur que nos chers bambins y connaitraient tous les mots de la langue française en 2 jours
Re: Rendre transparent une couleur dans une imagegadget
Sympa ton code avec les Font Kernadec, fallait y penser
KCC, je suis désolé mais je pense que je ne pourais pas finir ce que je voulais faire avant que tu n'ai fini toi même ton logiciel
(je me suis engager à faire un logiciel de gestion devis / factures / clients pour mon patron).
Mais je t'ai tout de même fait une proc pour dessiner des fleches "directes" et "coudée", j'essaierais de te faire les "arrondies" aussi :

KCC, je suis désolé mais je pense que je ne pourais pas finir ce que je voulais faire avant que tu n'ai fini toi même ton logiciel

Mais je t'ai tout de même fait une proc pour dessiner des fleches "directes" et "coudée", j'essaierais de te faire les "arrondies" aussi :
Code : Tout sélectionner
Enumeration
#ArrowType_Direct
#ArrowType_Kneed
#ArrowType_Rounded
EndEnumeration
Enumeration
#Way_WestToSouth
#Way_EastToSouth
#Way_WestToNorth
#Way_EastToNorth
#Way_SouthToEast
#Way_SouthToWest
#Way_NorthToEast
#Way_NorthToWest
EndEnumeration
Declare.l DrawArrow(width.l, height.l, ax1.l, ay1.l, ax2.l, ay2.l, size.l, type.b, way.b = #Null)
Declare.f GetAngle(x1, y1, x2, y2)
OpenWindow(0, 0, 0, 800, 600, "DrawArrow", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; Fleche directe
CreateImage(0, 200, 200, 32)
StartDrawing(ImageOutput(0))
DrawArrow(200, 200, 20, 20, 180, 180, 20, #ArrowType_Direct)
StopDrawing()
CreateImage(1, 200, 200, 32)
StartDrawing(ImageOutput(1))
DrawArrow(200, 200, 160, 20, 40, 100, 20, #ArrowType_Direct)
StopDrawing()
CreateImage(2, 200, 200, 32)
StartDrawing(ImageOutput(2))
DrawArrow(200, 200, 100, 180, 120, 30, 20, #ArrowType_Direct)
StopDrawing()
CreateImage(3, 200, 200, 32)
StartDrawing(ImageOutput(3))
DrawArrow(200, 200, 180, 180, 80, 80, 20, #ArrowType_Direct)
StopDrawing()
ImageGadget(0, 0, 0, 200, 200, ImageID(0))
ImageGadget(1, 200, 0, 200, 200, ImageID(1))
ImageGadget(2, 400, 0, 200, 200, ImageID(2))
ImageGadget(3, 600, 0, 200, 200, ImageID(3))
; Fleche coudee
CreateImage(4, 100, 100, 32)
StartDrawing(ImageOutput(4))
DrawArrow(100, 100, 20, 20, 80, 80, 20, #ArrowType_Kneed, #Way_WestToSouth)
StopDrawing()
CreateImage(5, 100, 100, 32)
StartDrawing(ImageOutput(5))
DrawArrow(100, 100, 80, 20, 20, 80, 20, #ArrowType_Kneed, #Way_EastToSouth)
StopDrawing()
CreateImage(6, 100, 100, 32)
StartDrawing(ImageOutput(6))
DrawArrow(100, 100, 80, 80, 20, 20, 20, #ArrowType_Kneed, #Way_EastToNorth)
StopDrawing()
CreateImage(7, 100, 100, 32)
StartDrawing(ImageOutput(7))
DrawArrow(100, 100, 20, 80, 80, 20, 20, #ArrowType_Kneed, #Way_WestToNorth)
StopDrawing()
CreateImage(8, 100, 100, 32)
StartDrawing(ImageOutput(8))
DrawArrow(100, 100, 20, 80, 80, 20, 20, #ArrowType_Kneed, #Way_SouthToEast)
StopDrawing()
CreateImage(9, 100, 100, 32)
StartDrawing(ImageOutput(9))
DrawArrow(100, 100, 80, 80, 20, 20, 20, #ArrowType_Kneed, #Way_SouthToWest)
StopDrawing()
CreateImage(10, 100, 100, 32)
StartDrawing(ImageOutput(10))
DrawArrow(100, 100, 20, 20, 80, 80, 20, #ArrowType_Kneed, #Way_NorthToEast)
StopDrawing()
CreateImage(11, 100, 100, 32)
StartDrawing(ImageOutput(11))
DrawArrow(100, 100, 80, 20, 20, 80, 20, #ArrowType_Kneed, #Way_NorthToWest)
StopDrawing()
ImageGadget(4, 0, 200, 100, 100, ImageID(4))
ImageGadget(5, 100, 200, 100, 100, ImageID(5))
ImageGadget(6, 200, 200, 100, 100, ImageID(6))
ImageGadget(7, 300, 200, 100, 100, ImageID(7))
ImageGadget(8, 400, 200, 100, 100, ImageID(8))
ImageGadget(9, 500, 200, 100, 100, ImageID(9))
ImageGadget(10, 600, 200, 100, 100, ImageID(10))
ImageGadget(11, 700, 200, 100, 100, ImageID(11))
Repeat
Select WaitWindowEvent(2)
Case #WM_CLOSE
Quit = #True
EndSelect
Until Quit = #True
End
Procedure.l DrawArrow(width.l, height.l, ax1.l, ay1.l, ax2.l, ay2.l, size.l, type.b, way.b = #Null)
BorderColor = RGBA(32, 32, 32, 255)
GradientColor1 = RGB(230, 230, 250)
GradientColor2 = RGB(128, 140, 128)
GradientColor3 = RGB(75, 64, 64)
Select type
Case #ArrowType_Kneed
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, width, height, 0)
Select Way
Case #Way_WestToSouth
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax1, ay1, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax1, ay1, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
Case #Way_EastToSouth
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
Case #Way_WestToNorth
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
Case #Way_EastToNorth
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 2, ay1 - size / 2, ax2 + size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax2 - size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax2 + size / 3, ay1 - size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 3, ay1 + size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 - size / 2, BorderColor)
Case #Way_SouthToEast
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 - size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 + size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 - size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 + size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 - size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 + size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
Case #Way_SouthToWest
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 + size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 + size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 4, ax2 + size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 4, ax2 + size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 2, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 2, ax2 - size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 + size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 + size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 4, ax2 + size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 4, ax2 + size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 2, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 2, ax2 - size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 + size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 + size / 2, ax1 + size / 2, ay1 + size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 + size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 + size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 4, ax2 + size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 4, ax2 + size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 + size / 4, ay2 - size / 2, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2 + size / 2, ax2 - size / 4, ay2, BorderColor)
Case #Way_NorthToEast
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 + size / 2, ay1 - size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 + size / 2, ay1 - size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 - size / 3, ay2 + size / 3, BorderColor)
LineXY(ax1 + size / 2, ay1 - size / 2, ax1 + size / 3, ay2 - size / 3, BorderColor)
LineXY(ax1 - size / 2, ay1 - size / 2, ax1 + size / 2, ay1 - size / 2, BorderColor)
LineXY(ax1 + size / 3, ay2 - size / 3, ax2 - size / 4, ay2 - size / 4, BorderColor)
LineXY(ax1 - size / 3, ay2 + size / 3, ax2 - size / 4, ay2 + size / 4, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 4, ax2 - size / 4, ay2 - size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 4, ax2 - size / 4, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 4, ay2 - size / 2, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2 + size / 2, ax2 + size / 4, ay2, BorderColor)
Case #Way_NorthToWest
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 4, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 - size / 2, ax1 + size / 4, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(ax1 + size / 4, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 - size / 2, ax1 + size / 4, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(ax1 + size / 4, ay1 - size / 2, ax2 - size / 3, ay1 - size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 + size / 2, ax2 + size / 3, ay1 + size / 3, BorderColor)
LineXY(ax1 + size / 4, ay1 - size / 2, ax1 + size / 4, ay1 + size / 2, BorderColor)
LineXY(ax2 - size / 3, ay1 - size / 3, ax2 - size / 4, ay2, BorderColor)
LineXY(ax2 + size / 3, ay1 + size / 3, ax2 + size / 4, ay2, BorderColor)
LineXY(ax2 + size / 4, ay2, ax2 + size / 2, ay2, BorderColor)
LineXY(ax2 - size / 4, ay2, ax2 - size / 2, ay2, BorderColor)
LineXY(ax2 + size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
LineXY(ax2 - size / 2, ay2, ax2, ay2 + size / 2, BorderColor)
EndSelect
Case #ArrowType_Direct
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, width, height, 0)
a.f = GetAngle(ax1, ay1, ax2, ay2)
x1 = ax1 + Cos(a - #PI / 2) * size / 2
y1 = ay1 + Sin(a - #PI / 2) * size / 2
x2 = ax2 + Cos(a - #PI / 2) * size / 4
y2 = ay2 + Sin(a - #PI / 2) * size / 4
x3 = ax1 + Cos(a + #PI / 2) * size / 2
y3 = ay1 + Sin(a + #PI / 2) * size / 2
x4 = ax2 + Cos(a + #PI / 2) * size / 4
y4 = ay2 + Sin(a + #PI / 2) * size / 4
x5 = ax2 + Cos(a - #PI / 2) * size / 2
y5 = ay2 + Sin(a - #PI / 2) * size / 2
x6 = ax2 + Cos(a + #PI / 2) * size / 2
y6 = ay2 + Sin(a + #PI / 2) * size / 2
If ay1 > ay2
x7 = ax2 + Cos(a + #PI) * size / 2
y7 = ay2 + Sin(a + #PI) * size / 2
Else
x7 = ax2 + Cos(a) * size / 2
y7 = ay2 + Sin(a) * size / 2
EndIf
LineXY(x1, y1, x2, y2, BorderColor)
LineXY(x3, y3, x4, y4, BorderColor)
LineXY(x1, y1, x3, y3, BorderColor)
LineXY(x2, y2, x5, y5, BorderColor)
LineXY(x4, y4, x6, y6, BorderColor)
LineXY(x5, y5, x7, y7, BorderColor)
LineXY(x6, y6, x7, y7, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, width, height, RGBA(0, 0, 0, 0))
LineXY(x1, y1, x2, y2, BorderColor)
LineXY(x3, y3, x4, y4, BorderColor)
LineXY(x1, y1, x3, y3, BorderColor)
LineXY(x2, y2, x5, y5, BorderColor)
LineXY(x4, y4, x6, y6, BorderColor)
LineXY(x5, y5, x7, y7, BorderColor)
LineXY(x6, y6, x7, y7, BorderColor)
FillArea(ax2, ay2, -1, BorderColor)
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(ax1, ay1, ax2, ay2)
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
Box(0, 0, width, height)
DrawingMode(#PB_2DDrawing_Default)
LineXY(x1, y1, x2, y2, BorderColor)
LineXY(x3, y3, x4, y4, BorderColor)
LineXY(x1, y1, x3, y3, BorderColor)
LineXY(x2, y2, x5, y5, BorderColor)
LineXY(x4, y4, x6, y6, BorderColor)
LineXY(x5, y5, x7, y7, BorderColor)
LineXY(x6, y6, x7, y7, BorderColor)
EndSelect
EndProcedure
Procedure.f GetAngle(x1, y1, x2, y2)
If y1 > y2
tmp = y1
y1 = y2
y2 = tmp
tmp = x1
x1 = x2
x2 = tmp
EndIf
x.f = x2 - x1
y.f = y2 - y1
n.f = Sqr(x * x + y * y)
If n : x / n : EndIf
ProcedureReturn ACos(x)
EndProcedure
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Rendre transparent une couleur dans une imagegadget
Merci beaucoup CEDERAVIC
Te casse pas la tete, en fin de compte je suis arrivé apres 2 jours de boulot, a mettre ta premiere fleche que j'adore dans mon code
Elle est simple performante, et a meme bien plus de qualité que je n'en esperais
Car je ne comptais pas la faire graduée
Merci aussi pour ces nouvelles fleches que je garde precieusement
Te casse pas la tete, le travail d'abord....vous avez deja tellement fait pour moi toi et KERNADEC
Une question que je me suis posée...si j'etais pas parti dans les gadgets, comment vous auriez fait graphiquement, car je suppose que vous n'auriez pas utilisé les gadgets non plus...
Comment vous auriez fait, ou comment font il pour faire du dessin vectoriel.
C'est vrai j'ai pas trouvé d'exemples de dessin vectoriel avec pure, j'ai tapé vectoriel et pas grand chose ne sort
Car quand on regarde le designer, c'est bien du vectoriel donc ça doit se faire ????
Te casse pas la tete, en fin de compte je suis arrivé apres 2 jours de boulot, a mettre ta premiere fleche que j'adore dans mon code

Elle est simple performante, et a meme bien plus de qualité que je n'en esperais

Car je ne comptais pas la faire graduée

Merci aussi pour ces nouvelles fleches que je garde precieusement
Te casse pas la tete, le travail d'abord....vous avez deja tellement fait pour moi toi et KERNADEC

Une question que je me suis posée...si j'etais pas parti dans les gadgets, comment vous auriez fait graphiquement, car je suppose que vous n'auriez pas utilisé les gadgets non plus...
Comment vous auriez fait, ou comment font il pour faire du dessin vectoriel.

C'est vrai j'ai pas trouvé d'exemples de dessin vectoriel avec pure, j'ai tapé vectoriel et pas grand chose ne sort

Car quand on regarde le designer, c'est bien du vectoriel donc ça doit se faire ????

Re: Rendre transparent une couleur dans une imagegadget
J'ai pas compris ta question...
Je me rappel avoir vu un code du genre "Redimensionnement des gadget avec poignee style visual designer", mais je ne sais plus de qui, a voir
Sans gadget ça aurait été beaucoup plus simple je pense, dessiner directement dans la fenetre (ce que je fais dans l'avant dernier code pour l'aperçus de la fleche), mais il aurait fallu gerer les evenement "a la main".
Je me rappel avoir vu un code du genre "Redimensionnement des gadget avec poignee style visual designer", mais je ne sais plus de qui, a voir

Sans gadget ça aurait été beaucoup plus simple je pense, dessiner directement dans la fenetre (ce que je fais dans l'avant dernier code pour l'aperçus de la fleche), mais il aurait fallu gerer les evenement "a la main".
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Rendre transparent une couleur dans une imagegadget
Oui c'est le code de patrick88 avec lequel j'ai démarré.
A la fin, j'ai été obligé d'enlever les poignées rouge, car elle me compliquait le code...comme si il en etait besoin
Ma question, c'est comment y font dans un dessin, pour qu'un trait y soit vectoriel et non bitmap
C'est a dire que tu trace le trait, tu en trace un autre, puis tu clique sur le premier et il apparait deux poignées et tu peux le deplacer, l'agrandir...
Ce que je me demandais, c'est que quand un trait il est tracé, et que tu l'efface pour un tracer un autre, ou le deplacer, ça efface aussi ce qui est dessous ???
Et le logiciel qui a noir de croisement, ça veut dire qu'il retrace toutes les lignes dessous quand tu deplace une ligne sur les autres
C'est un calcul de "guedin"....c'est pour ça que j'etait parti sur les gadgets, car eux il ne tracent rien sur la fenetre....
Donc pas de "crottes" une fois passé, comme les chevaux
A la fin, j'ai été obligé d'enlever les poignées rouge, car elle me compliquait le code...comme si il en etait besoin

Ma question, c'est comment y font dans un dessin, pour qu'un trait y soit vectoriel et non bitmap
C'est a dire que tu trace le trait, tu en trace un autre, puis tu clique sur le premier et il apparait deux poignées et tu peux le deplacer, l'agrandir...
Ce que je me demandais, c'est que quand un trait il est tracé, et que tu l'efface pour un tracer un autre, ou le deplacer, ça efface aussi ce qui est dessous ???

Et le logiciel qui a noir de croisement, ça veut dire qu'il retrace toutes les lignes dessous quand tu deplace une ligne sur les autres

C'est un calcul de "guedin"....c'est pour ça que j'etait parti sur les gadgets, car eux il ne tracent rien sur la fenetre....
Donc pas de "crottes" une fois passé, comme les chevaux

- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Rendre transparent une couleur dans une imagegadget
CEDERAVIC
Tu vas etre fier de ton eleve...enfin j'espere
Je suis arrivé a "détordre" les fleches que tu t'es fait un fion a tordre
J'en ai bavé...car moi j'ai pas fait couture en deuxieme matiere
T'as vraiment fait un boulot de malade, surtout les bordures de fleches
D'ailleur a ce propos, cette condition, elle sert jamais...
Car je suis jamais tombé dedans pendant tousd mes nombreux essais
Alors voila....le fruit de mon labeur, la fleche droite dans les 4 directions 
Tu vas etre fier de ton eleve...enfin j'espere

Je suis arrivé a "détordre" les fleches que tu t'es fait un fion a tordre

J'en ai bavé...car moi j'ai pas fait couture en deuxieme matiere

T'as vraiment fait un boulot de malade, surtout les bordures de fleches

D'ailleur a ce propos, cette condition, elle sert jamais...
Car je suis jamais tombé dedans pendant tousd mes nombreux essais

Code : Tout sélectionner
If Largeur < Epaisseur * 4 Or Hauteur < Epaisseur * 4
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, Largeur, Hauteur, RGBA(0, 0, 0, 0))

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)
If (x1 > x2 And y1 < y2) Or (x1 < x2 And y1 > y2) ; Verticale
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
LinearGradient(0, Epaisseur, 0, Hauteur - Epaisseur - 1)
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, 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
Else ; Horizontale
FrontColor(GradientColor1) : GradientColor(0.80, GradientColor2) : BackColor(GradientColor3)
LinearGradient(0, 0, Largeur, hauteur )
Box(0, 0, Largeur, Hauteur)
DrawingMode(#PB_2DDrawing_Default)
LineXY(0, Hauteur - Epaisseur * 1.5 + 1, Epaisseur * 1.5 + 1, Hauteur - (Epaisseur * 3) + 1, BorderlColor) ; Coté pointe fleche
LineXY(0, Hauteur - Epaisseur * 1.5 , Epaisseur * 1.5 + 1, Hauteur + 1, BorderlColor) ; Coté pointe fleche
LineXY(Epaisseur * 1.5 - 1, Hauteur - (Epaisseur * 3) + 1, Epaisseur * 1.5 - 1, Hauteur - (Epaisseur * 2) - 1, BorderlColor) ; Base fleche
LineXY(Epaisseur * 1.5 - 1, Hauteur - 1, Epaisseur * 1.5 - 1, Hauteur - Epaisseur, BorderlColor) ; Base fleche
LineXY(Epaisseur * 1.5, Hauteur - Epaisseur - 1, Largeur, Hauteur - Epaisseur - 1, BorderlColor); Horizontale bas
LineXY(Largeur - 1, Hauteur - Epaisseur - 1, Largeur - 1, Hauteur - (Epaisseur * 2) - 1, BorderlColor) ; Cul de fleche
LineXY(Largeur - 1, Hauteur - (Epaisseur * 2) + 1, Epaisseur * 1.5 - 1, Hauteur - (Epaisseur * 2) + 1, BorderlColor) ; Horizontale haut
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, Largeur, Hauteur, RGBA(0, 0, 0, 0))
Box(Epaisseur * 1.5, Hauteur - Epaisseur * 2, Largeur - Epaisseur, Epaisseur, RGBA(0, 0, 0, 255))
For ty = 0 To Epaisseur * 3
LineXY(0, Hauteur - Epaisseur * 1.5, Epaisseur * 1.5, Hauteur - (Epaisseur * 3) + ty , RGBA(0, 0, 0, 255))
Next
EndIf
StopDrawing()
hDC = StartDrawing(ImageOutput(#Fleche))
If 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