Coloriser les lignes paire et impair des listiconGadget

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Coloriser les lignes paire et impair des listiconGadget

Message par microdevweb »

Tout est dans le titre, petite procédure pour coloriser les lignes paire et impair en différentes couleurs
(Nb: cette procédure est a appelée après chaque ajout d'item)

WindowsOnly
Code édité le 23 septembre 2015, en effet unz procédure est nécessaire pour empècher la sélection de ligne vide

Code : Tout sélectionner

Procedure ListColor(gadget, gridColor=$13458B,BgColorP=$FFFFFF,BgColorI=$008CFF,FgColorP=$000000,FgColorI=$000000)
      Protected Nb=CountGadgetItems(gadget)
      If SendMessage_(GadgetID(gadget),#LVM_GETCOUNTPERPAGE,0,0)>Nb
            Nb=SendMessage_(GadgetID(gadget),#LVM_GETCOUNTPERPAGE,0,0)
            For N=CountGadgetItems(gadget) To Nb-1
                  AddGadgetItem(gadget,-1,"")
            Next
      EndIf
      SetGadgetColor(gadget,#PB_Gadget_LineColor,gridColor)
      For N=1 To Nb
            If N & 1
                  SetGadgetItemColor(gadget,N-1,#PB_Gadget_BackColor,BgColorI)
                  SetGadgetItemColor(gadget,N-1,#PB_Gadget_FrontColor,FgColorI)
            Else
                  SetGadgetItemColor(gadget,N-1,#PB_Gadget_BackColor,BgColorP)
                  SetGadgetItemColor(gadget,N-1,#PB_Gadget_FrontColor,FgColorP)
            EndIf
      Next
EndProcedure
Procedure NoEmpty()
      Protected G=EventGadget()
      Protected N=GetGadgetState(G)
      If GetGadgetItemText(G,N,0)=""
            SetGadgetState(G,-1)
      EndIf
EndProcedure
OpenWindow(0,0,0,800,600,"teste",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(1,10,10,504,400,"Item A",100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
ListIconGadget(2,10,430,504,100,"Item A",100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
AddGadgetColumn(1,1,"Item B",100)
AddGadgetColumn(1,2,"Item C",100)
AddGadgetColumn(1,3,"Item D",100)
AddGadgetColumn(1,4,"Item E",100)
AddGadgetColumn(2,1,"Item B",100)
AddGadgetColumn(2,2,"Item C",100)
AddGadgetColumn(2,3,"Item D",100)
AddGadgetColumn(2,4,"Item E",100)
For N=1 To 14
      AddGadgetItem(1,-1,"qaqqqq")
      AddGadgetItem(2,-1,"qaqqqq")
Next
ListColor(1)
BindGadgetEvent(1,@NoEmpty())
ListColor(2,$000000,$FFFF00,$EEEEAF,$8B0000,$8B0000)
BindGadgetEvent(2,@NoEmpty())
Repeat
      event=WaitWindowEvent()
      If event=#PB_Event_CloseWindow:End:EndIf
ForEver 
Dernière modification par microdevweb le mer. 23/sept./2015 14:39, modifié 3 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Coloriser les lignes paire et impair des listiconGadget

Message par Kwai chang caine »

Merci, marche nickel sur XP 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Coloriser les lignes paire et impair des listiconGadget

Message par celtic88 »

slt microdevweb ,J 'ai beaucoup appris par vou video sur youtube https://www.youtube.com/channel/UCZRZlS ... UJX9HR_qfw
alors je tu dis un grand merci :)
et a propos de listiconGadget ,,voila un autre méthode pour changer le format et la couleur a un Élément spécifié :p

Code : Tout sélectionner

;Coder Celtic88 juste un test ;p

Global hndllv

Procedure WinCallback(hWnd, uMsg, wParam, lParam)     
  If uMsg = #WM_NOTIFY
    *nhdr.NMHDR=lParam
    If *nhdr\hwndFrom = hndllv
      code=*nhdr\code
      Select code
        Case #NM_CUSTOMDRAW
          *customdraw.NMLVCUSTOMDRAW=lParam
          iDrawStage = *customdraw\nmcd\dwDrawStage
          Select iDrawStage
            Case #CDDS_ITEMPREPAINT
              ProcedureReturn #CDRF_NOTIFYSUBITEMDRAW
 						Case #CDDS_ITEMPREPAINT
							ProcedureReturn #CDRF_NOTIFYSUBITEMDRAW             
            Case (#CDDS_ITEMPREPAINT|#CDDS_SUBITEM)
              iItem = *customdraw\nmcd\dwItemSpec
              subitem = *customdraw\iSubItem
              *hDC = *customdraw\nmcd\hdc
              
              *customdraw\clrText=RGB(Random(255,100),Random(255,0),Random(255,0))
              *customdraw\clrTextBk=RGB(Random(255,100),Random(255,0),Random(255,0))
              
*Hfont=CreateFont_(Random(29,10),0,0,0,#FW_NORMAL,#False,#False,#False,#DEFAULT_CHARSET,#OUT_DEFAULT_PRECIS,#CLIP_DEFAULT_PRECIS,#DEFAULT_QUALITY,0,"Arial")
              
              SelectObject_(*hDC,*Hfont)
              
             ; InvalidateRect_(hndllv,0,#True)
              ProcedureReturn #CDRF_NEWFONT
              
          EndSelect
      EndSelect
    EndIf 
  EndIf
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 

If OpenWindow(0, 0, 0, 690, 300, "ListIconGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  ListIconGadget(0,  10,  10, 690-20, 300-20, "Colonne 1", 100)
  For b = 1 To 3      
    AddGadgetColumn(0, b, "Colonne " + Str(b+1), 65)
  Next b
  For b = 0 To 4          
    AddGadgetItem(0, b, "Elément 1"+Chr(10)+"Elément 2"+Chr(10)+"Elément 3"+Chr(10)+"Elément 4")
  Next b
  hndllv=GadgetID(0)
  SetWindowCallback(@WinCallback())
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
.....i Love Pb :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Coloriser les lignes paire et impair des listiconGadget

Message par Kwai chang caine »

En moins simple avec la callback, mais marche aussi :wink:
Merci Celtic88 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Coloriser les lignes paire et impair des listiconGadget

Message par microdevweb »

Merci celtic88,

C'est intéressant
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Coloriser les lignes paire et impair des listiconGadget

Message par microdevweb »

Voici une remarque ajoutée

ATTENTION: Le problème réside dans le fait que la ligne ajoutée (pour la colorisation de toute la table est sélectionnable donc en résumé cette procédure n'est pas utilisable

Code : Tout sélectionner


Et zut.......
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Coloriser les lignes paire et impair des listiconGadget

Message par falsam »

microdevweb a écrit :Et zut.......
Voila que notre ami Microdevweb pete les plombs poliement :wink:
Reviens Leon, ce n'est rien.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Coloriser les lignes paire et impair des listiconGadget

Message par microdevweb »

Bha rien de grave, mais j'ai lancé le développement une mise à jour d'une appli pour un client (précédemment réalisé avec Windev que ne souhaite plus utilisé) en Pb. Je voulais le même style de table, je vais les dessiner dans un canvas.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Coloriser les lignes paire et impair des listiconGadget

Message par falsam »

N'utilise pas d'API dans ce cas

Code : Tout sélectionner

Procedure ListColor(gadget, gridColor=$13458B,BgColorP=$FFFFFF,BgColorI=$008CFF,FgColorP=$000000,FgColorI=$000000)
  Protected Nb=CountGadgetItems(gadget)
  ;If SendMessage_(GadgetID(gadget),#LVM_GETCOUNTPERPAGE,0,0)>Nb
  ;  Nb=SendMessage_(GadgetID(gadget),#LVM_GETCOUNTPERPAGE,0,0)
  ;  For N=CountGadgetItems(gadget) To Nb-1
  ;    AddGadgetItem(gadget,-1,"")
  ;  Next
  ;EndIf
  SetGadgetColor(gadget,#PB_Gadget_LineColor,gridColor)
  For N=1 To Nb
    If N & 1
      SetGadgetItemColor(gadget,N-1,#PB_Gadget_BackColor,BgColorI)
      SetGadgetItemColor(gadget,N-1,#PB_Gadget_FrontColor,FgColorI)
    Else
      SetGadgetItemColor(gadget,N-1,#PB_Gadget_BackColor,BgColorP)
      SetGadgetItemColor(gadget,N-1,#PB_Gadget_FrontColor,FgColorP)
    EndIf
  Next
EndProcedure
OpenWindow(0,0,0,800,600,"teste",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(1,10,10,504,400,"Item A",100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
ListIconGadget(2,10,430,504,100,"Item A",100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
AddGadgetColumn(1,1,"Item B",100)
AddGadgetColumn(1,2,"Item C",100)
AddGadgetColumn(1,3,"Item D",100)
AddGadgetColumn(1,4,"Item E",100)
AddGadgetColumn(2,1,"Item B",100)
AddGadgetColumn(2,2,"Item C",100)
AddGadgetColumn(2,3,"Item D",100)
AddGadgetColumn(2,4,"Item E",100)
For N=1 To 20
  AddGadgetItem(1,-1,"qaqqqq")
  AddGadgetItem(2,-1,"qaqqqq")
Next
ListColor(1)
ListColor(2,$000000,$FFFF00,$EEEEAF,$8B0000,$8B0000)
Repeat
  event=WaitWindowEvent()
  If event=#PB_Event_CloseWindow:End:EndIf
ForEver 
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Coloriser les lignes paire et impair des listiconGadget

Message par microdevweb »

Merci Falsam,

Mais le problème en faisant de la sorte c'est que les lignes non remplies ne sont pas colorisées, ce qui n'est pas super beau
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Coloriser les lignes paire et impair des listiconGadget

Message par Micoute »

Mais pourquoi ne mets-tu pas un drapeau qui t'indique si la ligne est paire ou impaire ?

Code : Tout sélectionner

i = 0 ; Compteur servant à colorer notre liste selon qu'il est pair ou impair
If i%2 = 1 ; si notre compteur est pair
  SetGadgetItemColor(#Liste_Resultat, i, #PB_Gadget_BackColor, $FFD2D2)
Else ; sinon, s'il est impair
  SetGadgetItemColor(#Liste_Resultat, i, #PB_Gadget_BackColor, $D7D7FF)
EndIf
i+1 ; on incrémente notre compteur
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Coloriser les lignes paire et impair des listiconGadget

Message par celtic88 »

@Spock choisir la couleur de l'élément a partire de son texte c est pas très pratique :? ,pour quoi pas passer l id de couleur par l attributs d élément :roll:
SetGadgetItemData(#Gadget, Element, Valeur)
Resultat = GetGadgetItemData(#Gadget, Element)

ou cree un base de données qui contient les infos de chaque item se sera le mieux
Dernière modification par celtic88 le lun. 21/sept./2015 22:14, modifié 2 fois.
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Coloriser les lignes paire et impair des listiconGadget

Message par celtic88 »

If *nml\nmcd\dwItemSpec = a ?

pourquoi tu compar le numero de l'élément a string ?
.....i Love Pb :)
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Coloriser les lignes paire et impair des listiconGadget

Message par microdevweb »

@Spock,

Merci pour ton code, mais ce que je désire vraiment c'est que toutes les lignes visibles de la ListeIcon même celles au quelles on n'a pas ajouté d'item soit colorisée.
Exemple une listeIcone vide, j'aimerais que les lignes visibles mais pourtant vides soit colorisée.

@Micoute, merci mais le problème n'est pas de savoir si la ligne est paire ou impair, mais le problème repris ci-dessus
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Coloriser les lignes paire et impair des listiconGadget

Message par microdevweb »

@Spock,

Oui mais si tu remplis la ligne avec un espace (comme dans ma procédure) la ligne est sélectionnable et pouvoir sélectionner une ligne vide c'est pas top.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre