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

Verfasst: 10.10.2008 16:41
von X0r

, perfektes Timing! Grad eben hab ich meine Office-Toolbar-Lib durch nen dummen Umweg fertiggestellt:
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.

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