Listview Umrandung ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Fusselohr
Beiträge: 236
Registriert: 02.04.2007 10:43
Kontaktdaten:

Listview Umrandung ?

Beitrag 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
Mein Projekt besteht immernoch und wächst stündlich.

Du willst die Entwicklung mitverfolgen ?
Dann besuche jetzt den Entwicklungsblog unter
http://rpg-fire-games.blogspot.com/
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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 ...
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Fusselohr
Beiträge: 236
Registriert: 02.04.2007 10:43
Kontaktdaten:

Beitrag von Fusselohr »

DANKE (sorry das ich etwas länger off war)

DU BIST GENIAL :allright:
Mein Projekt besteht immernoch und wächst stündlich.

Du willst die Entwicklung mitverfolgen ?
Dann besuche jetzt den Entwicklungsblog unter
http://rpg-fire-games.blogspot.com/
Antworten