Posted: Wed Dec 15, 2004 8:34 am
This code example should work (I removed all PureCOLOR lib dependencies).
Code: Select all
;
; Code example : how to colorize standard buttons
;
; --------------------------------------------------------
; Get Text Height (only a TextLength() function in PB)
;
Procedure GetTextHeight(hdc.l)
Protected tm.textmetric, PrevMapMode.l
PrevMapMode = SetMapMode_(hdc, #MM_Text)
GetTextMetrics_(hdc, @tm)
If PrevMapMode
SetMapMode_(hdc, PrevMapMode)
EndIf
ProcedureReturn tm\tmHeight
EndProcedure
; --------------------------------------------------------
; Create color button (fake with image)
;
Procedure CreateColoredButton(GadgetNumber.l, ImageNumber.l, ButtonTextColor.l, ButtonBackColor.l)
Protected ButtonW.l, ButtonH.l, hFont.l, ButtonText.s, Button_hdc.l, GadgetHandle.l
ButtonW = GadgetWidth(GadgetNumber)
ButtonH = GadgetHeight(GadgetNumber)
GadgetHandle = GadgetID(GadgetNumber)
If CreateImage(ImageNumber, ButtonW, ButtonH)
; Create image
Button_hdc = StartDrawing(ImageOutput())
; Button color
Box(0, 0, ButtonW, ButtonH, ButtonBackColor)
; Button font
hFont = SendMessage_(GadgetHandle, #WM_GETFONT, 0, 0)
DrawingFont(hFont)
; Button text
ButtonText = GetGadgetText(GadgetNumber)
FrontColor(Red(ButtonTextColor), Green(ButtonTextColor), Blue(ButtonTextColor))
DrawingMode(1)
Locate((ButtonW - TextLength(ButtonText)) / 2, (ButtonH - GetTextHeight(Button_hdc)) / 2)
DrawText(ButtonText)
StopDrawing()
; Add bitmap style
SetWindowLong_(GadgetHandle, #GWL_Style, GetWindowLong_(GadgetHandle, #GWL_Style) | #BS_BITMAP)
; Use image
SendMessage_(GadgetHandle, #BM_SETIMAGE, #IMAGE_BITMAP, UseImage(ImageNumber))
EndIf
EndProcedure
; --------------------------------------------------------
; Clear button color
;
Procedure ClearColoredButton(GadgetNumber.l, ImageNumber.l)
Protected GadgetHandle.l
GadgetHandle = GadgetID(GadgetNumber)
; Substract bitmap style
SetWindowLong_(GadgetHandle, #GWL_Style, GetWindowLong_(GadgetHandle, #GWL_Style) & ~#BS_BITMAP)
; Free image
FreeImage(ImageNumber)
EndProcedure