Comment afficher un curseur personnaliser dans un canevas...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Comment afficher un curseur personnaliser dans un canevas...

Message par Shadow »

Salut à tous,

Comment afficher un curseur personnaliser dans un canevas sans utiliser d'API ?
Ensuite n'y à t-il pas plus simple que ceci ?:

Code : Tout sélectionner

; Créate by Stargate 13/08/2020.

Enumeration
	#Window
	#Gadget
	#Image
EndEnumeration

Procedure SetGadgetCursorImage(Gadget.i, Image.i, HotSpotX.i=0, HotSpotY.i=0)
	
	Protected *Handle = GetGadgetAttribute(Gadget, #PB_Canvas_CustomCursor)
	Protected FileName.s = GetTemporaryDirectory()+"cursor.cur"
	Protected BitmapInfoHeader.BITMAPINFOHEADER
	Protected Width.i = 32, Height = 32
	
	If *Handle
		DestroyCursor_(*Handle)
	EndIf
	
	File = CreateFile(#PB_Any, FileName)
	If File
		WriteWord(File, 0) ; Reserved
		WriteWord(File, 2) ; Image type (2 = cursor)
		WriteWord(File, 1) ; Number of images
		; Layer
		WriteAsciiCharacter(File, Width) ; Width
		WriteAsciiCharacter(File, Height) ; Height
		WriteAsciiCharacter(File, 0) ; Colors
		WriteAsciiCharacter(File, 0) ; Reserved
		WriteWord(File, HotSpotX) ; Color planes
		WriteWord(File, HotSpotY) ; Bits per pixel
		WriteLong(File, SizeOf(BITMAPINFOHEADER)+Width*Height*4)
		WriteLong(File, Loc(File)+4) ; Data location
		; Datas
		With BitmapInfoHeader
			\biSize     = SizeOf(BITMAPINFOHEADER)
			\biWidth    = Width
			\biHeight   = Height*2
			\biPlanes   = 1
			\biBitCount = 32
		EndWith
		WriteData(File, BitmapInfoHeader, SizeOf(BitmapInfoHeader))
		If StartDrawing(ImageOutput(Image))
			DrawingMode(#PB_2DDrawing_AllChannels)
			For Y = Height-1 To 0 Step -1
				For X = 0 To Width-1
					If Y < ImageHeight(Image) And X < ImageWidth(Image)
						Color = Point(X, Y)
					Else
						Color = $00000000
					EndIf
					WriteLong(File, Color&$FF00FF00|((Color&$FF)<<16)|((Color>>16)&$FF))
				Next
			Next
			StopDrawing()
		EndIf
		CloseFile(File)
	EndIf
	
	SetGadgetAttribute(Gadget, #PB_Canvas_CustomCursor, LoadCursorFromFile_(@FileName))
	
EndProcedure

Debug #PB_Compiler_Home

OpenWindow(#Window, 0, 0, 800, 450, "Vector Canvas Gadget", #PB_Window_MaximizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window), #PB_Canvas_Keyboard)

UsePNGImageDecoder()
LoadImage(#Image, #PB_Compiler_Home+"Examples\Sources\Data\world.png") ; Load your image

SetGadgetCursorImage(#Gadget, #Image, 8, 8) ; Last two parameters are the hot spot of the cursor

Repeat
	
	Select WaitWindowEvent()
		
		Case #PB_Event_CloseWindow
			Break
		
	EndSelect
	
ForEver

End
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: Comment afficher un curseur personnaliser dans un caneva

Message par Patrick88 »

Code : Tout sélectionner

#PB_Canvas_Cursor: Change le curseur lorsque la souris survole le gadget. 
                       Les valeurs suivantes sont possibles: 
                         #PB_Cursor_Default   : Flèche du curseur par défaut 
                         #PB_Cursor_Cross     : Curseur en forme de croix 
                         #PB_Cursor_IBeam     : Barre d'insertion 'I' utilisée pour la sélection de texte  
                         #PB_Cursor_Hand      : Curseur main 
                         #PB_Cursor_Busy      : Curseur sablier ou une montre 
                         #PB_Cursor_Denied    : Curseur cercle barré ou curseur X 
                         #PB_Cursor_Arrows    : Flèches dans toutes les directions (non disponible sur OS X) 
                         #PB_Cursor_LeftRight : Flèches gauche et droite 
                         #PB_Cursor_UpDown    : Flèches haut et bas 
                         #PB_Cursor_LeftUpRightDown: Flèches diagonales (Windows uniquement) 
                         #PB_Cursor_LeftDownRightUp: Flèches diagonales (Windows uniquement)  
                         #PB_Cursor_Invisible      : Cache le curseur 
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment afficher un curseur personnaliser dans un caneva

Message par Shadow »

Merci, mais ce que je veux dire c'est un curseur image personnaliser :)
Autres que ceux de PB !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: Comment afficher un curseur personnaliser dans un caneva

Message par Patrick88 »

Exemple de netmaestro Posted: Mon Oct 17, 2011
You're making it all too difficult, nothing could be easier: Vous rendez tout cela trop difficile, rien ne pourrait être plus facile

Code : Tout sélectionner

LoadImage(0, #PB_Compiler_Home+"examples\sources\data\cdplayer.ico") 

OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 10, 200, 200)
SetGadgetAttribute(0,#PB_Canvas_CustomCursor,ImageID(0))

Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment afficher un curseur personnaliser dans un caneva

Message par Shadow »

Patrick88 a écrit :Exemple de netmaestro Posted: Mon Oct 17, 2011
You're making it all too difficult, nothing could be easier: Vous rendez tout cela trop difficile, rien ne pourrait être plus facile

Code : Tout sélectionner

LoadImage(0, #PB_Compiler_Home+"examples\sources\data\cdplayer.ico") 

OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 10, 200, 200)
SetGadgetAttribute(0,#PB_Canvas_CustomCursor,ImageID(0))

Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow
Tin sérieux il pourrais le mettre ça dans l'aide non ? :roll:
Il faut le rajouté car franchement on se complique la vie pour rien alors que c'est si simple !
Patrick88 merci t'es un chef !

Edit: ça ne marche pas pour les png.

Code : Tout sélectionner

UsePNGImageDecoder()

LoadImage(0, #PB_Compiler_Home + "examples/sources/Data/world.png")

OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 10, 200, 200)
SetGadgetAttribute(0,#PB_Canvas_CustomCursor,ImageID(0))

Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Comment afficher un curseur personnaliser dans un caneva

Message par case »

il faut un format .ICO
format des icones tu peux trouver comment convertir un png en.ico en fouinant un peu sur le forum...
ImageImage
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Comment afficher un curseur personnaliser dans un caneva

Message par Kwai chang caine »

Merci pour la combine Patrick 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment afficher un curseur personnaliser dans un caneva

Message par Shadow »

case a écrit :il faut un format .ICO
format des icones tu peux trouver comment convertir un png en.ico en fouinant un peu sur le forum...
Oui c'est pas dur c'est faisable, merci a Patrick88 :)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
grendizer
Messages : 61
Inscription : mer. 29/mai/2019 6:29

Re: Comment afficher un curseur personnaliser dans un caneva

Message par grendizer »

Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment afficher un curseur personnaliser dans un caneva

Message par Shadow »

Merci !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: Comment afficher un curseur personnaliser dans un caneva

Message par Patrick88 »

grendizer a écrit :convertir un png en.ico :

https://convertir-une-image.com/changer ... g-vers-ico
à l'ancienne... pour 1 icone par fichier
créer une image de 16x16 pixels en 16 couleurs, sauver au format bmp 16 couleurs
renommer le fichier de .bmp en .ico

youpla-boum...

Pat
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment afficher un curseur personnaliser dans un caneva

Message par Shadow »

Patrick88 a écrit :
grendizer a écrit :convertir un png en.ico :

https://convertir-une-image.com/changer ... g-vers-ico
à l'ancienne... pour 1 icone par fichier
créer une image de 16x16 pixels en 16 couleurs, sauver au format bmp 16 couleurs
renommer le fichier de .bmp en .ico

youpla-boum...

Pat
Jolie :D
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
grendizer
Messages : 61
Inscription : mer. 29/mai/2019 6:29

Re: Comment afficher un curseur personnaliser dans un caneva

Message par grendizer »

salut shadow

il sort quand EditorsFactory ?
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Comment afficher un curseur personnaliser dans un caneva

Message par SPH »

grendizer a écrit :salut shadow

il sort quand EditorsFactory ?
Il ne sortira probablement jamais, désolé...

:roll:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre