buttongadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

buttongadget

Message par hardy »

J'ai essayé setwindowrgn_(gadgetid(..),...) sur un buttongadget, et ne donne rien. Normal? Marche sur les fenêtres, les listicongadget,...
Mais là...

Autre chose : comment changer les couleurs de fond de gadgets/fenêtres?
Ai essayé un code récupéré sur purearea basé sur un callback, mais ne marche pas dans mon programme.

Et puis aussi, comment créer un imagebuttongadget avec de la transparence?

Et puis aussi ( :cry: ) personne il essaie http://perso.wanadoo.fr/berliozo pour me dire si ça marche (une espèce de taskmanager, version 1.00 )

Ah oui, tant que j'y suis, peut-on afficher des sprites directement sur l'écran "normal" (comment accéder au buffer(s) video)?
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

y'a une lib pour ça va voir sur www.purearena.net
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

J'ai regardé. Je ne vois pas quelle lib me conviendrait. Laquelle proposes-tu?
Pour la couleur de fond, setwindowclasslong(...) marche avec bien divers gadgets, mais pas les buttongadget (pourquoi?)
Je vais devoir faire des imagebuttongadget (c'est plus long!)
Moi qui voulais juste un peu de couleur pour égayer.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ah oui, tant que j'y suis, peut-on afficher des sprites directement sur l'écran "normal" (comment accéder au buffer(s) video)?
dans le suget "application" j'ai fait un topic intitule

FRED Nous surveille

dedans j'ai fait un petit programme avec des yeus qui regarde le pointeur de souris

et Le Soldat inconu en a fait une variante qui se promene sur l'ecran
alors bien sur c'est une fenetre mais peut etre pourra tu 'inspirer de ça .. :D

pour les couleur je crois qu'il faut utiliser la librairie Puretools de Danilo
tu la trouvera ici : http://www.purearea.net/pb/english/index.htm


et pis reedite ton message pour laisser un espace entre la fin de ton lien
et la lettre qui suit dans la phrase car la avec mon navigateur (mozilla)
ton lien est inactif !! :(
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

tu peux également utiliser ma lib ButtonImageGadgetEx que tu trouveras sur mon site qui permet de faire des buttonimagegadget sans bordure et avec l'apspect qui change quand on passe la souris dessus et quand on clique.
dès que je veux faire des jolis boutons, je passe avec ceci.
par contre, ça ne supporte pas la transparence donc une astuce, la couleur de fond de la fenêtre standard peut-être récupérer avec ça :

Code : Tout sélectionner

GetSysColor_(#COLOR_3DFACE)
ensuite suffit de dessiner sur une image ayant cette couleur de fond l'image avec de la transparence. puis passer cette image au bouton :wink:
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)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Merci moi , j'ai grabé ton exemple ça peut servir ! :D
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Merci bien.
Pour les yeux, déjà vu. Et très amusant! :D
Mais ça, je sais faire. Il s'agit d'une fenêtre, certes modifiée avec setwindowrgn. Mais un sprite, sans ouvrir d'autre écran ?
Pour les boutons, j'ai déjà pensé à mettre la couleur de fond de la fenêtre. Mais vraiment rien pour la transparence?
Les buttongadgets ont-ils un statut de fenêtre? (je me demande, vu que les fonctions sur les fenêtres ne marchent pas dessus)
quoiqu'il y a un truc bizarre : en passant par des callbacks, on arrive à faire des choses qui marchent parfois, mais pas toujours. Pb entre la callback et la boucle usuelle waitwindowevent()?

En tous les cas, je récupère ta lib! :D
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Je ne trouve pas la lib :cry:
Où est-elle? (c'est bien le site codeFR, non?)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

hardy a écrit :Pour la couleur de fond, setwindowclasslong(...) marche avec bien divers gadgets, mais pas les buttongadget (pourquoi?)
Les bouton en couleur doivent être "ownerdrawn" pour pouvoir appliquer la couleur.

Sinon, fWeil a posté une procédure il y a déjà lontemps sur le forum anglais pour mettre de la couleur avec Buttonimagegadget qui doit être dans code archive.

Sinon, j'ai écrit une petite lib sans doc( :oops: ) pour mettre certains gadgets en couleur. Voir mon post ici http://purebasic.hmt-forum.com/viewtopic.php?t=647

Pour être clair, il ne faut pas intercepter dans une callback PB les événement #WM_CTLCOLORSTATIC ou#WM_CTLCOLOREDIT car je les intercepte dans ma librairie, sinon y a plus rien qui va....

Ca peut aider pour faire des applications simples et je n'ai pas encore eu de problèmes.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

hardy a écrit :Merci bien.
quoiqu'il y a un truc bizarre : en passant par des callbacks, on arrive à faire des choses qui marchent parfois, mais pas toujours. Pb entre la callback et la boucle usuelle waitwindowevent()?

En tous les cas, je récupère ta lib! :D
A la base, les bouton sont des fenêtres ayant comme class "BUTTON".

Sinon, si ca marche parfois c'est que le code est bon sinon il y a une erreur quelque part. Seul le code peut nous renseigner. :wink:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Je ne trouve pas la lib
Où est-elle? (c'est bien le site codeFR, non?)
sur mon site le WWW en bas du message, pas sur Codes-FR qui est certe hébergé chez moi mais qui est communautaire, ceux veulent aidé donne un coup et c'est tout.

donc mon site, c'est http://perso.wanadoo.fr/lesoldatinconnu/
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)]
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Voila des codes récupérés (je ne sais plus où)

Code : Tout sélectionner

OpenWindow(0,100,150,400,400,#PB_Window_SystemMenu,"TEST")
CreateGadgetList(WindowID())
TextGadget(1,10,10,100,15,"Hoegaarden",#PB_Text_Center)
TextGadget(2,120,10,100,15,"Jupiler",#PB_Text_Center)
StringGadget(3, 10, 40, 200, 40, "Goedendag allemaal, voor mij een pintje" , #PB_String_Multiline)
CheckBoxGadget(4, 10, 90,100, 20, "Beer Here")

Global Yellow, Green, blauw
Yellow = CreateSolidBrush_($66E8FB)
Green = CreateSolidBrush_($7BDF84)
blauw=CreateSolidBrush_($E5B91A)

Declare myCallback(WindowID, Message, wParam, lParam)

SetWindowCallback(@myCallback())
Repeat
Until WaitWindowEvent() = #PB_EventCloseWindow

Procedure myCallback(WindowID, Message, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  Select Message
  Case #WM_CTLCOLORSTATIC
    Select lparam
    Case GadgetID(1)
    
      SetBkMode_(wParam,#TRANSPARENT)
      SetTextColor_(wParam, $FFFFFF)
      Result = Yellow
    Case GadgetID(4)
      SetBkMode_(wParam,#TRANSPARENT)
      SetTextColor_(wParam, $FFFFFF)
      Result = blauw
    EndSelect
  Case #WM_CTLCOLOREDIT
    Select lparam
    Case GadgetID(3)
    
      SetBkMode_(wParam,#TRANSPARENT)
      SetTextColor_(wParam, $FFFFFF)
      Result = green
    EndSelect
  EndSelect
  ProcedureReturn Result
EndProcedure
et

Code : Tout sélectionner

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=973&highlight=
; Author: Feri
; Date: 11. May 2003

;****************************************************************************** 
;* Beispiel zum Einfärben von Gadgets                                         * 
;****************************************************************************** 
; 
Global HintergrundFarbe1 
Global HintergrundFarbe2 
HintergrundFarbe1=CreateSolidBrush_(RGB(0,0,0))         ; schwarz 
HintergrundFarbe2=CreateSolidBrush_(RGB(255,255,255))   ; weiß 
; 
Procedure COL_STRINGGADGET(WindowID,Message,wParam,lParam) 
;:::::FÄRBT STRINGGADGET UM::::: 
Result=#PB_ProcessPureBasicEvents 
Select Message 
  Case #WM_CTLCOLOREDIT 
; ::: #WM_CTLCOLOREDIT funktioniert für alle SkinGadget und StringGadget ::: 
    Select lParam 
      Case GadgetID(1)                      ; hier die Gadget-Nummer angegeben 
        SetBkMode_(wParam,#TRANSPARENT) 
        SetTextColor_(wParam,RGB(0,255,0))   ; Schriftfarbe (grün) 
        Result=HintergrundFarbe1             ; Hintergrundfarbe (schwarz) 
    EndSelect 
  Case #WM_CTLCOLORSTATIC 
; ::: #WM_CTLCOLORSTATIC funktionert für alle Frame3DGadget, OptionGadget,  ::: 
; ::: TextGadget und TrackBarGadget ::: 
    Select lParam 
      Case GadgetID(2)                      ; das ist die GadgetID für das TextGadget(2,...) 
        SetBkMode_(wParam,#TRANSPARENT) 
        SetTextColor_(wParam,RGB(0,0,0))     ; Schriftfarbe (schwarz) 
        Result=HintergrundFarbe2             ; Hintergrundfarbe (weiß) 
      Case GadgetID(3)                      ; das ist die GadgetID für das TextGadget(3,...) 
        SetBkMode_(wParam,#TRANSPARENT) 
        SetTextColor_(wParam,RGB(255,0,0))   ; Schriftfarbe (rot) 
        Result=HintergrundFarbe2             ; Hintergrundfarbe (schwarz) 
    EndSelect 
; Case #WM_CTLCOLORLISTBOX 
; ::: #WM_CTLCOLORLISTBOX funktioniert für alle ListBoxGadget ::: 
EndSelect 
ProcedureReturn Result 
EndProcedure 
; 
OpenWindow(0,100,300,400,200,#PB_Window_SystemMenu,"Testfenster") 
SetWindowCallback(@COL_STRINGGADGET()) 
; 
CreateGadgetList(WindowID()) 
StringGadget(1,10,10,90,20,"StringGadget") 
TextGadget(2,10,40,300,100,"TextGadget 2",#pb_text_border) 
TextGadget(3,10,160,300,30,"TextGadget 3",#PB_Text_Center) 
; 
Repeat 
Until WaitWindowEvent() = #PB_EventCloseWindow 
DeleteObject_(HintergrundFarbe1) 
DeleteObject_(HintergrundFarbe2) 
End
; ExecutableFormat=Windows
; EOF
Mais inséré dans ma callback, ne marche pas pour les boutons...
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Evidement, le code ci-dessus ne répond pas au message pour colorier les boutons.


Voici ce que dit la doc Microsoft (j'espère que ton anglais va bien)


The system sends a WM_CTLCOLORBTN message to a button's parent window before drawing a button. This message contains a handle to the button's device context and a handle to the child window. The parent window can use these handles to change the button's text and background colors. However, only owner-drawn buttons respond to the parent window processing the message.

Ce qui donne en français :

Le système envoie un message WM_CTLCOLORBTN à la fenêtre parent du bouton avant de dessiner le bouton. Ce message contient le Handle du Device context du bouton et le Handle de la fenêtre enfant. La fenêtre parent peut utiliser ces handles pour changer les couleurs du texte et du fond du texte. Cependant, seul les boutons owner-drawn répondent à la fenêtre parent qui traite le message.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

As-tu essayé ma petite lib pour colorier certains gadgets ?
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

A ben évidemment...
Faut dire qu'avec tous ces messages, pour tous les connaître...
Bon ben avec ça, ça devrait tourner.

Pas encore essayé ta lib., mais très prochainement.
Au fait, j'ai diverses docs sur windows, mais quelle est la tienne?
M'intéresse. Elle a l'air assez complète.
Répondre