Hallo zusammen,
ich versuche seit ner halben ewigkeit herauszufinden wie man ein PanelGadget einfärbt. JEtzt nicht die einzelnen Reiter (da hab ich im Forum von Edel schon ein super codebeispiel gefunden mit eigenen callbacks etc) sondern:
- Die Reiterleiste (hintern den Reitern)
- Der eigentliche Tab-Berreich (unterhalb des Reiters)
gerne auch Ansätze wie man die mit Tricks - Bild draufkleben oder sowas - die Farben am geschicktesten ändert.
Danke schonmal im Vorraus für eure Ideen.
LG der STef
PanelGadget Hintergrundfarbe
-
- Beiträge: 250
- Registriert: 25.11.2004 19:51
- Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS
PanelGadget Hintergrundfarbe
PB 4.6 / 32 Bit / 64 Bit
Re: PanelGadget Hintergrundfarbe
Wenn Du die Panel-Items eh schon selbst zeichnest, müsstest
Du den Panel-Hintergrund im Callback des PanelGadgets bei der
Nachricht #WM_ERASEBKGND ändern können.
Wenn Du die Reiterleiste und den eigentlichen Tab-Bereich mit
unterschiedlichen Hintergrundfarben darstellen möchtest, kannst
Du das bei #WM_ERASEBKGND in PanelProc() anpassen, oder
auch ein Bild zeichnen etc.
EDIT:
Nur mit SetClassLong_(), ohne subclassing für das PanelGadget:
Du den Panel-Hintergrund im Callback des PanelGadgets bei der
Nachricht #WM_ERASEBKGND ändern können.
Code: Alles auswählen
;
; Danilo, April 2011, PB 4.51 (x86)
;
Global panel
Global oldWndProc, oldPanelWndProc
Global panelBackColorBrush = CreateSolidBrush_(RGB($00,$00,$FF))
Global tabBackColorBrush = CreateSolidBrush_(RGB($FF,$80,$00))
Global tabTextColor = RGB($FF,$FF,$00)
Procedure WindowProc(hWnd,msg,wParam,lParam)
Select msg
Case #WM_DRAWITEM
*dis.DRAWITEMSTRUCT = lParam
If *dis
; Tab item background
FillRect_(*dis\hDC,*dis\rcItem,tabBackColorBrush)
; Tab item text background mode = transparent
SetBkMode_(*dis\hdc,#TRANSPARENT)
; Tab item text color
SetTextColor_(*dis\hDC,tabTextColor)
; get and draw the Tab item text
txt$ = GetGadgetItemText(panel,*dis\itemID)
DrawText_(*dis\hDC,txt$,-1,*dis\rcItem,#DT_CENTER|#DT_VCENTER|#DT_SINGLELINE)
EndIf
ProcedureReturn 1
EndSelect
ProcedureReturn CallWindowProc_(oldWndProc,hWnd,msg,wParam,lParam)
EndProcedure
Procedure PanelProc(hWnd,msg,wParam,lParam)
Select msg
Case #WM_ERASEBKGND
GetClientRect_(hWnd,@bckRect.RECT)
FillRect_(wParam,@bckRect,panelBackColorBrush)
ProcedureReturn 1
EndSelect
ProcedureReturn CallWindowProc_(oldPanelWndProc,hWnd,msg,wParam,lParam)
EndProcedure
mainWindow = OpenWindow(#PB_Any,0,0,800,600,"PanelGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
oldWndProc = SetWindowLong_(WindowID(mainWindow),#GWL_WNDPROC,@WindowProc())
panel = PanelGadget(#PB_Any,10,10,780,580)
oldPanelWndProc = SetWindowLong_(GadgetID(panel),#GWL_WNDPROC,@PanelProc())
SetWindowLong_(GadgetID(panel),#GWL_STYLE,#TCS_OWNERDRAWFIXED|GetWindowLong_(GadgetID(panel),#GWL_STYLE))
AddGadgetItem (panel, -1, "Panel 1")
ButtonGadget(#PB_Any, 10, 10, 80, 25,"Button 1")
AddGadgetItem (panel, -1, "Panel 2 has a button")
ButtonGadget(#PB_Any, 10, 10, 80, 25,"Button 2")
AddGadgetItem (panel, -1, "P3")
CloseGadgetList()
SetWindowColor(mainWindow,RGB($FF,$FF,$00))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
DeleteObject_(panelBackColorBrush)
DeleteObject_(tabBackColorBrush)
unterschiedlichen Hintergrundfarben darstellen möchtest, kannst
Du das bei #WM_ERASEBKGND in PanelProc() anpassen, oder
auch ein Bild zeichnen etc.
EDIT:
Nur mit SetClassLong_(), ohne subclassing für das PanelGadget:
Code: Alles auswählen
;
; Danilo, April 2011, PB 4.51 (x86)
;
Global panel
Global oldWndProc
Global panelBackColorBrush = CreateSolidBrush_(RGB($00,$00,$FF))
Global tabBackColorBrush = CreateSolidBrush_(RGB($FF,$80,$00))
Global tabTextColor = RGB($FF,$FF,$00)
Procedure WindowProc(hWnd,msg,wParam,lParam)
Select msg
Case #WM_DRAWITEM
*dis.DRAWITEMSTRUCT = lParam
If *dis
; Tab item background
FillRect_(*dis\hDC,*dis\rcItem,tabBackColorBrush)
; Tab item text background mode = transparent
SetBkMode_(*dis\hdc,#TRANSPARENT)
; Tab item text color
SetTextColor_(*dis\hDC,tabTextColor)
; get and draw the Tab item text
txt$ = GetGadgetItemText(panel,*dis\itemID)
DrawText_(*dis\hDC,txt$,-1,*dis\rcItem,#DT_CENTER|#DT_VCENTER|#DT_SINGLELINE)
EndIf
ProcedureReturn 1
EndSelect
ProcedureReturn CallWindowProc_(oldWndProc,hWnd,msg,wParam,lParam)
EndProcedure
mainWindow = OpenWindow(#PB_Any,0,0,800,600,"PanelGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
oldWndProc = SetWindowLong_(WindowID(mainWindow),#GWL_WNDPROC,@WindowProc())
panel = PanelGadget(#PB_Any,10,10,780,580)
SetClassLong_(GadgetID(panel),#GCL_HBRBACKGROUND,panelBackColorBrush)
SetWindowLong_(GadgetID(panel),#GWL_STYLE,#TCS_OWNERDRAWFIXED|GetWindowLong_(GadgetID(panel),#GWL_STYLE))
AddGadgetItem (panel, -1, "Panel 1")
ButtonGadget(#PB_Any, 10, 10, 80, 25,"Button 1")
AddGadgetItem (panel, -1, "Panel 2 has a button")
ButtonGadget(#PB_Any, 10, 10, 80, 25,"Button 2")
AddGadgetItem (panel, -1, "P3")
CloseGadgetList()
SetWindowColor(mainWindow,RGB($FF,$FF,$00))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
DeleteObject_(panelBackColorBrush)
DeleteObject_(tabBackColorBrush)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck