Hi Leute,
eine kurze Frage zum Einfärben von Gadgets:
Kann mir jemand den Sendmessage Befehl zum Einfärben der Checkboxen einer Listicongadget sagen? (Gesetz sind die Checkboxen mit dem Befehl #PB_ListIcon_CheckBoxes).
Bisher sieht das Ganze noch so aus:
http://cnesm.i-networx.de/Unbenannt.GIF
hab bisher nichts ausmachen können!
Danke
CNESM
Sendmessage #LVm zum Einfärben von Checkboxes bei Listicong.
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Re: Sendmessage #LVm zum Einfärben von Checkboxes bei Listic
Wie Edel schon durchblicken lies, so einen Befehl gibt es nicht. Außerdem sind die regulären checkboxes, sowie die mit XP theme, reine Bitmap Dateien. Deshalb bietet das WinAPI auch keinen entsprechenden Befehl dafür.CNESM hat geschrieben: Kann mir jemand den Sendmessage Befehl zum Einfärben der Checkboxen einer Listicongadget sagen? (Gesetz sind die Checkboxen mit dem Befehl #PB_ListIcon_CheckBoxes).
Dir bleibt nur mittels des LVS_OWNERDRAWFIXED styles das Zeichnen selber zu übernehmen um benutzerdefinierte checkboxes darzustellen. Da hätte ich auch ein entsprechendes Beispiel was ich hier posten könnte. Allerdings bist du dann für alles verantwortlich wie z.B. die Auswahlfarben, Auswahlrahmen oder das mit Einbeziehen der ausgewählten styles wenn du das Gadget erstellst (FullRow, Gridlines, etc.).
Wie auch immer, ich hab mir mal die Zeit genommen einen schnellen und schmutzigen hack geschrieben der sich der internen ImageList bedient:
Code: Alles auswählen
; Title: Custom ListView Checkboxes
; Author: Fluid Byte
; Date: December 27, 2006
CreateImage(0,32,16)
hdc = StartDrawing(ImageOutput(0))
Box(0,0,32,16,GetSysColor_(#COLOR_WINDOW))
Box(2,2,13,13) : Box(18,2,13,13)
SetRect_(erc.RECT,3,3,14,14)
DrawEdge_(hdc,erc,#BDR_RAISEDINNER,#BF_RECT | #BF_MIDDLE)
OffsetRect_(erc,16,0)
DrawEdge_(hdc,erc,#BDR_RAISEDINNER,#BF_RECT | #BF_MIDDLE)
hPenLine = CreatePen_(0,2,0)
SelectObject_(hdc,hPenLine)
LineXY(20,4,28,12) : LineXY(28,4,20,12)
DeleteObject_(hPenLine)
StopDrawing()
OpenWindow(0,0,0,400,300,"Custom ListView Checkboxes",#WS_OVERLAPPEDWINDOW | 1)
CreateGadgetList(WindowID(0))
ListIconGadget(0,5,5,390,290,"Name",350)
himlListview = ImageList_Create_(16,16,#ILC_COLOR16,0,0)
ImageList_Add_(himlListview,ImageID(0),0)
SendMessage_(GadgetID(0),#LVM_SETIMAGELIST,#LVSIL_SMALL,himlListview)
SendMessage_(GadgetID(0),#LVM_SETIMAGELIST,#LVSIL_NORMAL,himlListview)
For i=1 To 30 : AddGadgetItem(0,-1,"List-View Item #" + Str(i)) : Next
While WaitWindowEvent() ! 16
If EventType() = #PB_EventType_LeftClick
GetCursorPos_(cpt.POINT)
ScreenToClient_(GadgetID(0),cpt)
MX = cpt\x : MY = cpt\y
lvh.LVHITTESTINFO
lvh\pt\x = MX : lvh\pt\y = MY
SendMessage_(GadgetID(0),#LVM_HITTEST,0,lvh)
If lvh\flags = #LVHT_ONITEMICON
lvi.LV_ITEM
lvi\mask = #LVIF_IMAGE
lvi\iItem = GetGadgetState(0)
SendMessage_(GadgetID(0),#LVM_GETITEM,0,lvi)
lvi\iImage = 1 - lvi\iImage
SendMessage_(GadgetID(0),#LVM_SETITEM,0,lvi)
EndIf
EndIf
Wend
ImageList_Destroy_(himlListview)
Code: Alles auswählen
Procedure IsChecked(iItem.w)
lvi.LV_ITEM
lvi\mask = #LVIF_IMAGE
lvi\iItem = iItem
SendMessage_(GadgetID(0),#LVM_GETITEM,0,lvi)
ProcedureReturn lvi\iImage
EndProcedure
Hoffe es hilft fürs Erste!

Mhhh 
Da hast du gute Arbeit geleistet. Hatte ja eigentlich gehofft, das es dafür einen einfachen Sendmessage Befehl geben würde, aber man kann nicht alles haben. Das Beispiel gehört auf jedenfall ins CodeArchiv, Andre (Soferns für dich in Ordnung ist Fluid Byte). Sehr gut geschrieben (fast and dirty hack
), verständlich aufgebaut und erfüllt seinen Zweck zu 100%
Danke für deine Hilfe!
P.S. Und ich hab die Hoffnung an selbst erstellte Scrollbalken im Listicongadget schon aufgegeben

Da hast du gute Arbeit geleistet. Hatte ja eigentlich gehofft, das es dafür einen einfachen Sendmessage Befehl geben würde, aber man kann nicht alles haben. Das Beispiel gehört auf jedenfall ins CodeArchiv, Andre (Soferns für dich in Ordnung ist Fluid Byte). Sehr gut geschrieben (fast and dirty hack

Danke für deine Hilfe!
P.S. Und ich hab die Hoffnung an selbst erstellte Scrollbalken im Listicongadget schon aufgegeben
