Librairie MoreGadgetColor version 1.00 beta beta beta...

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Librairie MoreGadgetColor version 1.00 beta beta beta...

Message 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Version 3.91 Win Win XP pro

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


bravo ! j'adopte !
:)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
Dernière modification par Anonyme2 le dim. 24/oct./2004 7:33, modifié 1 fois.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
DarkDragon
Messages : 12
Inscription : mer. 26/mai/2004 12:57
Localisation : Germany
Contact :

Message par DarkDragon »

Merçi, works fine here.
cya
Je ne peux pas parler français
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Encore merci, tres intéressant tout ca

Dri :)
barnierchristophe
Messages : 64
Inscription : lun. 07/févr./2005 11:18

Et pour les progressBar ??

Message 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:
Dernière modification par barnierchristophe le jeu. 28/juil./2005 16:50, modifié 1 fois.
Répondre