Files
linguist/samples/PowerBuilder/n_cst_buttonlistbar_gradient.sru
2016-07-24 12:59:24 +02:00

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