ButtonImageGadget() image+Texte

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

ButtonImageGadget() image+Texte

Message par julien »

Serailt il possible d'avoir une fonction tout prête d'un bouton avec du texte+ une image ?

Pour le moment on ne peut qu'avoir du texte ou une image ! :(
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

utilise la LIB ButtonImageGadgetEx qui est dispo sur mon site.

elle fait exactement ce que tu demandes ;)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

Dsl pour la réponse en retard,

T'as lib est très cool, je l'avais déja, mais la je cherche un moyen pour mettre une image sur un bouton classique fait avec la commande PB

Image

Je voudrai faire comme sur la capture
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ah ok, c pluis clair comme ça.

effectivement, ce serait bien mais doit y avoir une astuce, v voir
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Le + simple me paraît de faire une image qui contient le texte et l'image et de l'attacher au bouton :

Code : Tout sélectionner

  ImageID = CreateImage(0, 100, 20)
  StartDrawing(ImageOutput())
    LineXY(3, 3, 14, 14, #Yellow)
    LineXY(3, 14, 14, 3, #Yellow)
    DrawingMode(1)
    BackColor(0, 0, 0)
    FrontColor(255, 255, 255)
    Locate(20, 2)
    DrawText("Bouton")
  StopDrawing()
  
  If OpenWindow(0,0,0,120,100,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ButtonImage") And CreateGadgetList(WindowID(0)) 
    ButtonImageGadget(0,10,10,100,20,ImageID) 
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
  EndIf 
Bien sur si tu disposes d'une image de base pour le bouton, il est facile de la charger et de rajouter le texte en mode dessin.

Slts
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

............
Dernière modification par Backup le mer. 28/sept./2011 10:14, modifié 1 fois.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Dobro - FWeil : ça revient à ma lib, vos exemples :)
et ce n'est pas vraiment ce qu'on recherche, on veut garder le design du bouton XP et juste ajouter une icone à coté du texte
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

Delphi le fait... bou et PB allez Fred au boulot :D :D

J'ai cherché dans les API mais j'ai rien trouvé de concret
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bon ben on remballe !! :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

@Soldat Inconnu,

Tu doit utiliser les boutons Owner-Draw, je suis étonné que tu n'es pas rajouté la possibilité d'afficher le dessin du bouton avec les API.Je l'ai fait mais il y a un petit moment déjà et c'était avec mon ancien language que je n'utilise plus maintenant que j'ai Pure.

:)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ben ... heu, on fait comment, tu m'intéresses :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Bon ben bouge pas, je vais sur mon ancien Forum.......


Voilà, évidemment, y a des corrections à apporter, j'avais pas compris visiblement à quoi servait les masques "&" à l'époque. :?

Je te mets la procédure que j'utilisais:

Code : Tout sélectionner

SUB DRAWITEM

 		    hdcButton=di.hdc
 			SetBkMode(hdcButton, @transparent) 
			SetTextColor(hdcButton, rgb(57,128,244))
			RE.L=0:RE.T=0:RE.R=C:RE.B=D
			Dime.l1=50:Dime.T1=18:Dime.R1=100:Dime.B1=40			
				IF  di.itemAction=1
					DrawFrameControl(hdcButton, RE, @DFC_BUTTON, @DFCS_BUTTONPUSH)
					drawIconEx(hdcButton , 10, 10, Smile, 32, 32, 0, 0, @DI_NORMAL)
					DrawText(hdcButton, "Smile", -1, dime, @DT_LEFT )
				ENDIF

				IF di.itemState=17
					DrawFrameControl(hdcButton, RE, @DFC_BUTTON, @DFCS_BUTTONPUSH|@DFCS_PUSHED)
					drawIconEx(hdcButton , 12, 12, Anger, 32, 32, 0, 0, @DI_NORMAL)
					DrawText(hdcButton, "Anger", -1, dime, @DT_LEFT )
				ENDIF

				IF di.itemState=16 
					DrawFrameControl(hdcButton, RE, @DFC_BUTTON, @DFCS_BUTTONPUSH)
					drawIconEx(hdcButton , 10, 10, Smile, 32, 32, 0, 0, @DI_NORMAL)
					DrawText(hdcButton, "Smile", -1, dime, @DT_LEFT )
				ENDIF


				IF di.itemState=@ODS_FOCUS & p=1 
					drawIconEx(hdcButton , 10, 10, Laugh, 32, 32, 0, 0, @DI_NORMAL)
 					SetBkMode(hdcButton, @opaque) 
					DrawText(hdcButton, "Laugh", -1, dime, @DT_LEFT )
					Dime.l1=30  :Dime.T1=78:Dime.R1=228:Dime.B1=96
					SetTextColor(hdcButton, rgb(128,128,244))
					DrawText(hdcButton, "Return on the button", -1, dime, @DT_LEFT )
				ENDIF

RETURN
Comme ça, tu prends directement ce qui t'intéresse!

:)

[EDIT] Bien sûr, c'est DrawFrameControl qui permet d'afficher un bouton dans ses différents états!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Voila un code qui fonctionne sur XP
J'ai pas mis toutes les constantes pour ne pas alourdir.

Pour l'image, vous trouverez bien quelque chose en 16x16 sur votre PC.

Code : Tout sélectionner

#Window = 0
#BCM_FIRST = $1600
#BCM_SETIMAGELIST = #BCM_FIRST + $0002
#BUTTON_IMAGELIST_ALIGN_LEFT = $0000

Enumeration
  #Bouton1
EndEnumeration

Structure BUTTON_IMAGELIST
  hImageList.l
  margin.RECT
  uAlign.l
EndStructure
Image.BUTTON_IMAGELIST

hImg = ImageList_LoadImage_(#Null,"dir.bmp",16,1,#CLR_DEFAULT,#IMAGE_BITMAP,#LR_LOADFROMFILE)

Image\hImageList = hImg
Image\uAlign = #BUTTON_IMAGELIST_ALIGN_LEFT
Image\margin\left = 10

If OpenWindow(#Window,0,0,200,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Bouton avec image") 
  CreateGadgetList(WindowID(#Window)) 
  hButton1 = ButtonGadget(#Bouton1,10,10,180,25,"Image à gauche") 
  
  SendMessage_(hButton1,#BCM_SETIMAGELIST,0,Image)
  
  Repeat
    Select WindowEvent()
      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #Bouton1
            SetWindowTitle(#Window,"Bouton cliqué")
        EndSelect
        
      Case #PB_Event_CloseWindow
        quit = #True
        
    EndSelect
  Until quit
  End
EndIf
Chris :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

nico a écrit : c'était avec mon ancien language que je n'utilise plus maintenant que j'ai Pure.
:)

c'etait quoi ce language ?? :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

marche pas chez moi sous 2000 ton code Chris :( zut, et je vois pas d'ou peu venir l'erreur.

tu l'as testé sur quel OS pou ne pas avoir d'os dans le fonctionnement de ce code ?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre