Seite 1 von 1
Listview Umrandung ?
Verfasst: 04.03.2008 20:54
von Fusselohr
Guten Abend,
ich hätte da mal ne frage wegen des Listview-Gadgets...
Ich hätte gerne das wenn ich auf bestimmte Einträge klicke, diese nicht aktiviert im Sinne von Komplett farbig unterlegt, sondern nur Umrandet werden, sodass ich sagen kann das damit nichts angefangen werden kann.
Wäre froh wenn mir jemand helfen könnte

,
Fusselohr
Verfasst: 04.03.2008 21:56
von Fluid Byte
Dazu musst du das Gadget mit dem Ownerdraw Flag erstellen und bist dann selbst verantwortlich für das Anzeigen der Items. Das eigentliche Problem ist aber das immer dieses beknackte Focusrect angezeigt wird und somit immer den Rahmen überzeichnet.
Muss grad mal nen bissi basteln ...
Verfasst: 05.03.2008 19:29
von Fluid Byte
So ein Schmuh! Man muss #True zurückgeben wenn man die #WM_DRAWITEM Nachricht bearbeitet.
Ok, so gehts:
Code: Alles auswählen
Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
Select uMsg
Case #WM_DRAWITEM
*lpdis.DRAWITEMSTRUCT = lParam
; * Draw Background (clearing)
SelectObject_(*lpdis\hDC,GetStockObject_(#WHITE_PEN))
SelectObject_(*lpdis\hDC,GetStockObject_(#WHITE_BRUSH))
Rectangle_(*lpdis\hDC,*lpdis\rcItem\left,*lpdis\rcItem\top,*lpdis\rcItem\right,*lpdis\rcItem\bottom)
; * Draw Caption
Length = SendMessage_(GadgetID(0),#LB_GETTEXTLEN,*lpdis\itemID,0)
lpBuffer = AllocateMemory(Length)
SendMessage_(GadgetID(0),#LB_GETTEXT,*lpdis\itemID,lpBuffer)
TextOut_(*lpdis\hDC,3,*lpdis\rcItem\top + 2,lpBuffer,Length)
FreeMemory(lpBuffer)
; * Draw Selection Border
If *lpdis\itemState & #ODS_SELECTED
SelectObject_(*lpdis\hDC,GetStockObject_(#BLACK_PEN))
SelectObject_(*lpdis\hDC,GetStockObject_(#NULL_BRUSH))
Rectangle_(*lpdis\hDC,*lpdis\rcItem\left,*lpdis\rcItem\top,*lpdis\rcItem\right,*lpdis\rcItem\bottom)
EndIf
ProcedureReturn 1
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0,0,0,320,240,"void",#WS_OVERLAPPEDWINDOW | 1)
CreateGadgetList(WindowID(0))
ListViewGadget(0,5,5,0,0,#LBS_OWNERDRAWFIXED)
For i=1 To 90
AddGadgetItem(0,-1,"Untitled #" + Str(i))
Next
SetWindowCallback(@WindowCallback())
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_SizeWindow
ResizeGadget(0,5,5,WindowWidth(0)-10,WindowHeight(0)-10)
EndIf
Until EventID = #PB_Event_CloseWindow
Verfasst: 06.03.2008 15:08
von Fusselohr
DANKE (sorry das ich etwas länger off war)
DU BIST GENIAL
