Page 1 sur 3

Coloriser les lignes paire et impair des listiconGadget

Publié : ven. 18/sept./2015 10:30
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 

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : ven. 18/sept./2015 16:28
par Kwai chang caine
Merci, marche nickel sur XP 8)

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : sam. 19/sept./2015 21:26
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

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : dim. 20/sept./2015 8:50
par Kwai chang caine
En moins simple avec la callback, mais marche aussi :wink:
Merci Celtic88 8)

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : dim. 20/sept./2015 22:29
par microdevweb
Merci celtic88,

C'est intéressant

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : lun. 21/sept./2015 11:38
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.......

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : lun. 21/sept./2015 14:49
par falsam
microdevweb a écrit :Et zut.......
Voila que notre ami Microdevweb pete les plombs poliement :wink:
Reviens Leon, ce n'est rien.

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : lun. 21/sept./2015 15:34
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.

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : lun. 21/sept./2015 15:39
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 

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : lun. 21/sept./2015 16:23
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

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : lun. 21/sept./2015 16:51
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

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : lun. 21/sept./2015 22:01
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

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : lun. 21/sept./2015 22:08
par celtic88
If *nml\nmcd\dwItemSpec = a ?

pourquoi tu compar le numero de l'élément a string ?

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : mar. 22/sept./2015 13:32
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

Re: Coloriser les lignes paire et impair des listiconGadget

Publié : mar. 22/sept./2015 16:11
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.