Page 1 sur 2

Gadget rebel

Publié : dim. 04/juin/2017 15:08
par SPH
Voici mon code simplifié a l'extreme et qui ne marche pas :

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 80,80, "SpinGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
    SpinGadget     (10, 40, 40, 45, 25, 1, 100)
    SetGadgetState (10, 8) : SetGadgetText(10, "8")   ; définit la valeur initiale

Repeat
      Evenement = WaitWindowEvent()
      If Evenement = #PB_Event_Gadget
        If EventGadget() = 0
          SetGadgetText(0,Str(GetGadgetState(0)))
        EndIf
      EndIf
    Until Evenement = #PB_Event_CloseWindow
  EndIf

Je tiens au "10" de "SpinGadget (10,...."

Qu'est ce qui cloche ?? :|

Re: Gadget rebel

Publié : dim. 04/juin/2017 15:40
par Micoute

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 80,80, "SpinGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
  SpinGadget  (10, 40, 40, 45, 25, 1, 100)
  SetGadgetState (10, 8) : SetGadgetText(10, "8") ; définit la valeur initiale

Repeat
   Evenement = WaitWindowEvent()
   If Evenement = #PB_Event_Gadget
    If EventGadget() = 10 ;Il faut indiquer le bon gadget
     SetGadgetText(10,Str(GetGadgetState(10))) ; là aussi
    EndIf
   EndIf
  Until Evenement = #PB_Event_CloseWindow
 EndIf

Re: Gadget rebel

Publié : dim. 04/juin/2017 16:08
par SPH
Grand merci Micoute :P

ou : Merci GRAND Micoute (comme tu preferes) :wink:

Re: Gadget rebel

Publié : dim. 04/juin/2017 19:44
par SPH
le gadget rebel du jour :

Code : Tout sélectionner

Resultat = ColorRequester([Couleur])
Il apparait en haut a gauche de la fenetre. Ca fait bizzare. Peut on ouvrir le requester la ou il y a le bouton a cliquer ?

Re: Gadget rebel

Publié : dim. 04/juin/2017 19:58
par Ar-S
On peut surement avec des API mais pas comme ça.
Tu devrais créer un ColorRequester perso, il y a pas mal d'exemples dur le forum.

Re: Gadget rebel

Publié : dim. 04/juin/2017 20:06
par SPH
Ar-S a écrit :On peut surement avec des API mais pas comme ça.
Tu devrais créer un ColorRequester perso, il y a pas mal d'exemples dur le forum.
dans l'ordre de facilité, je prefere une api. Sinon, faire un colorrequester a la dobro.

quelqu'un aurait les bons api ?

Re: Gadget rebel

Publié : dim. 04/juin/2017 20:56
par falsam
Pourquoi pas un choix de couleurs (Quatre dans cet exemple) dans un ComboGadget()

Code : Tout sélectionner

Enumeration Window
  #mf
EndEnumeration

Enumeration Gadgets
  #mfColorRequester
EndEnumeration

Global Color

Declare ChangeColor()
Declare Exit()

OpenWindow(#mf, 0, 0, 800, 600, "", #PB_Window_ScreenCentered)
ComboBoxGadget(#mfColorRequester, 10, 20, 100, 24, #PB_ComboBox_Image)

Color = RGB(255,255,255)
CreateImage(0, 16, 16, 32, Color)                         ;Creation de l'image 
AddGadgetItem(#mfColorRequester, -1, "Blanc", ImageID(0)) ;Ajout de la couleur dans la liste 
SetGadgetItemData(#mfColorRequester, 0, Color)            ;L'item crée est associé à la valeur de la couleur

Color = RGB(0,255,0)
CreateImage(1, 16, 16, 32, Color)
AddGadgetItem(#mfColorRequester, -1, "Vert", ImageID(1))
SetGadgetItemData(#mfColorRequester, 1, Color)

Color = RGB(0,0,255)
CreateImage(2, 16, 16, 32, Color)
AddGadgetItem(#mfColorRequester, -1, "Bleu", ImageID(2))
SetGadgetItemData(#mfColorRequester, 2, Color)

Color = RGB(255,0,0)
CreateImage(3, 16, 16, 32, Color)
AddGadgetItem(#mfColorRequester, -1, "Rouge", ImageID(3))
SetGadgetItemData(#mfColorRequester, 3, Color)

BindGadgetEvent(#mfColorRequester, @ChangeColor())
BindEvent(#PB_Event_CloseWindow, @Exit())

Repeat : WaitWindowEvent() : ForEver

Procedure ChangeColor()
  Protected BackgroundColor = GetGadgetItemData(#mfColorRequester, GetGadgetState(#mfColorRequester))
  SetWindowColor(0, BackgroundColor)
EndProcedure

Procedure Exit()
  End
EndProcedure

Re: Gadget rebel

Publié : dim. 04/juin/2017 21:16
par SPH
merci falsam, ca peux etre utile aussi :P

Re: Gadget rebel

Publié : dim. 04/juin/2017 21:22
par Zorro
SPH a écrit :le gadget rebel du jour :

Code : Tout sélectionner

Resultat = ColorRequester([Couleur])
Il apparait en haut a gauche de la fenetre. Ca fait bizzare. Peut on ouvrir le requester la ou il y a le bouton a cliquer ?
pas besoin d'api !!

il suffit d'utiliser le Container comme ceci

Code : Tout sélectionner

; on va poser le gadget colorRequester a ces coordonées


Declare color_requester(posx,posy)

Posx= 800
Posy=400
debug  color_requester(posx,posy)


Procedure color_requester(Posx,Posy)
		; By Zorro
		protected Win=1
		Protected Container=1
		OpenWindow(Win, posx, posy, 1, 1, "ImageGadget",#PB_Window_BorderLess     )		
		; ******* l'astuce pour placer le gadget palette ***********
				ContainerGadget(container,1, 1, 1, 1, #PB_Container_Raised) ;>2
						Couleur = ColorRequester() ;>3
				CloseGadgetList()  ;>2
		; **********************************************
		closewindow(win)
		ProcedureReturn Couleur
EndProcedure

Re: Gadget rebel

Publié : dim. 04/juin/2017 21:28
par falsam
Bien cet astuce Zorro :wink:

Re: Gadget rebel

Publié : dim. 04/juin/2017 22:32
par SPH
Thanks a looot :idea:

Re: Gadget rebel

Publié : dim. 04/juin/2017 23:08
par Ar-S
@Oui enfin je parlais de la commande en temps que telle. Vieux cheater :)
Dans ton exemple il faut créer une autre fenêtre si on veut faire l'effet du colorequester "indépendant" car si ta fenêtre est plus grande, il se retrouvera en haut à gauche de la fenêtre en question.

Re: Gadget rebel

Publié : lun. 05/juin/2017 10:42
par SPH
Dans les faits, le requester ne s'affiche pas au centre de la fenetre. Pkoi ? (j'ai peut etre detruit le dispositif...)

Code : Tout sélectionner

; on va poser le gadget colorRequester a ces coordonées
Posx= 800
Posy=400
#Win=1

OpenWindow(#Win, 0, 0, Posx, Posy, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)


ContainerGadget(0, 4, 4, 4, 4, #PB_Container_Raised) 
      ColorRequester()
      CloseGadgetList() 
      
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
      

Re: Gadget rebel

Publié : lun. 05/juin/2017 12:43
par Zorro
Ar-S a écrit :@Oui enfin je parlais de la commande en temps que telle. Vieux cheater :)
Dans ton exemple il faut créer une autre fenêtre si on veut faire l'effet du colorequester "indépendant" car si ta fenêtre est plus grande, il se retrouvera en haut à gauche de la fenêtre en question.
ben oui , en fait, en y reflechissant,
le but de cette astuce c'est de pouvoir positionner le Colorrequester ou l'on veux
et pour ça, on l'intergre dans une fenetre et un container ....
ça reste un color_requester independant

ce n'est pas un gadget !
c'est un requester ! (qu'on peut maintenant positionner ou l'on veux ) ....
si on veux un colorrequester Gadget a integrer dans une fenetre, il faut le creer de toute piece :)
tout simplement

Re: Gadget rebel

Publié : lun. 05/juin/2017 14:08
par Zorro
en fait il suffit de fabriquer une procedure pour remplacer l'actuel fonction du requester de couleur

et ainsi obtenir ceci :

Code : Tout sélectionner

; on va poser le gadget colorRequester a ces coordonées


Declare color_requester(posx,posy)

Posx= 800
Posy=400
debug  color_requester(posx,posy) ; appel de notre nouveau requester


Procedure color_requester(Posx,Posy)
		; By Zorro
		protected Win=1
		Protected Container=1
		OpenWindow(Win, posx, posy, 1, 1, "ImageGadget",#PB_Window_BorderLess     )		
		; ******* l'astuce pour placer le gadget palette ***********
				ContainerGadget(container,1, 1, 1, 1, #PB_Container_Raised) ;>2
						Couleur = ColorRequester() ;>3
				CloseGadgetList()  ;>2
		; **********************************************
		closewindow(win)
		ProcedureReturn Couleur
EndProcedure