Seite 2 von 2

Verfasst: 10.10.2008 09:56
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.

Verfasst: 10.10.2008 15:06
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.

Verfasst: 10.10.2008 16:30
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

Verfasst: 10.10.2008 16:41
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?

Verfasst: 15.10.2008 04:14
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.

Verfasst: 15.10.2008 10:02
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

Verfasst: 15.10.2008 11:26
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.

Verfasst: 15.10.2008 22:40
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.

Verfasst: 17.10.2008 12:26
von X0r
Ok, Kiffi,
hab dir jetzt mal ne Demo geschrieben:
http://members.forgesoft.net/Soner/OXPTB.exe