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. Bild

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 :allright: