Seite 1 von 2

Toolbar "Highlight-Effekt" deaktivieren

Verfasst: 08.10.2008 13:56
von X0r
Hallo,
wie kann man den "Highlight-Effekt" bei einer toolbar deaktivieren(Also so wie es bei jaPBe ist)?

Verfasst: 08.10.2008 16:47
von cxAlex
Ich denke das das bei Jabe keine 'echte' Toolbar ist sondern aus Buttons zusammengestoppelt.

Verfasst: 09.10.2008 17:11
von X0r
Ja, wahrscheinlich, aber ist das trotzdem irgendwie möglich?

Verfasst: 09.10.2008 17:18
von Kiffi
X0r hat geschrieben:Ja, wahrscheinlich, aber ist das trotzdem irgendwie möglich?
möglich, eine 'unechte' Toolbar zu bauen? Falls ja: jaPBe liegt ja auch im
Source-Code vor [1]. Dort kannst Du Dir anschauen, wie GPI / gnozal das
gemacht haben.

[1]: http://freenet-homepage.de/gnozal/jaPBeForPB400.7z

Grüße ... Kiffi

Verfasst: 09.10.2008 17:32
von Kaeru Gaman
nee, das war doch nicht seine basis-frage...

wenn es ein style-flag dafür gibt, dann wird man das mit ner message setzen/löschen können.
ich würde zielgerichtet in die Beschreibung des Fensterelements "Toolbar" auf der MSDN schauen.

Verfasst: 09.10.2008 22:40
von Fluid Byte

Code: Alles auswählen

#TBN_HOTITEMCHANGE = #TBN_FIRST - 13

OpenWindow(0,0,0,320,240,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

CreateToolBar(0,WindowID(0))

For i=0 To 10 : ToolBarStandardButton(i,i) : Next

Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
	Select uMsg
		Case #WM_NOTIFY
		*nmh.NMHDR = lParam
		
		Select *nmh\hwndFrom 
			Case ToolBarID(0)
			Select *nmh\code
				Case #TBN_HOTITEMCHANGE
				ProcedureReturn 1
			EndSelect
		EndSelect
	EndSelect
	
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

SetWindowCallback(@WindowCallback())

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend

Verfasst: 09.10.2008 23:21
von X0r
Vielen Dank!
Jetzt bin ich der Lösung meines Problems etwas näher gekommen.
Wie ich bekomm ich nun den Highlight-Effekt weg, der beim geklickt-halten auf ein Toolbar-Item entsteht?

Verfasst: 10.10.2008 01:58
von Fluid Byte
Hier ist eine Lösung die aber nicht ganz perfekt ist. Man sieht nicht das der Button gedrückt wurde. Also das X/Y-Offset plus 1 Pixel nach unten/rechts.

Code: Alles auswählen

#TBN_HOTITEMCHANGE = #TBN_FIRST - 13
#TBSTATE_MARKED = $80

OpenWindow(0,0,0,320,240,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

CreateToolBar(0,WindowID(0))

SetWindowLong_(ToolBarID(0),#GWL_STYLE,#WS_CHILD | #WS_VISIBLE | #CCS_TOP | #TBSTYLE_CUSTOMERASE)

For i=0 To 10 : ToolBarStandardButton(100 + i,i) : Next

Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
	Select uMsg
		Case #WM_NOTIFY
		*nmh.NMHDR = lParam
		
		If *nmh\hwndFrom = ToolBarID(0)   
			Select *nmh\code
				Case #NM_CUSTOMDRAW         	
				*nmtbc.NMTBCUSTOMDRAW = lParam
				
				If *nmtbc\nmcd\dwDrawStage = #CDDS_ITEMPREPAINT
					SendMessage_(ToolBarID(0),#TB_SETSTATE,*nmtbc\nmcd\dwItemSpec,#TBSTATE_ENABLED)
					ProcedureReturn #CDRF_DODEFAULT
				EndIf
				
				ProcedureReturn #CDRF_NOTIFYITEMDRAW
				
				Case #TBN_HOTITEMCHANGE
				ProcedureReturn #True
			EndSelect
		EndIf
	EndSelect
   
   ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

SetWindowCallback(@WindowCallback())

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend

Verfasst: 10.10.2008 02:02
von Kaeru Gaman
jetzt wunder ich mich aber doch...
wenn du ein toolbar willst, bei dem man nicht sieht, wenn die maus drüber ist und wenn was gedrückt wird...
warum nimmst du dann nicht gleich ein image und wertest den click drauf aus?

Verfasst: 10.10.2008 02:17
von Fluid Byte
Kaeru Gaman hat geschrieben:jetzt wunder ich mich aber doch...
wenn du ein toolbar willst, bei dem man nicht sieht, wenn die maus drüber ist und wenn was gedrückt wird...
warum nimmst du dann nicht gleich ein image und wertest den click drauf aus?
Hab' ich von Anfang an gedacht aber es kommt drauf an welche Funktionalitäten der Toolbar er nutzt. Es gibt viele Features die eine Standardlösung nicht bietet wie Buttonlabels, Gruppierung, Dropdownmenu oder Button-Wrapping. Ansonsten geb' ich dir recht das man andernfalls lieber Images benutzen sollte.