Page 1 sur 1

Modifier boutons, scrollbargadget etc...

Publié : dim. 10/janv./2010 9:37
par RedStar
Bonjour tout le monde !

Alors voila, aujourd'hui je suis confronté à un problème et j'aurait besoin de votre aide en espérant que vous pourrez répondre à mes demandes :lol:

Bien voila, je souhaiterais pouvoir modifier l'apparence d'un bouton sur une fenêtre ou par exemple la scrollbar pour éviter que sa m'affiche les boutons de windows tout moches etc (oui je n'aime pas trop les boutons XP :lol: ). En C c'est faisable avec GTK et j'aimerais savoir si vous connaîtriez un moyen similaire ou alors une astuce pour modifier ceci.

Je vous remercie d'avance pour vos réponses constructives.

Amicalement,

RedStar.

PS : J'ai déjà effectué plusieurs recherches sur les forums, je n'ai trouvé qu'une seule astuce pour changer l'apparence d'un bouton, mais j'aimerais, si vous en avez une autre, me proposer une astuce, Merci ! :D

Re: Modifier boutons, scrollbargadget etc...

Publié : dim. 10/janv./2010 9:42
par jbernard13
Bonjour

as tu regarder dans la doc ?
tu as la commande ButtonImageGadget() qui permet de changer l'apparence du bouton par une image , à toi de dessiné un beau bouton ...

Re: Modifier boutons, scrollbargadget etc...

Publié : dim. 10/janv./2010 9:54
par RedStar
Merci bien, mais je parlais de modifier totalement le bouton, de A à Z niveau apparence, pareil pour un scrollgadget, ou une liste déroulante par exemple, merci quand même d'avoir proposé ton aide ^^

RedStar.

Edit : Parfois une image parle plus que du texte ^^, alors voici un exemple de ce que je voudrais faire : http://img.clubic.com/photo/00513560.jpg

Re: Modifier boutons, scrollbargadget etc...

Publié : dim. 10/janv./2010 12:14
par Kwai chang caine
Bonjour REDSTAR

Oui tu as raison, napoleon disait lui meme qu'un dessin vaut mieux qu'une grande explication 8)

Tu peux aussi utiliser les gadgets images et cliquer dessus, car ils recoivent les evenements.

Autrement sur le forum, y'a des boutons modifiés autour d'une image.
Je ne sais pas si tu le sais, mais ça s'appelle "Skinné", fais une recherche sur ce genre de code
Car on peut skinner les fenetres et certains gadgets

Re: Modifier boutons, scrollbargadget etc...

Publié : dim. 10/janv./2010 12:33
par RedStar
Bonjour KCC ^^

Oui j'ai deja effectué beaucoup de recherches sur les forums concernant le mot "Skin", mais bon, je suis pas vraiment satisfait du résultat :lol: ...

Sinon je pensait carrément réinventer la roue en créant mon application avec la librarie 2D sdl incluse dans purebasic, je pense que c'est faisable, sa pourrait avoir un bon rendu mais ca serait légèrement compliqué ... surtout avec ce que je veut faire :mrgreen:

Re: Modifier boutons, scrollbargadget etc...

Publié : dim. 10/janv./2010 13:13
par Le Soldat Inconnu
Après, il faut passer tous les gadget en OwnerDraw

En gros API windows dans tous les sens et gros gros travail en perspective.

Tu peux récupérer la lib ButtonImageGadgetEx sur mon, il y a la source dedans. Tu verras le principe du ownerdraw pour les boutons.

Bon courage

Re: Modifier boutons, scrollbargadget etc...

Publié : dim. 10/janv./2010 18:37
par jbernard13
bonsoir

tu as ce logiciel( payant) qui permet crée des interfaces et des skins

http://purevision.reelmedia.org/

Re: Modifier boutons, scrollbargadget etc...

Publié : dim. 10/janv./2010 19:03
par RedStar
Merci je connaît mais bon... Je ne supporte pas vraiment le payant ^^, sauf si sa en vaux vraiment la peine... :mrgreen:

Re: Modifier boutons, scrollbargadget etc...

Publié : dim. 10/janv./2010 20:10
par jbernard13

Re: Modifier boutons, scrollbargadget etc...

Publié : dim. 24/janv./2010 12:40
par kwandjeen
C'est tout simple, mais ça a l'avantage de ne pas utiliser l'api Window et de faire des boutons tout à fait personnalisés. A toi de modifier/améliorer selon ton usage :wink:

Code : Tout sélectionner

Structure bouton
  pb_gadget.l
  image.l
  image_over.l
  image_clic.l
  image_inactif.l
  etat.b
  mode.b
EndStructure

  Global NewMap kw_bouton.bouton()

Procedure kw_create_bouton(id_gadget,x,y,tx,ty,image,image_over,image_clic)
  gadget = ImageGadget(id_gadget,x,y,tx,ty,ImageID(image))
  If id_gadget = #PB_Any
    id_gadget = gadget
  EndIf
  AddMapElement(kw_bouton(),Str(id_gadget))
  kw_bouton()\etat = 1
  kw_bouton()\image = image
  kw_bouton()\image_over = image_over
  kw_bouton()\image_clic = image_clic
  kw_bouton()\image_inactif = image
  kw_bouton()\pb_gadget = id_gadget
  ProcedureReturn id_gadget
EndProcedure
  
Procedure kw_event_bouton()
  retour = -1
  If IsWindow(GetActiveWindow())
    mx = WindowMouseX(GetActiveWindow())
    my = WindowMouseY(GetActiveWindow())
    ForEach kw_bouton()
      If kw_bouton()\etat
        a = Round((mx-GadgetX(kw_bouton()\pb_gadget))/GadgetWidth(kw_bouton()\pb_gadget),#PB_Round_Down)
        b = Round((my-GadgetY(kw_bouton()\pb_gadget))/GadgetHeight(kw_bouton()\pb_gadget),#PB_Round_Down)
        If Not a|b And kw_bouton()\mode = 0
          kw_bouton()\mode = 1
          SetGadgetState(kw_bouton()\pb_gadget,ImageID(kw_bouton()\image_over))
        ElseIf a|b
          kw_bouton()\mode = 0
          SetGadgetState(kw_bouton()\pb_gadget,ImageID(kw_bouton()\image))
        EndIf
        If kw_bouton()\mode = 1 And EventType() = #PB_EventType_LeftClick
          SetGadgetState(kw_bouton()\pb_gadget,ImageID(kw_bouton()\image_clic))
          retour = kw_bouton()\pb_gadget
          Delay(80)
          SetGadgetState(kw_bouton()\pb_gadget,ImageID(kw_bouton()\image_over))
        EndIf
      EndIf
    Next    
  EndIf
  ProcedureReturn retour
EndProcedure
  
  Procedure kw_enable_bouton(id_gadget,etat)
    kw_bouton(Str(id_gadget))\etat = etat
    If etat = 0
      SetGadgetState(id_gadget,ImageID(kw_bouton(Str(id_gadget))\image_inactif))
    EndIf    
  EndProcedure
  
  Procedure kw_set_image_bouton(id_gadget,mode,image)
    Select mode
      Case 1
        kw_bouton(Str(id_gadget))\image_over = image
      Case 2
        kw_bouton(Str(id_gadget))\image_clic = image
      Case 3
        kw_bouton(Str(id_gadget))\image_inactif = image
        If kw_bouton(Str(id_gadget))\etat = 0
          SetGadgetState(id_gadget,ImageID(kw_bouton(Str(id_gadget))\image_inactif))
        EndIf
      Default
        kw_bouton(Str(id_gadget))\image = image
    EndSelect
  EndProcedure
  
  CreateImage(1,168,35)
  StartDrawing(ImageOutput(1))
    Box(0,0,168,35,RGB(137, 172, 186))  
  StopDrawing()
  
  
  If OpenWindow(0, 0, 0, 245, 105, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If LoadImage(0, "C:\Program Files\PureBasic\Examples\Sources\Data\purebasic.bmp")    ; changez le 2ème paramètre en indiquant le chemin/fichier contenant votre image

      kw_create_bouton(0,10,10,100,83,0,1,1) ;gadget,x,y,width,height,image,repos,image_survol,image_clic on pourrai rajouter directement l'image inactif au lieu de passer par setimage
      kw_create_bouton(1,10,50,100,83,0,1,0)

    EndIf
    Repeat
      Select kw_event_bouton()  
        Case 0
          Debug "clic sur 0"
          ;kw_set_image_bouton(1,3,0)
        Case 1 
          Debug "clic sur 1"
      EndSelect
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf