Advanced Gadgets
Posted: Tue Aug 25, 2009 6:10 pm
Hello,
I have writen a few functions to pigment Buttons and Progress bars.

I have writen a few functions to pigment Buttons and Progress bars.


Code: Select all
;****************************
;*** Advanced Gadgets ***
;*** Licence: Zlib ***
;****************************
;*** (c) 2009 RocketRider ***
;*** RocketRider.eu ***
;****************************
;*** PureBasic 4.40 ***
;*** 25.08.2009 ***
;****************************
;Copyright (c) 2009 RocketRider
;This software is provided 'as-is', without any express Or implied warranty. In no event will the authors be held liable For any damages arising from the use of this software.
;Permission is granted To anyone To use this software For any purpose, including commercial applications, And To alter it And redistribute it freely, subject To the following restrictions:
;The origin of this software must Not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
;Altered source versions must be plainly marked As such, And must Not be misrepresented As being the original software.
;This notice may Not be removed Or altered from any source distribution.
Procedure SetImageGammacorrection(hWnd,RedGamma,GreenGamma,BlueGamma,Colorfullness, Brightness, Contrast)
If RedGamma < 2500:RedGamma = 2500:EndIf
If RedGamma > 65000:RedGamma = 65000:EndIf
If GreenGamma < 2500:GreenGamma = 2500:EndIf
If GreenGamma > 65000:GreenGamma = 65000:EndIf
If BlueGamma < 2500:BlueGamma = 2500:EndIf
If BlueGamma > 65000:BlueGamma = 65000:EndIf
If Colorfullness < -100:Colorfullness = -100:EndIf
If Colorfullness > 100:Colorfullness = 100:EndIf
If Brightness < -100:Brightness = -100:EndIf
If Brightness > 100:Brightness = 100:EndIf
If Contrast < -100:Contrast = -100:EndIf
If Contrast > 100:Contrast = 100:EndIf
GetWindowRect_(hWnd,re.rect)
DC=GetWindowDC_(hWnd)
SetStretchBltMode_(DC,#HALFTONE)
GetColorAdjustment_(DC,C.COLORADJUSTMENT)
C\caRedGamma=RedGamma
C\caGreenGamma=GreenGamma
C\caBlueGamma=BlueGamma
C\caColorfulness = Colorfullness
C\caBrightness = Brightness
C\caContrast = Contrast
SetColorAdjustment_(DC,C.COLORADJUSTMENT)
StretchBlt_(DC,0,0,re\right - re\left ,re\bottom -re\top ,DC,0,0,re\right - re\left ,re\bottom -re\top ,#SRCCOPY)
ReleaseDC_(hWnd,DC)
EndProcedure
Procedure AdvGadgetCB(hWnd,Msg,w,l)
CB.l = GetProp_(hWnd, "ADVGADGET_CALLBACK")
If CB
Result = CallFunctionFast(CB,hWnd,Msg,w,l)
Else
Result = DefWindowProc_(hWnd,Msg,w,l)
EndIf
If GetProp_(hWnd, "ADVGADGET_BUTTON")
If Msg = #WM_PAINT Or Msg = #WM_LBUTTONDOWN Or Msg = #WM_LBUTTONUP Or Msg = #WM_LBUTTONDBLCLK
SetImageGammacorrection(hWnd,GetProp_(hWnd, "ADVGADGET_GAMMARED"),GetProp_(hWnd, "ADVGADGET_GAMMAGREEN"),GetProp_(hWnd, "ADVGADGET_GAMMABLUE"),GetProp_(hWnd, "ADVGADGET_COLOR"),GetProp_(hWnd, "ADVGADGET_BRIGHTNESS"), GetProp_(hWnd, "ADVGADGET_CONTRAST"))
EndIf
EndIf
If GetProp_(hWnd, "ADVGADGET_PROGRESSBAR")
If Msg=#WM_PAINT
SetImageGammacorrection(hWnd,GetProp_(hWnd, "ADVGADGET_GAMMARED"),GetProp_(hWnd, "ADVGADGET_GAMMAGREEN"),GetProp_(hWnd, "ADVGADGET_GAMMABLUE"),GetProp_(hWnd, "ADVGADGET_COLOR"),GetProp_(hWnd, "ADVGADGET_BRIGHTNESS"), GetProp_(hWnd, "ADVGADGET_CONTRAST"))
EndIf
EndIf
ProcedureReturn Result
EndProcedure
#PB_AdvProgressBar_Smooth = #PB_ProgressBar_Smooth
#PB_AdvProgressBar_Vertical = #PB_ProgressBar_Vertical
#PB_AdvProgressBar_Marquee = $40A
; RedGamma, GreenGamma and BlueGamma must be between 2500 and 65000 (Default is 10000)
; Colorfullness, Brightness and Contrast must be between -100 and 100 (Default is 0)
Procedure AdvProgressBarGadget(Gadget,x,y,width,height,minimum,maximum, flags, RedGamma = 10000,GreenGamma = 10000,BlueGamma = 10000,Colorfullness = 0, Brightness = 0, Contrast = 0)
If Gadget <> #PB_Any
Result = ProgressBarGadget(Gadget,x,y,width,height,minimum,maximum, flags)
ID = Gadget
Else
Result = ProgressBarGadget(Gadget,x,y,width,height,minimum,maximum, flags)
Gadget = Result
EndIf
If Result
hWnd = GadgetID(ID)
If flags & #PB_AdvProgressBar_Marquee
SendMessage_(hWnd,#PB_AdvProgressBar_Marquee, #True, 50)
EndIf
SetProp_(hWnd, "ADVGADGET_PROGRESSBAR", #True)
SetProp_(hWnd, "ADVGADGET_CALLBACK",SetWindowLong_(hWnd,#GWL_WNDPROC,@AdvGadgetCB()))
SetProp_(hWnd, "ADVGADGET_GAMMARED", RedGamma)
SetProp_(hWnd, "ADVGADGET_GAMMAGREEN", GreenGamma)
SetProp_(hWnd, "ADVGADGET_GAMMABLUE", BlueGamma)
SetProp_(hWnd, "ADVGADGET_COLOR", Colorfullness)
SetProp_(hWnd, "ADVGADGET_BRIGHTNESS", Brightness)
SetProp_(hWnd, "ADVGADGET_CONTRAST",Contrast)
EndIf
ProcedureReturn Result
EndProcedure
#PB_AdvButton_Right = #PB_Button_Right
#PB_AdvButton_Left = #PB_Button_Left
#PB_AdvButton_Default = #PB_Button_Default
#PB_AdvButton_MultiLine = #PB_Button_MultiLine
#PB_AdvButton_Toggle = #PB_Button_Toggle
; RedGamma, GreenGamma and BlueGamma must be between 2500 and 65000 (Default is 10000)
; Colorfullness, Brightness and Contrast must be between -100 and 100 (Default is 0)
Procedure AdvButtonGadget(Gadget,x,y,width,height, text.s, flags, RedGamma = 10000,GreenGamma = 10000,BlueGamma = 10000,Colorfullness = 0, Brightness = 0, Contrast = 0)
If Gadget <> #PB_Any
Result = ButtonGadget(Gadget,x,y,width,height,text.s, flags)
ID = Gadget
Else
Result = ButtonGadget(Gadget,x,y,width,height,text.s, flags)
Gadget = Result
EndIf
If Result
hWnd = GadgetID(ID)
SetProp_(hWnd, "ADVGADGET_BUTTON", #True)
SetProp_(hWnd, "ADVGADGET_CALLBACK",SetWindowLong_(hWnd,#GWL_WNDPROC,@AdvGadgetCB()))
SetProp_(hWnd, "ADVGADGET_GAMMARED", RedGamma)
SetProp_(hWnd, "ADVGADGET_GAMMAGREEN", GreenGamma)
SetProp_(hWnd, "ADVGADGET_GAMMABLUE", BlueGamma)
SetProp_(hWnd, "ADVGADGET_COLOR", Colorfullness)
SetProp_(hWnd, "ADVGADGET_BRIGHTNESS", Brightness)
SetProp_(hWnd, "ADVGADGET_CONTRAST",Contrast)
EndIf
ProcedureReturn Result
EndProcedure
;Example:
;Exable XP Skin support!
If OpenWindow(0, 0, 0, 500, 200, "AdvGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
;Button with more contrast
AdvButtonGadget(0, 10, 10, 100, 22, "Silver Button",#PB_Button_Default,10000,10000,10000,0,-100,25)
;blue button
AdvButtonGadget(1, 10, 40, 100, 22, "blue Button",#PB_Button_Default,20000,20000,2500,0,0,0)
;red button
AdvButtonGadget(2, 10, 70, 100, 22, "red Button",#PB_Button_Default,2500,65000,65000,0,0,0)
;another silver button
AdvButtonGadget(4, 10, 100, 100, 22, "Silver Button",#PB_Button_Default,65000,65000,65000,0,-50,50)
;green button
AdvButtonGadget(3, 10, 130, 100, 22, "green Button",#PB_Button_Default,65000,2500,65000,-20,-30,0)
AdvProgressBarGadget(5,150,10,200,25,0,100, #PB_AdvProgressBar_Marquee, 2500, 65000,65000,0,0,0)
AdvProgressBarGadget(6,150,40,200,25,0,100, 0, 65000, 65000,65000,-100,50,0)
SetGadgetState(6, 55)
AdvProgressBarGadget(7,150,70,200,25,0,100, 0, 65000, 65000,6500,0,50,50)
SetGadgetState(7, 75)
AdvProgressBarGadget(8,150,100,200,25,0,100, 0, 65000, 65000,65000,-30,-20,70)
SetGadgetState(8, 55)
AdvProgressBarGadget(9,150,130,200,25,0,100, 0, 10000, 10000,2500,-100,-90,20)
SetGadgetState(9, 85)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf