Toolbar "Highlight-Effekt" deaktivieren

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Vielen Dank Fluid Byte!

Klartext:
Ich will ne Toolbar im Office-style erstellen. Dafür muss halt dieser Highlight-Effekt weg, denn so ne "Office-Toolbar" hat ja ihren eigenen.
Man könnte ja auch ne ownerdraw Toolbar oder so erstellen, aber ich hab leider 0 Ahnung in diesem Bereich.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Hm, aber dann kann ich per SendMessage_(tbn,#TB_GETHOTITEM, 0, 0) ja garnicht abfragen, welches Toolbar-Item nun gerade ausgewählt ist.
Mist, dann muss ich das ganze wohl doch anders machen.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Hah! Jetzt hab ich "ihn" bei den Eiern! Bild

Guckst du hier:

Code: Alles auswählen

#TBCDRF_NOBACKGROUND = $00400000

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
					ProcedureReturn #TBCDRF_NOBACKGROUND
				EndIf
				
				ProcedureReturn #CDRF_NOTIFYITEMDRAW
			EndSelect
		EndIf
	EndSelect
   
   ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

SetWindowCallback(@WindowCallback())

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
Bin mit der #NM_CUSTOMDRAW Nachricht und deren Drawing Stages bzw. Rückgabewerten noch nicht ganz so firm man möge mir also die ersten Anläufe verzeihen. Bild
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

:lol: , perfektes Timing! Grad eben hab ich meine Office-Toolbar-Lib durch nen dummen Umweg fertiggestellt:

Bild

Aber trotzdem vielen Dank! Dann schreibe ich das ganze nochmal um, denn bei meinem Umweg besteht das Problem, dass auf dem Rebar-Control transparente Bilder(Über ImageGadget realisiert..) nicht richtig dargestellt werden. Da erkennt man dann leider immernoch die Stelle, die eigentlich transparent sein sollte(Hat dann halt die Hintergrundfarbe vom Fenster). Weiß einer wie man das lösen könnte?
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Ich dafür jetzt nicht extra einen thread erstellen, darum frage ich hier:
Hätte jemand Interesse an einer solchen Lib? Ist eigentlich so gut wie fertig. Fehlen nur noch paar Feinheiten.
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

X0r hat geschrieben:Hätte jemand Interesse an einer solchen Lib?
eine Lib ist immer problematisch (in Bezug auf Inkompatibilitäten mit
zukünftigen PB-Version). Ein Include wäre besser. :-)

Aber ehrlich gesagt kann ich mir noch nicht genau vorstellen, was Dein
Code macht, bzw, wie die Toolbar dann in Action aussieht. Kannst Du eine
kleine Demo-Exe bereitstellen, mit der man das Teil dann ausprobieren
kann?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Also basieren tut das ganze auf ImageGadgets. :mrgreen:
Mit nem Toolbar-Control gibts da so ein Problem, da ich, wenn das icon dann geladen wurde, noch eins im office-style erstelle(Also per CreateImage) und dieses dann für die Toolbar leider nicht benutzen kann.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

So, hab mich ebend kurz(da ich völlig übermüdet bin) mit ownerdrawing beschäftigt( http://doc.trecom.tomsk.su/HTML/InetSDK ... et0175.htm )
Raußgekommen ist das hier:

Code: Alles auswählen

Global bbrush=CreateSolidBrush_(#Blue)

#TBCDRF_NOBACKGROUND = $00400000
Procedure WindowCallback(hwnd,uMsg,wParam,lParam)
  Select uMsg
    Case #WM_NOTIFY
      *nmh.NMHDR = lParam
      
      If *nmh\hwndFrom = toolbar_id
        Select *nmh\code
          Case #NM_CUSTOMDRAW
            *nmtbc.NMTBCUSTOMDRAW = lParam
            If *nmtbc\nmcd\dwDrawStage = #CDDS_ITEMPREPAINT
              
              If *nmtbc\nmcd\dwItemSpec=1 And *nmtbc\nmcd\uItemState=#CDIS_HOT
                SetBkMode_(*nmtbc\nmcd\hdc,#TRANSPARENT)
                FillRect_(*nmtbc\nmcd\hdc, *nmtbc\nmcd\rc, bbrush)
              EndIf
              
              ProcedureReturn #TBCDRF_NOBACKGROUND
            EndIf
            ProcedureReturn #CDRF_NOTIFYITEMDRAW
        EndSelect
      EndIf
  EndSelect
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Der Huntergrund des 2. Toolbaritems wird blau unterlegt, somit ist das erstellen einer Office-Toolbar kinderleicht.

Hoffe jemand kanns gebrauchen.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Ok, Kiffi,
hab dir jetzt mal ne Demo geschrieben:
http://members.forgesoft.net/Soner/OXPTB.exe
Antworten