ist es möglich eine multiline ListIcon zelle mit 2
unterschiedlichen schriftfarben zu erstellen?
wenn die zellengröße vergrößert wurde kann
ja ein umbruch durch chr(13) eingefügt werden, aber
ich möchte den text der nächsten zeile in grau.
api guru gesucht ^^
ListIcon Multiline teilweiße färben
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: ListIcon Multiline teilweiße färben
Angepasste Version: ListIcon_Font+Color.pb (CodeArchiv)
Gruß
Thomas
Code: Alles auswählen
; German forum:
; Author: RedZack (updated for PB4.00 by blbltheworm)
; Date: 06. November 2002
; OS: Windows
; Demo: No
; Edit 31.5.2003 by Andre - removed FakeEndSelect
; Edit 18.06.2011 by ts-soft (div. aktualisierungen)
; ------------------------------------------------------------
; Zeilen in einem ListIconGadget einfärben und
; verschiedene Zeichensätze benutzen
; ------------------------------------------------------------
;
; Benötigte Strukturen und Konstanten
;
EnableExplicit
#CDDS_PREPAINT = $00000001
#CDRF_NOTIFYITEMDRAW = $00000020
#CDRF_NEWFONT = $00000002
#CDDS_ITEM = $00010000
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#LI_ICON_GADGET = 1
#LI_ICON1_GADGET = 2
;
; Hier werden die Zeile eingefärbt
;
Procedure Color_ListIconGadger ( lParam, color, colorbk)
Protected Result = 0
Protected *nml.NMLVCUSTOMDRAW = lParam
; CustomDraw Struktur kopieren
Select *nml\nmcd\dwDrawStage
; Windows mitteilen das jede Zeile einzeln gezeichnet werden
; sollen
Case #CDDS_PREPAINT : Result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT : ;Den 2ten Eintrag von #LI_ICON_GADGET gesondert einfärben
If *nml\nmcd\dwItemSpec = 2 And *nml\nmcd\hdr\idFrom = #LI_ICON_GADGET
*nml\clrTextBk = $00EAEA00
*nml\clrText = $00FF0000
;
; Einen neuen Zeichensatz
SelectObject_(*nml\nmcd\hDC, LoadFont (0, "Courier", 3));
; Das Ganze zurück
Result = #CDRF_NEWFONT
Else
If *nml\nmcd\dwItemSpec % 2 = 0
*nml\clrTextBk = colorbk
*nml\clrText = color
;
; Einen neuen Zeichensatz
SelectObject_(*nml\nmcd\hDC, LoadFont (0, "Courier", 3));
; Das Ganze zurück
Result = #CDRF_NEWFONT
Else
;Bei jedem 4ten Listeneintrag die
; Farbe und Font ändern
If *nml\nmcd\dwItemSpec % 4 = 1
*nml\clrTextBk = color
*nml\clrText = colorbk
; Einen neuen Zeichensatz
SelectObject_(*nml\nmcd\hDC, LoadFont (0, "Verdana", 6))
Result = #CDRF_NEWFONT
EndIf
EndIf
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
;
; Windows messages verarbeiten
;
Procedure WndProc(hWnd,Msg,wParam,lParam)
Protected *hdr.NMHDR, colorbk, color
Select Msg
; MW_NOTIFY message auswerten
Case #WM_NOTIFY : *hdr.NMHDR = lParam
; Das ListIconGadget steht in wParam
; EventGadgetID() funktioniert hier leider nicht
If wParam = #LI_ICON_GADGET Or wParam = #LI_ICON1_GADGET
Select wParam
Case #LI_ICON_GADGET : colorbk = $00EAEAEA
color = $00303030
Case #LI_ICON1_GADGET : colorbk = $00303030
color = $0000FFFF
EndSelect
; Zeichnet das ListIconGadget ?
If *hdr\code = #NM_CUSTOMDRAW
; Ja, dann einfärben
; FakeEndSelect ist einfach Sch....., bei anderen
; Programmiersprachen geht das auch ohne!
ProcedureReturn Color_ListIconGadger ( lParam, color, colorbk )
EndIf
EndIf
Default
ProcedureReturn #PB_ProcessPureBasicEvents
EndSelect
ProcedureReturn 0
EndProcedure
;
; Programmstart
;
Define x
If OpenWindow(1, 250, 250, 420, 215, "Color - ListIconGadget Demo", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
SetWindowCallback(@WndProc())
ListIconGadget(#LI_ICON1_GADGET,10,10, 95,191," Sonst was ",75, #PB_ListIcon_FullRowSelect)
For x = 0 To 20
AddGadgetItem(#LI_ICON1_GADGET ,-1, "Eintrag " + Str(x))
Next
ListIconGadget(#LI_ICON_GADGET ,110,10,300,191,"Spalte 1",100,#PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#LI_ICON_GADGET ,2, "Spalte 2", 100)
AddGadgetColumn(#LI_ICON_GADGET ,3, "Spalte 3", 100)
For x = 0 To 20
AddGadgetItem(#LI_ICON_GADGET ,-1, "Eintrag " + Str(x) + Chr(10) + "Irgendwas " + Chr(10) + "Irgendwas " )
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: ListIcon Multiline teilweiße färben
danke aber das ist leider nicht die richtige lösung^^
wenn das hier eine zelle wär
_______________
|Das ist ein text |
|aber hier anders |
also innerhalb der zelle den text umfärben nach dem zeilenumbruch.
hab schon auf msdn gesucht aber ich stoße nur auf LVM_SETINSERTMARKCOLOR
aber ich weiß nicht ob das das richtige ist.. bzw wie es angewendet wird.,
wenn das hier eine zelle wär
_______________
|Das ist ein text |
|aber hier anders |
also innerhalb der zelle den text umfärben nach dem zeilenumbruch.
hab schon auf msdn gesucht aber ich stoße nur auf LVM_SETINSERTMARKCOLOR
aber ich weiß nicht ob das das richtige ist.. bzw wie es angewendet wird.,
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: ListIcon Multiline teilweiße färben
Ganz falsch ist das obiges Beispiel aber nicht. Über *nml\nmcd\ kommst Du an den hDC sowie an RC,
also die Grösse und den DeviceContext zum malen. Jetzt muss da nur noch mit DrawText_() API hinein-
gemalt werden. Aber beim Malen und berechnen muss Dir jetzt noch ein anderer Helfen, ist nicht mein
Ding
also die Grösse und den DeviceContext zum malen. Jetzt muss da nur noch mit DrawText_() API hinein-
gemalt werden. Aber beim Malen und berechnen muss Dir jetzt noch ein anderer Helfen, ist nicht mein
Ding
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
