Page 1 sur 2

Librairie MoreGadgetColor version 1.00 beta beta beta...

Publié : mar. 04/mai/2004 10:54
par Anonyme2
Bon, j'ai mis sur mon site une petite lib pour mettre en couleur les gadgets suivants :

TextGadget()
STrinGadget()
SpinGadget()
OptionGadget()
CheckBoxGadget()

Je n'ai mis aucune vérification alors si vous essayer de colorier un gadget autre que ceux là, si ça plante, viendrez pas pleurer :D

J'ai simplement tester sous WIN98, sur XP non mais y a pas de raison que ça ne marche pas sauf peut-être si on active les thèmes, là j'ai pas regardé.

Pas fait la doc, de toute façon il n'y a que 2 commandes :

SetGadgetColor(#Gadget, CouleurTexte.l, CouleurFond.l) pour colorier et on met à -1 si on ne veut pas changer une couleur.

RemoveGadgetColor(#Gadget) pour supprimer la couleur

La librairie est ici :

http://denislabarre.free.fr/Librairies/MoreGadgetColor

qui est un fichier sans extension à mettre dans le répertoire PureBasic\PureLibraries\UserLibraries

Lorsque ce fichier est dans le répertoire, supprimer son extension .txt

ça marche avec la version 3.90 avec la nouvelle je ne sais pas.

Je vais faire des tests et essayer de compiler mes libs avec le nouveau linker.

Et voici un petit bout de code qui marche chez moi

Code : Tout sélectionner

; Constantes
Enumeration
   #MainWindow
   #Fenetre_Secondaire
   #ButtonGadget1
   #ButtonGadget2
   #ButtonGadget3
   #ButtonGadget4
   #ButtonGadget5
   #ButtonGadget6
   #ButtonGadget7
   #TextGadget
   #TextGadget1
   #CheckBoxGadget
   #OptionGadget
   #StringGadget
   #SpinGadget
   #Text_Fenetre_Secon
   #Text_Fenetre_Secon1
EndEnumeration

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
   Procedure NouvelleFenetre()
      If OpenWindow(#Fenetre_Secondaire, 0, 0, 350, 340, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Colorier les Gadgets")
         If CreateGadgetList(WindowID())
         TextGadget(#Text_Fenetre_Secon, 80, 160, 150, 25, "#Text_Fenetre_Secon:")
         SetGadgetColor(#Text_Fenetre_Secon, #blue, #white)

            Repeat
               Select WaitWindowEvent()
                     
                  Case #PB_EventGadget
                     Select EventGadgetID()
                           
                     EndSelect
                     
                  Case #PB_EventCloseWindow
                     If EventWindowID() = #Fenetre_Secondaire
                        RemoveGadgetColor(#Text_Fenetre_Secon)
                        CloseWindow(#Fenetre_Secondaire)
                        quit + 1
                     EndIf
               EndSelect
               
            Until quit
            
      EndIf
      EndIf
   EndProcedure
   ; ==================================================================================================================
   

If OpenWindow(#MainWindow, 200, 500, 450, 400, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Colorisation des Gadgets")
   #LargeurBouton = 260 : #offset = 150
   If CreateGadgetList(WindowID())
   ButtonGadget(#ButtonGadget1, 20 + #offset, 20, #LargeurBouton, 35, "Colorier SpinGadget", #PB_Button_MultiLine)
   ButtonGadget(#ButtonGadget2, 20 + #offset, 70, #LargeurBouton, 35, "Supprimer couleur SpinGadget", #PB_Button_MultiLine)
   ButtonGadget(#ButtonGadget3, 20 + #offset, 120, #LargeurBouton, 35, "Colorier CheckBoxGadget", #PB_Button_MultiLine)
   ButtonGadget(#ButtonGadget4, 20 + #offset, 170, #LargeurBouton, 35, "Supprimer couleur CheckBoxGadget", #PB_Button_MultiLine)
   ButtonGadget(#ButtonGadget5, 20 + #offset, 220, #LargeurBouton, 45, "Colorier StringGadget", #PB_Button_MultiLine)
   ButtonGadget(#ButtonGadget6, 20 + #offset, 280, #LargeurBouton, 45, "Supprimer couleur StringGadget", #PB_Button_MultiLine)
   ButtonGadget(#ButtonGadget7, 20 + #offset, 340, #LargeurBouton, 45, "Nouvelle fenêtre" + Chr(10) + "TextGadget", #PB_Button_MultiLine)
   
   SpinGadget(#SpinGadget,20,20,100,25,0,1000) 
   SetGadgetState (#SpinGadget,5)
   SetGadgetText(#SpinGadget,"5")
 
   TextGadget(#TextGadget, 10, 60, 150, 25, "TextGadget :")
   
   TextGadget(#TextGadget1, 10, 90, 150, 25, "TextGadget 1:")
   CheckBoxGadget(#CheckBoxGadget, 10, 120, 150, 25, "CheckBoxGadget :")
   OptionGadget(#OptionGadget, 10, 150, 150, 25, "OptionGadget :")
   
   StringGadget(#StringGadget, 10, 190, 150, 25, "StringGadget :")
   
   Repeat
      Select WaitWindowEvent()
         Case #PB_EventGadget
            
            event = EventGadgetID()
            If event = #ButtonGadget1
              SetGadgetColor(#SpinGadget, #red, 0)
               
            ElseIf event = #ButtonGadget2
               RemoveGadgetColor(#SpinGadget)
               
            ElseIf event = #ButtonGadget3
                SetGadgetColor(#CheckBoxGadget, #yellow, #red)
               
            ElseIf event = #ButtonGadget4
                RemoveGadgetColor(#CheckBoxGadget)
               
            ElseIf event = #ButtonGadget5
                SetGadgetColor(#StringGadget, #yellow, #red)
               
            ElseIf event = #ButtonGadget6
                RemoveGadgetColor(#StringGadget)
               
            ElseIf event = #ButtonGadget7
               NouvelleFenetre()               
               
            ElseIf event = #SpinGadget 
               SetGadgetText(#SpinGadget,Str(GetGadgetState(#SpinGadget))) 
               WindowEvent()

            EndIf
         Case #PB_EventCloseWindow
            Quit + 1
            
      EndSelect
      
   Until Quit
EndIf
EndIf

End

Publié : mar. 04/mai/2004 11:02
par Chris
Ca fonctionne parfaitement sous XP avec la 3.91b.

PS: Tu pourrais poster tes codes dans les balise :wink:

Arrrggghhh
T'as corrigé pendant que je postais :evil: :lol:

Chris :)

Publié : mar. 04/mai/2004 12:05
par Anonyme2
Merçi Chris,

j'ai fait cette librairie uniquement parce que j'ai eu des problèmes avec l'explorerListGadget lorsque plusieurs éléments étaient sélectionnées (avec l'option #PB_Explorer_AlwaysShowSelection), lorsque j'ouvrais une fenêtre par dessus avec des textgadgets en couleur traités avec la Callback SetWindowCallback(), la sélection disparaisait et finalement en désactivant la callback, ils étaient à nouveau présents. Je me suis dit que je devais me faire une petite lib pour colorier facilement, et maintenant c'est fait en espérant qu'il n'y ai pas de problème avec le multifenêtrage.

Publié : mar. 04/mai/2004 12:30
par Anonyme2
Juste encore une petite info,

Je stocke toutes les infos des gadgets coloriés dans une liste chaînée.
Lorsque l'on utilise la commande RemoveGadgetColor(), je supprime l'élément de la liste s'il exite dans cette liste.

Maintenant si on cré des fenêtres imbriquées et que l'on utilise les commandes, il ne faut pas oublier d'utiliser la commande RemoveGadgetColor() lorsque l'on ferme une fenêtre pour tous les gadgets de cette fenêtre pour ne pas alourdir la scrutation de la liste chaînée (ça va de toute façon très vite) et si vous ne le faite pas, ça marchera tout de même.

Publié : mar. 04/mai/2004 16:24
par Anonyme2
Voici la version 1.10 qui supporte maintenant les ListViewGadget.

Cette librairie ajoute peu de code à l'exécutable.

Pour les comboBoxGadget, je suis dessus, mais la librairie telle quelle permet de mettre la ligne éditable en couleur, mais pas la liste déroulante.

Ici :

http://denislabarre.free.fr/Librairies/MoreGadgetColor


voici le code qui permet de mettre en couleur tous les gadgets possibles

Code : Tout sélectionner

; Constantes
Enumeration
   #MainWindow
   #Fenetre_Secondaire
   #ButtonGadget1
   #ButtonGadget2
   #ButtonGadget3
   #ButtonGadget4
   #ButtonGadget5
   #ButtonGadget6
   #ButtonGadget7
   #ButtonGadget8
   #ButtonGadget9
   #ButtonGadget10
   #ButtonGadget11
   #ButtonGadget12
   #ButtonGadget13
   #ButtonGadget14
   #ButtonGadget15
   #TextGadget
   #TextGadget1
   #CheckBoxGadget
   #OptionGadget
   #StringGadget
   #SpinGadget
   #ListViewGadget1
   #ComboBoxGadget1
   #Text_Fenetre_Secon
   #Text_Fenetre_Secon1
EndEnumeration

; /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
; \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
   Procedure NouvelleFenetre()
      If OpenWindow(#Fenetre_Secondaire, 0, 0, 350, 340, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Colorier les Gadgets")
         If CreateGadgetList(WindowID())
         TextGadget(#Text_Fenetre_Secon, 80, 160, 150, 25, "#Text_Fenetre_Secon:")
         SetGadgetColor(#Text_Fenetre_Secon, #blue, #white)

            Repeat
               Select WaitWindowEvent()
                     
                  Case #PB_EventGadget
                     Select EventGadgetID()
                           
                     EndSelect
                     
                  Case #PB_EventCloseWindow
                     If EventWindowID() = #Fenetre_Secondaire
                        RemoveGadgetColor(#Text_Fenetre_Secon)
                        CloseWindow(#Fenetre_Secondaire)
                        quit + 1
                     EndIf
               EndSelect
               
            Until quit
            
      EndIf
      EndIf
   EndProcedure
   ; ==================================================================================================================
   

If OpenWindow(#MainWindow, 200, 500, 450, 400, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Colorisation des Gadgets")
   #LargeurBouton = 260 : #offset = 150
   If CreateGadgetList(WindowID())

   ButtonGadget(#ButtonGadget1, 20 + #offset, 10, #LargeurBouton, 15, "Colorier SpinGadget")
   ButtonGadget(#ButtonGadget2, 20 + #offset, 30, #LargeurBouton, 15, "Supprimer couleur SpinGadget")

   ButtonGadget(#ButtonGadget3, 20 + #offset, 55, #LargeurBouton, 15, "Colorier TextGadget")
   ButtonGadget(#ButtonGadget4, 20 + #offset, 75, #LargeurBouton, 15, "Supprimer couleur TextGadget")

   ButtonGadget(#ButtonGadget5, 20 + #offset, 100, #LargeurBouton, 15, "Colorier CheckBoxGadget")
   ButtonGadget(#ButtonGadget6, 20 + #offset, 120, #LargeurBouton, 15, "Supprimer couleur CheckBoxGadget")

   ButtonGadget(#ButtonGadget7, 20 + #offset, 145, #LargeurBouton, 15, "Colorier OptionGadget")
   ButtonGadget(#ButtonGadget8, 20 + #offset, 165, #LargeurBouton, 15, "Supprimer couleur OptionGadget")       

   ButtonGadget(#ButtonGadget9, 20 + #offset, 190, #LargeurBouton, 15, "Colorier StringGadget")
   ButtonGadget(#ButtonGadget10, 20 + #offset, 210 , #LargeurBouton, 15, "Supprimer couleur StringGadget")

   ButtonGadget(#ButtonGadget11, 20 + #offset, 230, #LargeurBouton, 15, "Colorier ComboBoxGadget")
   ButtonGadget(#ButtonGadget12, 20 + #offset, 250 , #LargeurBouton, 15, "Supprimer couleur ComboBoxGadget")

   ButtonGadget(#ButtonGadget13, 20 + #offset, 300, #LargeurBouton, 15, "Colorier ListViewGadget" )
   ButtonGadget(#ButtonGadget14, 20 + #offset, 320 , #LargeurBouton, 15, "Supprimer couleur ListViewGadget")

   ButtonGadget(#ButtonGadget15, 20 + #offset, 360, #LargeurBouton, 15, "Nouvelle fenêtre")
   
   SpinGadget(#SpinGadget,20,20,100,25,0,1000) 
   SetGadgetState (#SpinGadget,5)
   SetGadgetText(#SpinGadget,"5")
 
   TextGadget(#TextGadget, 10, 65, 150, 25, "TextGadget :")
   
   CheckBoxGadget(#CheckBoxGadget, 10, 100, 150, 25, "CheckBoxGadget :")
   OptionGadget(#OptionGadget, 10, 150, 150, 25, "OptionGadget :")
   
   StringGadget(#StringGadget, 10, 190, 150, 25, "StringGadget :")
   
   ListViewGadget(#ListViewGadget1, 10, 280, 150, 100)
   AddGadgetItem(#ListViewGadget1, -1, "ListViewGadget " )
   AddGadgetItem(#ListViewGadget1, -1, "Exemple")
   AddGadgetItem(#ListViewGadget1, -1, "une ligne de plus")
   AddGadgetItem(#ListViewGadget1, -1, "une autre" )
   AddGadgetItem(#ListViewGadget1, -1, "et pour finir ...")

   ComboBoxGadget(#ComboBoxGadget1, 10, 235, 150, 100)
   AddGadgetItem(#ComboBoxGadget1, -1, "ComboBoxGadget" )
   AddGadgetItem(#ComboBoxGadget1, -1, "Exemple")
   AddGadgetItem(#ComboBoxGadget1, -1, "une ligne de plus")
   AddGadgetItem(#ComboBoxGadget1, -1, "une autre" )
   AddGadgetItem(#ComboBoxGadget1, -1, "et pour finir ...")
   SetGadgetState(#ComboBoxGadget1, 0)

   Repeat
      Select WaitWindowEvent()
         Case #PB_EventGadget
            
            event = EventGadgetID()
            If event = #ButtonGadget1
              SetGadgetColor(#SpinGadget, #red, -1)
               
            ElseIf event = #ButtonGadget2
               RemoveGadgetColor(#SpinGadget)
               
            ElseIf event = #ButtonGadget3
                SetGadgetColor(#TextGadget, #yellow, #White)
               
            ElseIf event = #ButtonGadget4
                RemoveGadgetColor(#TextGadget)
               
            ElseIf event = #ButtonGadget5
                SetGadgetColor(#CheckBoxGadget, -1, #Blue)
               
            ElseIf event = #ButtonGadget6
                RemoveGadgetColor(#CheckBoxGadget)
               
            ElseIf event = #ButtonGadget7
                SetGadgetColor(#OptionGadget, $5B2EA4, -1)
               
            ElseIf event = #ButtonGadget8
                RemoveGadgetColor(#OptionGadget)

            ElseIf event = #ButtonGadget9
                SetGadgetColor(#StringGadget, #white, #Black)
               
            ElseIf event = #ButtonGadget10
                RemoveGadgetColor(#StringGadget)

            ElseIf event = #ButtonGadget11
                SetGadgetColor(#ComboBoxGadget1, $B3A34C, 0)
               
            ElseIf event = #ButtonGadget12
                RemoveGadgetColor(#ComboBoxGadget1)

            ElseIf event = #ButtonGadget13
                SetGadgetColor(#ListViewGadget1, #blue, #yellow)
               
            ElseIf event = #ButtonGadget14
                RemoveGadgetColor(#ListViewGadget1)

            ElseIf event = #ButtonGadget15
               NouvelleFenetre()               
               
            ElseIf event = #SpinGadget 
               SetGadgetText(#SpinGadget,Str(GetGadgetState(#SpinGadget))) 
               WindowEvent()

            EndIf
         Case #PB_EventCloseWindow
            Quit + 1
            
      EndSelect
      
   Until Quit
EndIf
EndIf

End

Publié : sam. 23/oct./2004 18:21
par Dr. Dri
Sympa comme lib,
j'ai bien aimé l'exemple. Mais il ne fonctionne pas avec le listview :s

Sinon j'aimerai connaitre la marche à suivre pour changer les couleurs d'un stringgadget... J'ai voulu me tourner vers l'api SetTextColor_() car c'est la couleur du texte que je voudrais changer la couleur du texte mais il y a besoin du hDC et je n'ai pas trouvé comment changer la couleur du texte :(

Dri

Publié : sam. 23/oct./2004 19:22
par nico
Version 3.92 Win Win XP

La listview avec ou sans les Thèmes ne fonctionne pas.

L'option Gadget ne fonctinne pas avec les Thèmes.

Publié : sam. 23/oct./2004 20:13
par Backup
Version 3.91 Win Win XP pro

La listview avec ou sans les Thèmes ne fonctionne pas.


bravo ! j'adopte !
:)

Publié : dim. 24/oct./2004 6:33
par Anonyme2
Ha sacré XP

Avec les thèmes XP activés (enfin ce sont les styles XP puisque les thèmes sont apparus avec WIN 95), il n'est pas possible de changer les couleurs avec les API classiques en interceptant les messages sauf pour quelques uns et souvent que le fond (Frame3D par exemple).

Pour mettre tout de même de la couleur, il faut retirer le thème XP au gadget. A partir du moment ou on retire un style XP, on se retrouve avec un gadget de type "ancien". Mais je persiste à dire que certain contrôles ne réagissent pas exactement comme s'il étaient de style "ancien".

J'utilise cette méthode dans ma librairie MoreListicongadget pour 2 contrôles :

Les Progressbar, car essayez le de mettre une progressbar lisse avec les thèmes XP, vous avez quoi ? d'ailleurs, regardez l'image de la doc PB, on voit une progressbar qui devrait être lisse mais qui ne l'est pas :mrgreen: . Pour mettre de la couleur à ces progressbar sous XP, je teste que l'on est sous XP et je retire le thème tel que MS l'indique dans ce que j'ai mis plus haut.

Les ListiocnGadget pour pouvoir appliquer de la couleur aux boutons des en-têtes de colonnes.


Making a Control Appear to Have No Visual Style in a Dialog Box or Window That Has a Visual Style
In some cases, applications have custom-drawn controls that should not use a visual style, even when the other controls in the window do have a visual style applied. If you want to mark any custom-drawn control as having no visual style, you must call SetWindowTheme and pass in the window handle for the control and an empty string for both the pszSubAppName and pszSubIdList parameters. Calling the SetWindowTheme function with empty strings causes the control to render without a visual style appearance. The following code snippet shows how to create a button control and then call SetWindowTheme to remove the visual style from the button.

HWND hwndButton;

hwndButton = CreateWindow (TEXT ("button"), ...);
if (hwndButton)
{
SetWindowTheme (hwndButton, TEXT (" "), TEXT (" "));
}

If you decide to have the control change at run time to a visual style control you can call SetWindowTheme but pass NULL for the two string parameters.

Using UxTheme Manager to Render a Control Whose Parts Do Not Have a Visual Style
If you have a control that is not one of the common controls and you want it to look appropriate on a computer that has visual style files installed, you can take one of the following approaches.

The basic approach is to use the system metric colors. Most system metric colors are set when a visual style file is applied.
You can use parts from other controls and render each part separately. For example, for a calendar control that consists of a grid, you can treat each square formed by the grid as a toolbar button. Do the following to program the squares as toolbar buttons.
Call OpenThemeData as follows:
OpenThemeData (hwnd, "Toolbar");

Use the returned theme handle to render each of the squares on the calendar.
You can mix and match control parts by calling OpenThemeData multiple times for a given control and using the appropriate theme handle to draw different parts. In some visual styles, however, certain parts might not be compatible with other parts.
Some specialized applications that need to match the Windows XP look above the control level might need to detect the currently loaded visual style and have custom renderings designed to match the look. This can be useful for applications that provide visual style architecture.

Publié : dim. 24/oct./2004 6:49
par Anonyme2
Si vous utilisez PB version 3.92 beta 1 ou 2, vous devez utilisez la mise à jour que j'ai faite (rubrique annonce du forum) sinon vos applications planteront à la fermeture.

Publié : dim. 24/oct./2004 7:41
par Anonyme2
Dobro a écrit :Version 3.91 Win Win XP pro

La listview avec ou sans les Thèmes ne fonctionne pas.


bravo ! j'adopte !
:)

Essayez ma librairie MoreListviewGadget qui ne sert qu'à colorier les ListView. L'exemple fonctionne avec les Thèmes XP.

C'est pas simple de pouvoir regrouper une seule et même commande pour colorier des gadgets différents.

Publié : dim. 24/oct./2004 8:30
par DarkDragon
Merçi, works fine here.

Publié : dim. 24/oct./2004 18:45
par Anonyme2
DarkDragon a écrit :Merçi, works fine here.
Hi DarkDragon,

wich one ?

MoreGadgetColor or MoreListviewGadget ?

MoreGadgetColor is just a beta one without doc, i put this lib only on french forum. There is some troubles with it under XP with styles and under Win2000 too if i well remember.

Publié : lun. 25/oct./2004 9:18
par Dr. Dri
Encore merci, tres intéressant tout ca

Dri :)

Et pour les progressBar ??

Publié : jeu. 28/juil./2005 16:44
par barnierchristophe
:?: En fait, j'aurais besoin de changer la couleur des progressbar......Je n'y arrive pas avec votre librairie.. :(

Je travaille sous XP, une idée?? :idea: