[Résolu] EditorGadget/ListIconGadget lignes en couleurs ?
[Résolu] EditorGadget/ListIconGadget lignes en couleurs ?
Bonjour,
Dans un EditorGadget (en lecture seule pour éviter une saisie manuelle) je voudrais changer de couleur en fonction d'un état de flux : VERT pour un flux entrant et BLEU pour un flux sortant.
L'objectif est de faire une sorte d'analyseur réseau Velbus
Exemple d'affichage :
-> 0FF834020501D804
<- 0FFB2202E101CC04
...
Est-ce possible facilement et sous tous les OS (Linux, Windows, MAC éventuellement plus tard avec la 4.70)
Même question pour un ListIconGadget ?
Dans un EditorGadget (en lecture seule pour éviter une saisie manuelle) je voudrais changer de couleur en fonction d'un état de flux : VERT pour un flux entrant et BLEU pour un flux sortant.
L'objectif est de faire une sorte d'analyseur réseau Velbus
Exemple d'affichage :
-> 0FF834020501D804
<- 0FFB2202E101CC04
...
Est-ce possible facilement et sous tous les OS (Linux, Windows, MAC éventuellement plus tard avec la 4.70)
Même question pour un ListIconGadget ?
Dernière modification par Golfy le mar. 14/août/2012 12:50, modifié 1 fois.
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/
Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
bonjour Golfy
voilà, j'ai celui là...
Cordialement
voilà, j'ai celui là...
Cordialement
Code : Tout sélectionner
;auteur cristian forum english
;-- SetLIGadgetItemColor
#NM_CUSTOMDRAW = -12 ; $FFFFFFF4
#CDRF_DODEFAULT = $0
#CDDS_PREPAINT = 1 ; $00000001
#CDRF_NOTIFYITEMDRAW = 32 ; $00000020
#CDRF_NEWFONT = 2 ; $00000002
#CDDS_ITEM = 65536 ; $00010000
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
;- Constants
#Window_Main_ID = 0
#Window_Main_Width = 500
#Window_Main_Height = 500
#Gadget_ListIcon_ID = 0
;- Variables
Global WMID.l ; - Handle of the main window
;- Procedures
Procedure SetLIGadgetItemColor(GadgetID.l, lParam.l)
*nml.NMLVCUSTOMDRAW = lParam
; - Copy CustomDraw Structure
Select *nml\nmcd\dwDrawStage
Case #CDDS_PREPAINT ; - tell Windows that every line has to be painted seperatly
Result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT ; - colorize lines
If *nml\nmcd\hdr\idFrom = GadgetID
For a = 0 To CountGadgetItems(GadgetID)
If *nml\nmcd\dwItemSpec = a
; - paint text red if column 2 is non-zero
If GetGadgetItemText(GadgetID, a, 1) <> "0"
*nml\clrTextBk = RGB(Random(200),Random(200),Random(200)) ; Background Color
*nml\clrText = RGB(255, 255, 255) ; Text Color
Else
*nml\clrTextBk = RGB(255, 255, 255) ; Background Color
*nml\clrText = RGB( 0, 0, 0) ; Text Color
EndIf
Result = #CDRF_NEWFONT
EndIf
Next a
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
Procedure ColorCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_NOTIFY
*hdr.NMHDR = lParam
Select wParam
Case #Gadget_ListIcon_ID ; - Your ListIconGadget
If *hdr\code = #NM_CUSTOMDRAW
Result = SetLIGadgetItemColor(#Gadget_ListIcon_ID, lParam)
EndIf
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure
;- Program
WMID = OpenWindow(#Window_Main_ID, 0, 0, #Window_Main_Width, #Window_Main_Height, "ListIcon with Colored Lines", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If WMID
ListIconGadget(#Gadget_ListIcon_ID, 0, 0, WindowWidth(#Window_Main_ID), WindowHeight(#Window_Main_ID), "Column 1", 150, #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#Gadget_ListIcon_ID, 1, "Column 2", WindowWidth(#Window_Main_ID)-155)
For a = 0 To 50
AddGadgetItem(#Gadget_ListIcon_ID, -1, "Line "+Str(a)+Chr(10)+"0")
AddGadgetItem(#Gadget_ListIcon_ID, -1, "Line "+Str(a)+Chr(10)+"Non-Zero")
Next a
SetWindowCallback(@ColorCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
quit = #True
EndSelect
Until quit = #True
EndIf
Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
....
Dernière modification par Backup le mar. 19/août/2014 10:13, modifié 1 fois.
Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
Merci Kermadec et Dobro.
@Dobro: Est-ce que je me trompe, ou bien à chaque fois que je vois un _ à la fin du procédure, cela signifie un appel à une API Windows ?
Dans ce cas, comment je gère le bidule sous Linux ? existe-t-il le même type d'API sous KDE ou Gnome ?
Exemple : SendMessage_
@Kermadec : question un peu identique sur la commande SetWindowCallback(@ColorCallback())
D'après la doc : Pour programmeurs expérimentés. Cette fonction est seulement disponible sous Microsoft Windows.
J'en conclus donc que si je veux être multi-plateforme, je vais devoir rester très sobre : ça tombe bien, j'aime bien le noir
@Dobro: Est-ce que je me trompe, ou bien à chaque fois que je vois un _ à la fin du procédure, cela signifie un appel à une API Windows ?
Dans ce cas, comment je gère le bidule sous Linux ? existe-t-il le même type d'API sous KDE ou Gnome ?
Exemple : SendMessage_
@Kermadec : question un peu identique sur la commande SetWindowCallback(@ColorCallback())
D'après la doc : Pour programmeurs expérimentés. Cette fonction est seulement disponible sous Microsoft Windows.
J'en conclus donc que si je veux être multi-plateforme, je vais devoir rester très sobre : ça tombe bien, j'aime bien le noir

Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/
Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
celui là devrait être multi...

Code : Tout sélectionner
;auteur kernadec aout 2012
OpenWindow(0,0,0,340,340, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
ListIconGadget(0, 20, 20, 312, 290,"",0, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines|#PB_ListIcon_MultiSelect)
SetGadgetColor(0, #PB_Gadget_LineColor, RGB(255,0,0))
AddGadgetColumn(0, 1,"N°", 30)
AddGadgetColumn(0, 2,"Nom", 140)
AddGadgetColumn(0, 3,"Tel", 140)
For i = 1 To 36
Str0$ = Str(i)
Str1$ = "Nom"
Str2$ = "1234567890"
AddGadgetItem (0, -1,Chr(10)+Str0$+Chr(10)+Str1$+Chr(10)+Str2$)
SetGadgetItemColor(0,i-1,#PB_Gadget_BackColor, RGB(100+Random(155),100+Random(155),100+Random(155)))
SetGadgetItemColor(0,i-1,#PB_Gadget_FrontColor, RGB(Random(255),Random(255),Random(255)))
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Dernière modification par kernadec le lun. 13/août/2012 20:42, modifié 3 fois.
Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
ha oui ...Golfy a écrit :Merci Kermadec et Dobro.
@Dobro: Est-ce que je me trompe, ou bien à chaque fois que je vois un _ à la fin du procédure, cela signifie un appel à une API Windows ?

Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
GEANT !kernadec a écrit :celui là devrait être multi...![]()
Code : Tout sélectionner
;auteur kernadec aout 2012 OpenWindow(0,0,0,340,340, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) ListIconGadget(0, 20, 20, 282, 290, "N°",0, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines|#PB_ListIcon_MultiSelect) SetGadgetColor(0, #PB_Gadget_LineColor, RGB(255,0,0)) AddGadgetColumn(0, 1, "Nom", 130) AddGadgetColumn(0, 2, "Tel", 130) For i = 1 To 36 Str0$=Str(i) Str1$ = "Nom" Str2$ = "1234567890" AddGadgetItem (0, -1, Str0$+Chr(10)+Str1$+Chr(10)+Str2$) SetGadgetItemColor(0,i-1,#PB_Gadget_BackColor, RGB(100+Random(155),100+Random(155),100+Random(155))) SetGadgetItemColor(0,i-1,#PB_Gadget_FrontColor, RGB(Random(255),Random(255),Random(255))) Next Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Merci Kermadec !!! je n'aurais pas cru qu'un code aussi simple soit suffisant : comme disait mon prof d'électronique :"ce qui se conçoit bien s'énonce clairement !"
Dernière modification par Golfy le lun. 13/août/2012 19:44, modifié 1 fois.
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/
Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
Pas grave... mon soucis étant de faire un outil pédagogique et utile, je recherche les codes les plus compatibles : c'est d'ailleurs pour ça que j'ai choisi Purebasic !Dobro a écrit :Golfy a écrit : ha oui ...désolé

Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/
Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
bonsoir Golfy
oui mais j'ai rencontré un problème que j'essaye de résoudre depuis tout a l'heure
la colonne n° refuse de se coller au départ du gadget, et laisse une bande sans couleur moche
je sais pas pourquoi
peut être à cause des checkbox ?
Cordialement
oui mais j'ai rencontré un problème que j'essaye de résoudre depuis tout a l'heure
la colonne n° refuse de se coller au départ du gadget, et laisse une bande sans couleur moche
je sais pas pourquoi

peut être à cause des checkbox ?
Cordialement
Code : Tout sélectionner
;auteur kernadec aout 2012
OpenWindow(0,0,0,340,340, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
ListIconGadget(0, 20, 20, 312, 290, "N°",30, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines|#PB_ListIcon_MultiSelect)
SetGadgetColor(0, #PB_Gadget_LineColor, RGB(255,0,0))
AddGadgetColumn(0, 1, "Nom", 130)
AddGadgetColumn(0, 2, "Tel", 130)
For i = 1 To 36
Str0$=Str(i)
Str1$ = "Nom"
Str2$ = "1234567890"
AddGadgetItem (0, -1,Str0$+Chr(10)+Str1$+Chr(10)+Str2$)
SetGadgetItemColor(0,i-1,#PB_Gadget_BackColor, RGB(100+Random(155),100+Random(155),100+Random(155)))
SetGadgetItemColor(0,i-1,#PB_Gadget_FrontColor, RGB(Random(255),Random(255),Random(255)))
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
voilà j'ai mis le premier petit code que j'ai posté à jour
pour avoir les numéros faut éviter la colonne de titre "0" du ListIconGadget
et créer une colonne identique ex:
et un chr(10) au départ de la ligne :
cordialement
pour avoir les numéros faut éviter la colonne de titre "0" du ListIconGadget
et créer une colonne identique ex:
Code : Tout sélectionner
AddGadgetColumn(0, 1,"N°", 30)
Code : Tout sélectionner
AddGadgetItem (0, -1,Chr(10)+ ;...etc.
Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
Tu as raison de corriger (pour ceux qui cherchent comment faire, c'est toujours plus facile)...
Dans mon cas, je ne colorie pas le background mais le texte : cela ne gênait donc pas
Ci-dessous un simili de ce dont j'ai besoin
Dans mon cas, je ne colorie pas le background mais le texte : cela ne gênait donc pas

Ci-dessous un simili de ce dont j'ai besoin

Code : Tout sélectionner
;auteur kernadec aout 2012
; modif Golfy (seulement couleur de texte + clignotement d'une ligne)
OpenWindow(0,0,0,340,340, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
ListIconGadget(0, 20, 20, 282, 290, "N°",30, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines|#PB_ListIcon_MultiSelect)
SetGadgetColor(0, #PB_Gadget_LineColor, RGB(100,0,0))
AddGadgetColumn(0, 1, "Heure", 70)
AddGadgetColumn(0, 2, "Frame", 170)
tx=RGB(50,50,200)
rx=RGB(50,200,50)
er=RGB(200,50,50)
For i = 1 To 15
Str0$=Str(i)
str1$=FormatDate("%hh:%ii:%ss",Date())
Str2$=Hex(Random(10000000))
AddGadgetItem (0, 0, Str0$+Chr(10)+Str1$+Chr(10)+Str2$)
x=Random(100)
;SetGadgetItemColor(0,i-1,#PB_Gadget_BackColor, RGB(100+Random(155),100,100))
If x < 50
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, rx)
ElseIf x > 80
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, er)
Else
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, tx)
EndIf
Next
d=ElapsedMilliseconds()
Repeat
a = WaitWindowEvent(10)
If ElapsedMilliseconds()-d > Random(300)+200
str1$=FormatDate("%hh:%ii:%ss",Date())
Str2$=Hex(Random(10000000))
AddGadgetItem (0, 0, Str0$+Chr(10)+Str1$+Chr(10)+Str2$)
x=Random(100)
;SetGadgetItemColor(0,i-1,#PB_Gadget_BackColor, RGB(100+Random(155),100,100))
If x < 50
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, rx)
ElseIf x > 80
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, er)
Else
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, tx)
EndIf
d= ElapsedMilliseconds()
RemoveGadgetItem(0,15)
EndIf
Until a = #PB_Event_CloseWindow
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/
Re: EditorGadget et/ou ListIconGadget ave lignes en couleurs
" Fantaisie Software "
Cordialement



Cordialement
Code : Tout sélectionner
;auteur kernadec aout 2012
; modif Golfy (seulement couleur de texte + clignotement d'une ligne)
OpenWindow(0,0,0,340,340, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
ListIconGadget(0, 20, 20, 274, 290, "",0, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines|#PB_ListIcon_MultiSelect)
SetGadgetColor(0, #PB_Gadget_LineColor, RGB(100,0,0))
AddGadgetColumn(0, 1, "N°", 30)
AddGadgetColumn(0, 2, "Heure", 70)
AddGadgetColumn(0, 3, "Frame", 170)
tx=RGB(50,50,200)
rx=RGB(50,200,50)
er=RGB(200,50,50)
For i = 1 To 15
Str0$=Str(i)
str1$=FormatDate("%hh:%ii:%ss",Date())
Str2$=Hex(Random(10000000))
AddGadgetItem (0, 0,Chr(10)+Str0$+Chr(10)+Str1$+Chr(10)+Str2$)
x=Random(100)
SetGadgetItemColor(0,0,#PB_Gadget_BackColor, RGB(250,250,100+Random(155)),2)
SetGadgetItemColor(0,0,#PB_Gadget_BackColor, RGB(250,100+Random(155),250),1)
SetGadgetItemColor(0,0,#PB_Gadget_BackColor, RGB(100+Random(155),250,250),3)
If x < 50
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, rx)
ElseIf x > 80
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, er)
Else
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, tx)
EndIf
Next
d=ElapsedMilliseconds()
Repeat
a = WaitWindowEvent(10)
If ElapsedMilliseconds()-d > Random(300)+200
i+1
If i>15
i=1
EndIf
str1$=FormatDate("%hh:%ii:%ss",Date())
Str2$=Hex(Random(10000000))
AddGadgetItem (0, 0,Chr(10)+Str(i)+Chr(10)+Str1$+Chr(10)+Str2$)
x=Random(100)
SetGadgetItemColor(0,0,#PB_Gadget_BackColor, RGB(250,250,100+Random(155)),2)
SetGadgetItemColor(0,0,#PB_Gadget_BackColor, RGB(250,100+Random(155),250),1)
SetGadgetItemColor(0,0,#PB_Gadget_BackColor, RGB(100+Random(155),250,250),3)
If x < 50
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, rx)
ElseIf x > 80
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, er)
Else
SetGadgetItemColor(0,0,#PB_Gadget_FrontColor, tx)
EndIf
d= ElapsedMilliseconds()
RemoveGadgetItem(0,15)
EndIf
Until a = #PB_Event_CloseWindow
Re: [Résolu] EditorGadget/ListIconGadget lignes en couleurs
A Noter : sous Windows, la liste reste en haut (l'ascenseur rétrécit mais ne descend pas). Sous linux (Ubuntu + Xfce4) la liste descend avec l'ascenseur ; du coup on ne voit que les premiers messages... bizarre comme comportement
Faut-il faire une demande à Fred ?

Faut-il faire une demande à Fred ?
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/
Re: [Résolu] EditorGadget/ListIconGadget lignes en couleurs
Je dirais oui moiGolfy a écrit :Faut-il faire une demande à Fred ?
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits