mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			766 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			766 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// The MIT License (MIT)
 | 
						|
 | 
						|
// Copyright (c) 2016 dario ureña
 | 
						|
 | 
						|
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
						|
// of this software and associated documentation files (the "Software"), to deal
 | 
						|
// in the Software without restriction, including without limitation the rights
 | 
						|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
						|
// copies of the Software, and to permit persons to whom the Software is
 | 
						|
// furnished to do so, subject to the following conditions:
 | 
						|
 | 
						|
// The above copyright notice and this permission notice shall be included in all
 | 
						|
// copies or substantial portions of the Software.
 | 
						|
 | 
						|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
						|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
						|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
						|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
						|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
						|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
						|
// SOFTWARE.
 | 
						|
 | 
						|
// Source: https://github.com/darioaxel/PowerScriptToKDMTransformer/blob/07bf527194b73e133943221dc2199a9442d463eb/resources/inventoryModel/nivel0/nivel1/n_cst_buttonlistbar_gradient.sru
 | 
						|
 | 
						|
HA$PBExportHeader$n_cst_buttonlistbar_gradient.sru
 | 
						|
forward
 | 
						|
global type n_cst_buttonlistbar_gradient from nonvisualobject
 | 
						|
end type
 | 
						|
type gradient_rect from structure within n_cst_buttonlistbar_gradient
 | 
						|
end type
 | 
						|
type gradient_triangle from structure within n_cst_buttonlistbar_gradient
 | 
						|
end type
 | 
						|
type rect from structure within n_cst_buttonlistbar_gradient
 | 
						|
end type
 | 
						|
type trivertex from structure within n_cst_buttonlistbar_gradient
 | 
						|
end type
 | 
						|
type logfont from structure within n_cst_buttonlistbar_gradient
 | 
						|
end type
 | 
						|
end forward
 | 
						|
 | 
						|
type gradient_rect from structure
 | 
						|
	unsignedlong		upperleft
 | 
						|
	unsignedlong		lowerright
 | 
						|
end type
 | 
						|
 | 
						|
type gradient_triangle from structure
 | 
						|
	unsignedlong		vertex1
 | 
						|
	unsignedlong		vertex2
 | 
						|
	unsignedlong		vertex3
 | 
						|
end type
 | 
						|
 | 
						|
type rect from structure
 | 
						|
	long		left
 | 
						|
	long		top
 | 
						|
	long		right
 | 
						|
	long		bottom
 | 
						|
end type
 | 
						|
 | 
						|
type trivertex from structure
 | 
						|
	long		x
 | 
						|
	long		y
 | 
						|
	integer		red
 | 
						|
	integer		green
 | 
						|
	integer		blue
 | 
						|
	integer		alpha
 | 
						|
end type
 | 
						|
 | 
						|
type logfont from structure
 | 
						|
	long		lfheight
 | 
						|
	long		lfwidth
 | 
						|
	long		lfescapement
 | 
						|
	long		lforientation
 | 
						|
	long		lfweight
 | 
						|
	character		lfitalic
 | 
						|
	character		lfunderline
 | 
						|
	character		lfstrikeout
 | 
						|
	character		lfcharset
 | 
						|
	character		lfoutprecision
 | 
						|
	character		lfclipprecision
 | 
						|
	character		lfquality
 | 
						|
	character		lfpitchandfamily
 | 
						|
	character		lffacename[32]
 | 
						|
end type
 | 
						|
 | 
						|
global type n_cst_buttonlistbar_gradient from nonvisualobject autoinstantiate
 | 
						|
end type
 | 
						|
 | 
						|
type prototypes
 | 
						|
FUNCTION ulong SetBkMode(ulong lhdc,ulong nBkMode) LIBRARY "gdi32.dll"
 | 
						|
Function Long GetDC (Long hwnd) Library 'user32'
 | 
						|
Function Long GetClientRect (Long hwnd, REF RECT lpRect) Library 'user32' alias for "GetClientRect;Ansi"
 | 
						|
Function Long ReleaseDC (Long hwnd, Long hdc1) Library 'user32'
 | 
						|
Function Boolean GradientRectangle (Long hdc2, TRIVERTEX pVert[], ULong numVert, GRADIENT_RECT pMesh [], ULong numMesh, ULong dMode) Library 'msimg32' Alias For 'GradientFill;Ansi'
 | 
						|
Function Boolean GradientTriangle (Long hdc3, TRIVERTEX pVert[], ULong numVert, GRADIENT_TRIANGLE pMesh [], ULong numMesh, ULong dMode) Library 'msimg32' Alias For 'GradientFill;Ansi'
 | 
						|
 | 
						|
Function ulong Rectangle (ulong hwnd, ulong X1, ulong Y1, ulong X2, ulong Y2) library "gdi32" 
 | 
						|
Function ulong CreatePen  (ulong nPenStyle, ulong nWidth, ulong crColor) LIBRARY "Gdi32.dll"
 | 
						|
Function ULONG	SelectObject (uLong hdc4, uLong hObject ) LIBRARY "Gdi32.dll"
 | 
						|
function boolean DeleteObject(ulong hgdiobject) library "gdi32.dll" 
 | 
						|
 | 
						|
FUNCTION ulong DrawText(ulong lhdc,ref string lpStr,ulong nCount,ref RECT lpRect,ulong wFormat) LIBRARY "user32.dll" ALIAS FOR "DrawTextA;Ansi"
 | 
						|
FUNCTION ulong SetTextColor(ulong lhdc,ulong crColor) LIBRARY "gdi32.dll"
 | 
						|
FUNCTION ulong CreateFontIndirect(ref LOGFONT lpLogFont) LIBRARY "gdi32.dll" ALIAS FOR "CreateFontIndirectA;ANSI"
 | 
						|
 | 
						|
Function ulong RoundRect (uLong hdc5 , uLong X1, ulong Y1 , ulong X2 , ulong Y2 , ulong X3 , ulong Y3 ) LIBRARY "Gdi32.dll"
 | 
						|
Function ULONG FillRgn (Long hdc6, Long hRgn , Long hBrush ) LIBRARY "Gdi32.dll"
 | 
						|
Function ulong CreateRectRgn (Long X1, Long Y1 , Long X2 , Long Y2 ) LIBRARY "Gdi32.dll"
 | 
						|
Function ulong CreateRoundRectRgn (long X1 , long Y1 , long X2 , long Y2 , long X3 , long Y3 ) LIBRARY "Gdi32.dll"
 | 
						|
 | 
						|
Function ULONG PolyBezier (Long hdc7, REF RECT lpRect, long cPoints ) LIBRARY "Gdi32.dll"
 | 
						|
Function ULONG Polyline( Long hdc8, GRADIENT_RECT lppt[], int cPoints) LIBRARY "Gdi32.dll"
 | 
						|
 | 
						|
FUNCTION boolean Ellipse(ulong hwnd,long x1,long y1,long x2,long y2) LIBRARY "Gdi32.dll"
 | 
						|
 | 
						|
FUNCTION ulong CreatePolygonRgn(ref POINT ppoint[], int count, int fillMode) Library "GDI32.DLL"
 | 
						|
FUNCTION long SelectClipRgn(ulong lhdc, ulong lhrgn) Library "GDI32.DLL"
 | 
						|
 | 
						|
FUNCTION long PtInRegion(ulong hrgn, int x, int y) LIBRARY "GDI32.dll"
 | 
						|
 | 
						|
Function boolean ImageList_Draw(long himl, long i, long hdcDst, long lx, long ly, ulong fStyle) Library "comctl32.dll"
 | 
						|
Function boolean ImageList_DrawEx(long himl, long i, long hdcDst, long lx, long ly, long lwidth, long lheight, long lback, long lfore , ulong fStyle) Library "comctl32.dll"
 | 
						|
 | 
						|
end prototypes
 | 
						|
 | 
						|
type variables
 | 
						|
// MS Windows enumerations
 | 
						|
CONSTANT ULong GRADIENT_FILL_RECT_H = 0
 | 
						|
CONSTANT ULong GRADIENT_FILL_RECT_V = 1
 | 
						|
CONSTANT ULong GRADIENT_FILL_TRIANGLE = 2
 | 
						|
CONSTANT ULong GRADIENT_FILL_OP_FLAG = 255
 | 
						|
 | 
						|
CONSTANT Long ILD_TRANSPARENT = 1
 | 
						|
CONSTANT Long LVM_GETIMAGELIST = 4098
 | 
						|
CONSTANT Long LVSIL_NORMAL = 0
 | 
						|
CONSTANT Long ILD_BLEND50 = 4
 | 
						|
CONSTANT Long ILD_BLEND25 = 2
 | 
						|
 | 
						|
// User object enumerations
 | 
						|
CONSTANT String TOPLEFT = "TOPLEFT"
 | 
						|
CONSTANT String TOPRIGHT = "TOPRIGHT"
 | 
						|
CONSTANT String BOTTOMRIGHT = "BOTTOMRIGHT"
 | 
						|
CONSTANT String BOTTOMLEFT = "BOTTOMLEFT"
 | 
						|
 | 
						|
BOOLEAN	ib_displayborder
 | 
						|
 | 
						|
CONSTANT LONG ALIGN_LEFT = 0
 | 
						|
CONSTANT LONG ALIGN_CENTER = 1
 | 
						|
CONSTANT LONG ALIGN_RIGHT = 2
 | 
						|
 | 
						|
CONSTANT LONG DT_WORD_ELLIPSIS = 262144
 | 
						|
CONSTANT LONG DT_CALCRECT = 1024
 | 
						|
CONSTANT LONG DT_WORDBREAK = 16
 | 
						|
 | 
						|
Long	il_HDC
 | 
						|
 | 
						|
Long il_newHeight
 | 
						|
Long il_newWidth
 | 
						|
 | 
						|
PRIVATE:
 | 
						|
// Object Handle
 | 
						|
Long	HDC
 | 
						|
 | 
						|
Long	il_ShadowBackColor
 | 
						|
 | 
						|
ULong iul_font
 | 
						|
ULong iul_fontbold
 | 
						|
 | 
						|
// Dimensions
 | 
						|
RECT DC_Rect
 | 
						|
 | 
						|
// Vertices
 | 
						|
TRIVERTEX Corner[4]
 | 
						|
TRIVERTEX BorderCorner[2]
 | 
						|
TRIVERTEX VistaCorner1[4]
 | 
						|
TRIVERTEX VistaCorner2[4]
 | 
						|
TRIVERTEX VistaCorner3[4]
 | 
						|
end variables
 | 
						|
 | 
						|
forward prototypes
 | 
						|
public subroutine of_verticalgradient (long al_color1, long al_color2)
 | 
						|
public subroutine of_splitrgb (long al_color, ref long red, ref long green, ref long blue)
 | 
						|
public function boolean of_setdevicecontext (graphicobject ado_palette)
 | 
						|
public subroutine of_verticalgradient (long al_color1, long al_color2, graphicobject ado_palette)
 | 
						|
public subroutine of_verticalgradient (long al_color1, long al_color2, graphicobject ado_palette, boolean ab_displayborder, long al_bordercolor, integer ai_style)
 | 
						|
public subroutine of_xpgradient (long al_color1, long al_color2, graphicobject ado_palette, boolean ab_displayborder, long al_bordercolor)
 | 
						|
public function boolean of_setdevicecontext (graphicobject ado_palette, integer ai_style, boolean ab_border)
 | 
						|
public function integer of_drawtext (graphicobject ado_palette, string as_text, long al_color, string as_font, long al_size, boolean ab_bold, long al_align, long al_x, long al_y, long al_width, long al_height, boolean ab_displayshadow)
 | 
						|
public function integer of_sethdc (long al_hdc)
 | 
						|
public function boolean of_getbit (long al_decimal, integer ai_bit)
 | 
						|
public function unsignedlong of_createfont (string as_name, long al_size, boolean ab_underline)
 | 
						|
public function long of_bitwiseand (long al_value1, long al_value2)
 | 
						|
public function long of_bitwiseor (long al_value1, long al_value2)
 | 
						|
public function integer of_drawtext (graphicobject ado_palette, string as_text, long al_color, string as_font, long al_size, boolean ab_bold, long al_align, long al_x, long al_y, long al_width, long al_height, boolean ab_displayshadow, boolean ab_elipse, boolean ab_underline, boolean ab_wordwrap)
 | 
						|
public function integer of_drawbuttons (dragobject ado_palette, buttons ast_buttons[], long al_bordercolor, long al_imagelist, boolean ab_boldselected, long il_imagesize, long al_height)
 | 
						|
public subroutine of_verticalgradient (long al_color1, long al_color2)
 | 
						|
public subroutine of_splitrgb (long al_color, ref long red, ref long green, ref long blue)
 | 
						|
public function boolean of_setdevicecontext (graphicobject ado_palette)
 | 
						|
public subroutine of_verticalgradient (long al_color1, long al_color2, graphicobject ado_palette)
 | 
						|
public subroutine of_verticalgradient (long al_color1, long al_color2, graphicobject ado_palette, boolean ab_displayborder, long al_bordercolor, integer ai_style)
 | 
						|
public subroutine of_xpgradient (long al_color1, long al_color2, graphicobject ado_palette, boolean ab_displayborder, long al_bordercolor)
 | 
						|
public function boolean of_setdevicecontext (graphicobject ado_palette, integer ai_style, boolean ab_border)
 | 
						|
public function integer of_drawtext (graphicobject ado_palette, string as_text, long al_color, string as_font, long al_size, boolean ab_bold, long al_align, long al_x, long al_y, long al_width, long al_height, boolean ab_displayshadow)
 | 
						|
public function integer of_sethdc (long al_hdc)
 | 
						|
public function boolean of_getbit (long al_decimal, integer ai_bit)
 | 
						|
public function unsignedlong of_createfont (string as_name, long al_size, boolean ab_underline)
 | 
						|
public function long of_bitwiseand (long al_value1, long al_value2)
 | 
						|
public function long of_bitwiseor (long al_value1, long al_value2)
 | 
						|
public function integer of_drawtext (graphicobject ado_palette, string as_text, long al_color, string as_font, long al_size, boolean ab_bold, long al_align, long al_x, long al_y, long al_width, long al_height, boolean ab_displayshadow, boolean ab_elipse, boolean ab_underline, boolean ab_wordwrap)
 | 
						|
public function integer of_drawbuttons (dragobject ado_palette, buttons ast_buttons[], long al_bordercolor, long al_imagelist, boolean ab_boldselected, long il_imagesize, long al_height)
 | 
						|
end prototypes
 | 
						|
 | 
						|
public subroutine of_verticalgradient (long al_color1, long al_color2);Long	ll_Red, &
 | 
						|
		ll_Green, &
 | 
						|
		ll_Blue, &
 | 
						|
		ll_DC
 | 
						|
GRADIENT_RECT l_Gradient[1]
 | 
						|
 | 
						|
LONG hRPen
 | 
						|
 | 
						|
// Set the colors in the first corner (top left)
 | 
						|
of_SplitRGB (al_Color1, ll_Red, ll_Green, ll_Blue)
 | 
						|
Corner[1].Red = ll_Red
 | 
						|
Corner[1].Green = ll_Green
 | 
						|
Corner[1].Blue = ll_Blue
 | 
						|
 | 
						|
// Set the colors in the third corner (bottom right)
 | 
						|
of_SplitRGB (al_Color2, ll_Red, ll_Green, ll_Blue)
 | 
						|
Corner[3].Red = ll_Red
 | 
						|
Corner[3].Green = ll_Green
 | 
						|
Corner[3].Blue = ll_Blue
 | 
						|
 | 
						|
l_Gradient[1].UpperLeft = 0 // First corner, top left
 | 
						|
l_Gradient[1].LowerRight = 2 // Third corner, bottom right
 | 
						|
 | 
						|
ll_DC = il_HDC//GetDC (HDC)
 | 
						|
 | 
						|
// Create a border if ib_displayborder is true
 | 
						|
IF 	ib_displayborder THEN
 | 
						|
	hRPen = CreatePen(0,0,1090519039)
 | 
						|
	SelectObject(ll_DC, hRPen)
 | 
						|
	Rectangle(ll_DC, Corner[1].X - 1, Corner[1].Y - 1, Corner[3].X +1, Corner[3].Y +1)
 | 
						|
END IF
 | 
						|
 | 
						|
GradientRectangle (ll_DC, Corner, 4, l_Gradient, 1, GRADIENT_FILL_RECT_V)
 | 
						|
 | 
						|
//ReleaseDC (HDC, ll_DC)
 | 
						|
end subroutine
 | 
						|
 | 
						|
public subroutine of_splitrgb (long al_color, ref long red, ref long green, ref long blue);Red = Mod (al_Color, 256)
 | 
						|
Red *= 256
 | 
						|
 | 
						|
al_Color /= 256
 | 
						|
Green	= Mod (al_Color, 256)
 | 
						|
Green *= 256
 | 
						|
 | 
						|
Blue = al_Color / 256
 | 
						|
Blue *= 256
 | 
						|
end subroutine
 | 
						|
 | 
						|
public function boolean of_setdevicecontext (graphicobject ado_palette);IF NOT IsValid (ado_Palette) THEN RETURN FALSE
 | 
						|
 | 
						|
// Get the object's handle
 | 
						|
HDC = Handle (ado_Palette)
 | 
						|
 | 
						|
// Get the object's dimensions
 | 
						|
GetClientRect (HDC, DC_RECT)
 | 
						|
 | 
						|
// let's resize the grandient rectangle if border is displayed
 | 
						|
IF ib_displayborder THEN
 | 
						|
	// Initialize the vertices
 | 
						|
	Corner[1].X = DC_RECT.Left +1 
 | 
						|
	Corner[1].Y = DC_RECT.Top +1 
 | 
						|
	Corner[2].X = DC_RECT.Right -1
 | 
						|
	Corner[2].Y = DC_RECT.Top +1
 | 
						|
	Corner[3].X = DC_RECT.Right -1
 | 
						|
	Corner[3].Y = DC_RECT.Bottom - 1
 | 
						|
	Corner[4].X = DC_RECT.Left +1
 | 
						|
	Corner[4].Y = DC_RECT.Bottom - 1
 | 
						|
	
 | 
						|
	VistaCorner1[1].X = DC_RECT.Left + 1 
 | 
						|
	VistaCorner1[1].Y = DC_RECT.Top + 1
 | 
						|
	VistaCorner1[2].X = DC_RECT.Right -1
 | 
						|
	VistaCorner1[2].Y = DC_RECT.Top + 1
 | 
						|
	VistaCorner1[3].X = DC_RECT.Right -1
 | 
						|
	VistaCorner1[3].Y = DC_RECT.Bottom - (DC_RECT.Bottom * .65)//20
 | 
						|
	VistaCorner1[4].X = DC_RECT.Left +1
 | 
						|
	VistaCorner1[4].Y = DC_RECT.Bottom - (DC_RECT.Bottom * .65)//20
 | 
						|
	
 | 
						|
	VistaCorner3[1].X = DC_RECT.Left + 1 
 | 
						|
	VistaCorner3[1].Y = DC_RECT.Top + ((DC_RECT.Bottom * .65) / 2)//10
 | 
						|
	VistaCorner3[2].X = DC_RECT.Right -1
 | 
						|
	VistaCorner3[2].Y = DC_RECT.Top + ((DC_RECT.Bottom * .65) / 2)//10
 | 
						|
	VistaCorner3[3].X = DC_RECT.Right -1
 | 
						|
	VistaCorner3[3].Y = DC_RECT.Bottom - 1
 | 
						|
	VistaCorner3[4].X = DC_RECT.Left +1
 | 
						|
	VistaCorner3[4].Y = DC_RECT.Bottom - 1
 | 
						|
 | 
						|
ELSE
 | 
						|
	Corner[1].X = DC_RECT.Left
 | 
						|
	Corner[1].Y = DC_RECT.Top 
 | 
						|
	Corner[2].X = DC_RECT.Right
 | 
						|
	Corner[2].Y = DC_RECT.Top
 | 
						|
	Corner[3].X = DC_RECT.Right
 | 
						|
	Corner[3].Y = DC_RECT.Bottom 
 | 
						|
	Corner[4].X = DC_RECT.Left
 | 
						|
	Corner[4].Y = DC_RECT.Bottom
 | 
						|
	
 | 
						|
	VistaCorner1[1].X = DC_RECT.Left 
 | 
						|
	VistaCorner1[1].Y = DC_RECT.Top
 | 
						|
	VistaCorner1[2].X = DC_RECT.Right
 | 
						|
	VistaCorner1[2].Y = DC_RECT.Top
 | 
						|
	VistaCorner1[3].X = DC_RECT.Right
 | 
						|
	VistaCorner1[3].Y = DC_RECT.Bottom - (DC_RECT.Bottom * .65)// - 19
 | 
						|
	VistaCorner1[4].X = DC_RECT.Left
 | 
						|
	VistaCorner1[4].Y = DC_RECT.Bottom - (DC_RECT.Bottom * .65)// - 19
 | 
						|
	
 | 
						|
	VistaCorner3[1].X = DC_RECT.Left 
 | 
						|
	VistaCorner3[1].Y = DC_RECT.Top + ((DC_RECT.Bottom * .65) / 2) - 1// + 9//12 
 | 
						|
	VistaCorner3[2].X = DC_RECT.Right
 | 
						|
	VistaCorner3[2].Y = DC_RECT.Top + ((DC_RECT.Bottom * .65) / 2) - 1// + 9//12
 | 
						|
	VistaCorner3[3].X = DC_RECT.Right
 | 
						|
	VistaCorner3[3].Y = DC_RECT.Bottom
 | 
						|
	VistaCorner3[4].X = DC_RECT.Left
 | 
						|
	VistaCorner3[4].Y = DC_RECT.Bottom
 | 
						|
END IF	
 | 
						|
 | 
						|
RETURN TRUE
 | 
						|
 | 
						|
 | 
						|
end function
 | 
						|
 | 
						|
public subroutine of_verticalgradient (long al_color1, long al_color2, graphicobject ado_palette);IF NOT of_SetDeviceContext (ado_Palette) THEN RETURN
 | 
						|
 | 
						|
of_VerticalGradient (al_Color1, al_Color2)
 | 
						|
end subroutine
 | 
						|
 | 
						|
public subroutine of_verticalgradient (long al_color1, long al_color2, graphicobject ado_palette, boolean ab_displayborder, long al_bordercolor, integer ai_style);CHOOSE CASE ai_STYLE
 | 
						|
	CASE 0
 | 
						|
		of_XPGradient (al_color1, al_color2, ado_palette,ab_displayborder,al_bordercolor)
 | 
						|
END CHOOSE
 | 
						|
end subroutine
 | 
						|
 | 
						|
public subroutine of_xpgradient (long al_color1, long al_color2, graphicobject ado_palette, boolean ab_displayborder, long al_bordercolor);Long	ll_Red, &
 | 
						|
		ll_Green, &
 | 
						|
		ll_Blue, &
 | 
						|
		ll_DC
 | 
						|
GRADIENT_RECT l_Gradient[1]
 | 
						|
 | 
						|
LONG hRPen
 | 
						|
 | 
						|
ib_displayborder = ab_displayborder
 | 
						|
 | 
						|
IF NOT of_SetDeviceContext (ado_Palette) THEN RETURN
 | 
						|
 | 
						|
//of_VerticalGradient (al_Color1, al_Color2)
 | 
						|
 | 
						|
// Set the colors in the first corner (top left)
 | 
						|
of_SplitRGB (al_Color1, ll_Red, ll_Green, ll_Blue)
 | 
						|
Corner[1].Red = ll_Red
 | 
						|
Corner[1].Green = ll_Green
 | 
						|
Corner[1].Blue = ll_Blue
 | 
						|
 | 
						|
// Set the colors in the third corner (bottom right)
 | 
						|
of_SplitRGB (al_Color2, ll_Red, ll_Green, ll_Blue)
 | 
						|
Corner[3].Red = ll_Red
 | 
						|
Corner[3].Green = ll_Green
 | 
						|
Corner[3].Blue = ll_Blue
 | 
						|
 | 
						|
l_Gradient[1].UpperLeft = 0 // First corner, top left
 | 
						|
l_Gradient[1].LowerRight = 2 // Third corner, bottom right
 | 
						|
 | 
						|
ll_DC = il_HDC//GetDC (HDC)
 | 
						|
 | 
						|
// Create a border if ib_displayborder is true
 | 
						|
IF 	ab_displayborder THEN
 | 
						|
	hRPen = CreatePen(0,0,al_bordercolor)
 | 
						|
	SelectObject(ll_DC, hRPen)
 | 
						|
	Rectangle(ll_DC, Corner[1].X - 1, Corner[1].Y - 1, Corner[3].X +1, Corner[3].Y +1)
 | 
						|
	DeleteObject(hRPen)
 | 
						|
END IF
 | 
						|
 | 
						|
GradientRectangle (ll_DC, Corner, 4, l_Gradient, 1, GRADIENT_FILL_RECT_V)
 | 
						|
 | 
						|
//ReleaseDC (HDC, ll_DC)
 | 
						|
end subroutine
 | 
						|
 | 
						|
public function boolean of_setdevicecontext (graphicobject ado_palette, integer ai_style, boolean ab_border);IF NOT IsValid (ado_Palette) THEN RETURN FALSE
 | 
						|
 | 
						|
// Get the object's handle
 | 
						|
HDC = Handle (ado_Palette)
 | 
						|
 | 
						|
// Get the object's dimensions
 | 
						|
GetClientRect (HDC, DC_RECT)
 | 
						|
 | 
						|
// let's resize the grandient rectangle if border is displayed
 | 
						|
choose case ai_style
 | 
						|
	case 2
 | 
						|
	IF ab_border THEN
 | 
						|
		// Initialize the vertices
 | 
						|
		Corner[1].X = DC_RECT.Left +1 
 | 
						|
		Corner[1].Y = DC_RECT.Top +1 
 | 
						|
		Corner[2].X = DC_RECT.Right -1
 | 
						|
		Corner[2].Y = DC_RECT.Top +1
 | 
						|
		Corner[3].X = DC_RECT.Right -1
 | 
						|
		Corner[3].Y = DC_RECT.Bottom - 1
 | 
						|
		Corner[4].X = DC_RECT.Left +1
 | 
						|
		Corner[4].Y = DC_RECT.Bottom - 1
 | 
						|
	
 | 
						|
		VistaCorner1[1].X = DC_RECT.Left + 2 
 | 
						|
		VistaCorner1[1].Y = DC_RECT.Top + 2
 | 
						|
		VistaCorner1[2].X = DC_RECT.Right - 1
 | 
						|
		VistaCorner1[2].Y = DC_RECT.Top + 2
 | 
						|
		VistaCorner1[3].X = DC_RECT.Right -2
 | 
						|
		VistaCorner1[3].Y = DC_RECT.Bottom - (DC_RECT.Bottom * .48)//14
 | 
						|
		VistaCorner1[4].X = DC_RECT.Left +1
 | 
						|
		VistaCorner1[4].Y = DC_RECT.Bottom - (DC_RECT.Bottom * .48)//14
 | 
						|
	
 | 
						|
		VistaCorner3[1].X = DC_RECT.Left + 2
 | 
						|
		VistaCorner3[1].Y = DC_RECT.Top + (DC_RECT.Bottom * .53)//16
 | 
						|
		VistaCorner3[2].X = DC_RECT.Right //-1
 | 
						|
		VistaCorner3[2].Y = DC_RECT.Top + (DC_RECT.Bottom * .53)//16 
 | 
						|
		VistaCorner3[3].X = DC_RECT.Right - 2
 | 
						|
		VistaCorner3[3].Y = DC_RECT.Bottom - 2
 | 
						|
		VistaCorner3[4].X = DC_RECT.Left 
 | 
						|
		VistaCorner3[4].Y = DC_RECT.Bottom - 2
 | 
						|
	ELSE
 | 
						|
		Corner[1].X = DC_RECT.Left +1 
 | 
						|
		Corner[1].Y = DC_RECT.Top +1 
 | 
						|
		Corner[2].X = DC_RECT.Right -1
 | 
						|
		Corner[2].Y = DC_RECT.Top +1
 | 
						|
		Corner[3].X = DC_RECT.Right -1
 | 
						|
		Corner[3].Y = DC_RECT.Bottom - 1
 | 
						|
		Corner[4].X = DC_RECT.Left +1
 | 
						|
		Corner[4].Y = DC_RECT.Bottom - 1
 | 
						|
	
 | 
						|
		VistaCorner1[1].X = DC_RECT.Left
 | 
						|
		VistaCorner1[1].Y = DC_RECT.Top 
 | 
						|
		VistaCorner1[2].X = DC_RECT.Right
 | 
						|
		VistaCorner1[2].Y = DC_RECT.Top 
 | 
						|
		VistaCorner1[3].X = DC_RECT.Right
 | 
						|
		VistaCorner1[3].Y = DC_RECT.Bottom - (DC_RECT.Bottom * .48)//14
 | 
						|
		VistaCorner1[4].X = DC_RECT.Left
 | 
						|
		VistaCorner1[4].Y = DC_RECT.Bottom - (DC_RECT.Bottom * .48)//14
 | 
						|
	
 | 
						|
		VistaCorner3[1].X = DC_RECT.Left
 | 
						|
		VistaCorner3[1].Y = DC_RECT.Top + (DC_RECT.Bottom * .53)//16
 | 
						|
		VistaCorner3[2].X = DC_RECT.Right 
 | 
						|
		VistaCorner3[2].Y = DC_RECT.Top + (DC_RECT.Bottom * .53)//16 
 | 
						|
		VistaCorner3[3].X = DC_RECT.Right
 | 
						|
		VistaCorner3[3].Y = DC_RECT.Bottom
 | 
						|
		VistaCorner3[4].X = DC_RECT.Left 
 | 
						|
		VistaCorner3[4].Y = DC_RECT.Bottom
 | 
						|
	END IF
 | 
						|
end choose
 | 
						|
 | 
						|
RETURN TRUE
 | 
						|
 | 
						|
 | 
						|
end function
 | 
						|
 | 
						|
public function integer of_drawtext (graphicobject ado_palette, string as_text, long al_color, string as_font, long al_size, boolean ab_bold, long al_align, long al_x, long al_y, long al_width, long al_height, boolean ab_displayshadow);RETURN of_DrawText (ado_palette, as_text, al_color, as_font, al_size, ab_bold, al_align, al_x, al_y, al_width, al_height, ab_displayshadow, FALSE, FALSE, FALSE)
 | 
						|
end function
 | 
						|
 | 
						|
public function integer of_sethdc (long al_hdc);il_HDC = al_hdc
 | 
						|
 | 
						|
RETURN 1
 | 
						|
end function
 | 
						|
 | 
						|
public function boolean of_getbit (long al_decimal, integer ai_bit);Boolean lb_null
 | 
						|
 | 
						|
//Check parameters
 | 
						|
If IsNull(al_decimal) or IsNull(ai_bit) then
 | 
						|
	SetNull(lb_null)
 | 
						|
	Return lb_null
 | 
						|
End If
 | 
						|
 | 
						|
//Assumption ai_bit is the nth bit counting right to left with
 | 
						|
//the leftmost bit being bit one.
 | 
						|
//al_decimal is a binary number as a base 10 long.
 | 
						|
If Int(Mod(al_decimal / (2 ^(ai_bit - 1)), 2)) > 0 Then
 | 
						|
	Return True
 | 
						|
End If
 | 
						|
 | 
						|
Return False
 | 
						|
end function
 | 
						|
 | 
						|
public function unsignedlong of_createfont (string as_name, long al_size, boolean ab_underline);LogFont lstr_Lf
 | 
						|
uLong lul_Font
 | 
						|
 | 
						|
lstr_Lf.lffacename = as_name
 | 
						|
lstr_Lf.lfweight = 400
 | 
						|
lstr_Lf.lfheight = al_size * -1
 | 
						|
lstr_Lf.lfPitchAndFamily = '1'
 | 
						|
lstr_Lf.lfClipPrecision = Char(2)
 | 
						|
lstr_Lf.lfOutPrecision = Char(1)
 | 
						|
lstr_Lf.lfQuality = Char(1)
 | 
						|
lstr_Lf.lfCharset = Char(1)
 | 
						|
 | 
						|
IF ab_underline THEN
 | 
						|
	lstr_Lf.lfunderline = Char(1)
 | 
						|
END IF
 | 
						|
 | 
						|
iul_font = CreateFontIndirect( lstr_Lf )
 | 
						|
lstr_Lf.lfweight = 700
 | 
						|
iul_fontbold = CreateFontIndirect( lstr_Lf )
 | 
						|
 | 
						|
RETURN 1
 | 
						|
end function
 | 
						|
 | 
						|
public function long of_bitwiseand (long al_value1, long al_value2);Integer		li_Cnt
 | 
						|
Long			ll_Result
 | 
						|
Boolean		lb_Value1[32], lb_Value2[32]
 | 
						|
 | 
						|
// Check for nulls
 | 
						|
If IsNull(al_Value1) Or IsNull(al_Value2) Then
 | 
						|
	SetNull(ll_Result)
 | 
						|
	Return ll_Result
 | 
						|
End If
 | 
						|
 | 
						|
// Get all bits for both values
 | 
						|
For li_Cnt = 1 To 32
 | 
						|
	lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)
 | 
						|
	lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)
 | 
						|
Next
 | 
						|
 | 
						|
// And them together
 | 
						|
For li_Cnt = 1 To 32
 | 
						|
	If lb_Value1[li_Cnt] And lb_Value2[li_Cnt] Then
 | 
						|
		ll_Result = ll_Result + (2^(li_Cnt - 1))
 | 
						|
	End If
 | 
						|
Next
 | 
						|
 | 
						|
Return ll_Result
 | 
						|
end function
 | 
						|
 | 
						|
public function long of_bitwiseor (long al_value1, long al_value2);Integer		li_Cnt
 | 
						|
Long			ll_Result
 | 
						|
Boolean		lb_Value1[32], lb_Value2[32]
 | 
						|
 | 
						|
// Check for nulls
 | 
						|
If IsNull(al_Value1) Or IsNull(al_Value2) Then
 | 
						|
	SetNull(ll_Result)
 | 
						|
	Return ll_Result
 | 
						|
End If
 | 
						|
 | 
						|
// Get all bits for both values
 | 
						|
For li_Cnt = 1 To 32
 | 
						|
	lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)
 | 
						|
	lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)
 | 
						|
Next
 | 
						|
 | 
						|
// Or them together
 | 
						|
For li_Cnt = 1 To 32
 | 
						|
	If lb_Value1[li_Cnt] Or lb_Value2[li_Cnt] Then
 | 
						|
		ll_Result = ll_Result + (2^(li_Cnt - 1))
 | 
						|
	End If
 | 
						|
Next
 | 
						|
 | 
						|
Return ll_Result
 | 
						|
 | 
						|
end function
 | 
						|
 | 
						|
public function integer of_drawtext (graphicobject ado_palette, string as_text, long al_color, string as_font, long al_size, boolean ab_bold, long al_align, long al_x, long al_y, long al_width, long al_height, boolean ab_displayshadow, boolean ab_elipse, boolean ab_underline, boolean ab_wordwrap);Long	ll_Red, &
 | 
						|
		ll_Green, &
 | 
						|
		ll_Blue, &
 | 
						|
		ll_DC, ll_parm, ll_sizeparm
 | 
						|
GRADIENT_RECT l_Gradient[1]
 | 
						|
RECT l_Rect, l_Rectback
 | 
						|
 | 
						|
LONG hRPen
 | 
						|
 | 
						|
IF Len(Trim(as_text)) = 0 THEN
 | 
						|
	il_newWidth = 1
 | 
						|
	il_NewHeight = al_height
 | 
						|
	RETURN 0
 | 
						|
END IF
 | 
						|
 | 
						|
IF NOT of_SetDeviceContext (ado_Palette) THEN RETURN 0
 | 
						|
 | 
						|
ll_DC = il_HDC//GetDC (HDC)
 | 
						|
 | 
						|
of_CreateFont(as_font, al_size, ab_underline)
 | 
						|
 | 
						|
IF ab_bold THEN
 | 
						|
	SelectObject(ll_DC, iul_fontbold)
 | 
						|
ELSE
 | 
						|
	SelectObject(ll_DC, iul_font)
 | 
						|
END IF
 | 
						|
 | 
						|
IF ab_elipse THEN
 | 
						|
	ll_sizeparm = of_BitWiseOr(al_align, DT_WORD_ELLIPSIS)
 | 
						|
ELSE
 | 
						|
	IF ab_wordwrap THEN
 | 
						|
		ll_sizeparm = of_BitWiseOr(al_align, DT_WORDBREAK)
 | 
						|
	END IF
 | 
						|
END IF
 | 
						|
 | 
						|
IF ab_wordwrap THEN
 | 
						|
	ll_parm = of_BitWiseOr(DT_CALCRECT, DT_WORDBREAK)
 | 
						|
ELSE
 | 
						|
	ll_parm = DT_CALCRECT
 | 
						|
END IF
 | 
						|
 | 
						|
SetBkMode(ll_DC, 1)
 | 
						|
 | 
						|
/*-------------------------------------------------------------------
 | 
						|
	Normal text
 | 
						|
-------------------------------------------------------------------*/
 | 
						|
// Position
 | 
						|
l_Rect.Left = al_x
 | 
						|
l_Rect.Top = al_y
 | 
						|
l_Rect.Right = al_width
 | 
						|
l_Rect.Bottom = al_height
 | 
						|
 | 
						|
//SetBkMode(ll_DC, 1)
 | 
						|
SetTextColor(ll_DC, al_color)
 | 
						|
 | 
						|
IF NOT ab_elipse THEN
 | 
						|
	Drawtext(ll_DC, as_text, LEN(as_text), l_Rect, ll_parm)
 | 
						|
END IF
 | 
						|
 | 
						|
IF al_align = ALIGN_RIGHT OR &
 | 
						|
   al_align = ALIGN_CENTER THEN
 | 
						|
	l_Rect.Right = al_width
 | 
						|
END IF
 | 
						|
 | 
						|
Drawtext(ll_DC, as_text, LEN(as_text), l_Rect, ll_sizeparm)
 | 
						|
 | 
						|
il_NewHeight = l_Rect.Bottom
 | 
						|
il_newWidth = l_Rect.RIGHT
 | 
						|
 | 
						|
DeleteObject(iul_font)
 | 
						|
DeleteObject(iul_fontbold)
 | 
						|
 | 
						|
//ReleaseDC (HDC, ll_DC)
 | 
						|
 | 
						|
RETURN 1
 | 
						|
end function
 | 
						|
 | 
						|
public function integer of_drawbuttons (dragobject ado_palette, buttons ast_buttons[], long al_bordercolor, long al_imagelist, boolean ab_boldselected, long il_imagesize, long al_height);point lp[], lp_line[]
 | 
						|
point lp_empty[]
 | 
						|
gradient_rect l_Gradient[1]
 | 
						|
GRADIENT_RECT l_Line[]
 | 
						|
rect rc
 | 
						|
Long	ll_Red, &
 | 
						|
		ll_Green, &
 | 
						|
		ll_Blue
 | 
						|
long hRgn, hRPen, ll_index, ll_count, ll_textcolor, ll_parm
 | 
						|
Long ll_inner, ll_innercount
 | 
						|
Long ll_textx, ll_texty, ll_textwidth, ll_y
 | 
						|
Boolean lb_bold
 | 
						|
 | 
						|
ll_count = UpperBound(ast_buttons)
 | 
						|
 | 
						|
FOR ll_index = 1 TO ll_count
 | 
						|
	lp = lp_empty
 | 
						|
	
 | 
						|
	lp = ast_buttons[ll_index].ast_point
 | 
						|
	
 | 
						|
	IF lp[4].py < 0 OR lp[1].py > al_height THEN
 | 
						|
		CONTINUE
 | 
						|
	END IF
 | 
						|
	
 | 
						|
	l_Gradient[1].UpperLeft = 0
 | 
						|
	l_Gradient[1].LowerRight = 2
 | 
						|
	
 | 
						|
	IF ast_buttons[ll_index].ab_selected OR &
 | 
						|
	   ast_buttons[ll_index].ab_mouseover THEN
 | 
						|
		Corner[1].X = lp[1].px 
 | 
						|
		Corner[1].Y = lp[1].py
 | 
						|
		Corner[2].X = lp[2].px 
 | 
						|
		Corner[2].Y = lp[2].py
 | 
						|
		Corner[3].X = lp[3].px 
 | 
						|
		Corner[3].Y = lp[3].py
 | 
						|
		Corner[4].X = lp[4].px 
 | 
						|
		Corner[4].Y = lp[4].py
 | 
						|
		
 | 
						|
		// Set the colors in the first corner (top left)
 | 
						|
		of_SplitRGB (ast_buttons[ll_index].al_backcolor1, ll_Red, ll_Green, ll_Blue)
 | 
						|
		Corner[1].Red = ll_Red
 | 
						|
		Corner[1].Green = ll_Green
 | 
						|
		Corner[1].Blue = ll_Blue
 | 
						|
		
 | 
						|
		// Set the colors in the third corner (bottom right)
 | 
						|
		of_SplitRGB (ast_buttons[ll_index].al_backcolor2, ll_Red, ll_Green, ll_Blue)
 | 
						|
		Corner[3].Red = ll_Red
 | 
						|
		Corner[3].Green = ll_Green
 | 
						|
		Corner[3].Blue = ll_Blue
 | 
						|
		
 | 
						|
		//Create Polygon
 | 
						|
		hRPen = CreatePen(0,0,al_bordercolor)
 | 
						|
		SelectObject(il_HDC, hRPen)
 | 
						|
		hRgn = CreateRoundRectRgn( Corner[1].X, Corner[1].Y, Corner[3].X, Corner[3].Y,7,7)
 | 
						|
		RoundRect( il_HDC, Corner[1].X - 1, Corner[1].Y - 1, Corner[3].X, Corner[3].Y,10,10)
 | 
						|
		
 | 
						|
		SelectClipRgn(il_HDC, hRgn)
 | 
						|
		
 | 
						|
		//Gradient Fill
 | 
						|
		GradientRectangle (il_HDC, Corner, 4, l_Gradient, 1, GRADIENT_FILL_RECT_V)
 | 
						|
		
 | 
						|
		SelectClipRgn(il_HDC, 0)
 | 
						|
		
 | 
						|
		DeleteObject(hRPen)
 | 
						|
		DeleteObject(hRgn)
 | 
						|
	END IF
 | 
						|
	
 | 
						|
	IF ast_buttons[ll_index].ab_enabled THEN
 | 
						|
		ll_textcolor = 0
 | 
						|
	ELSE
 | 
						|
		ll_textcolor = RGB(100,100,100)
 | 
						|
	END IF
 | 
						|
	
 | 
						|
	IF ab_boldselected AND ast_buttons[ll_index].ab_selected THEN
 | 
						|
		lb_bold = TRUE
 | 
						|
	ELSE
 | 
						|
		lb_bold = FALSE
 | 
						|
	END IF
 | 
						|
	
 | 
						|
	of_DrawText(ado_palette, &
 | 
						|
	            ast_buttons[ll_index].as_text, &
 | 
						|
					ll_textcolor, &
 | 
						|
					'tahoma', &
 | 
						|
					11, lb_bold, ALIGN_CENTER, &
 | 
						|
					ast_buttons[ll_index].ast_point[1].px, &
 | 
						|
					ast_buttons[ll_index].ast_point[1].py + il_imagesize + 6, &
 | 
						|
					ast_buttons[ll_index].ast_point[2].px - ast_buttons[ll_index].ast_point[1].px + 10, &
 | 
						|
					ast_buttons[ll_index].al_textheight, &
 | 
						|
					FALSE, FALSE, FALSE, TRUE)
 | 
						|
	
 | 
						|
	//----------------------------------------
 | 
						|
	
 | 
						|
	IF ast_buttons[ll_index].ab_enabled THEN
 | 
						|
		ImageList_DrawEx(al_imagelist, &
 | 
						|
		                 ast_buttons[ll_index].al_image - 1, &
 | 
						|
							  il_HDC, &
 | 
						|
							  ast_buttons[ll_index].ast_point[1].px + (ast_buttons[ll_index].ast_point[2].px - ast_buttons[ll_index].ast_point[1].px) / 2 - (il_imagesize / 2) , &
 | 
						|
							  ast_buttons[ll_index].ast_point[1].py + 4, &
 | 
						|
							  il_imagesize,il_imagesize, &
 | 
						|
							  0, 0, ILD_TRANSPARENT )
 | 
						|
	ELSE
 | 
						|
		ll_parm = of_BitWiseOR(ILD_TRANSPARENT, ILD_BLEND50)
 | 
						|
		ImageList_DrawEx(al_imagelist, &
 | 
						|
		                 ast_buttons[ll_index].al_image - 1, &
 | 
						|
							  il_HDC, &
 | 
						|
							  ast_buttons[ll_index].ast_point[1].px + (ast_buttons[ll_index].ast_point[2].px - ast_buttons[ll_index].ast_point[1].px) / 2 - (il_imagesize / 2) , &
 | 
						|
							  ast_buttons[ll_index].ast_point[1].py + 4, &
 | 
						|
							  il_imagesize,il_imagesize, &
 | 
						|
							  4294967295, RGB(128,128,128), ll_parm )
 | 
						|
	END IF
 | 
						|
	
 | 
						|
NEXT
 | 
						|
 | 
						|
RETURN 1
 | 
						|
end function
 | 
						|
 | 
						|
on n_cst_buttonlistbar_gradient.create
 | 
						|
call super::create
 | 
						|
TriggerEvent( this, "constructor" )
 | 
						|
end on
 | 
						|
 | 
						|
on n_cst_buttonlistbar_gradient.destroy
 | 
						|
TriggerEvent( this, "destructor" )
 | 
						|
call super::destroy
 | 
						|
end on
 | 
						|
 |