Date: 02-16-2022
Return to Index
created by gbSnippets
How to Format Grid Colors and Fonts
MLG fills in all the grid default colors and fonts etc. upon creatation of a grid. If these are not to the 's taste then substitutions can be made. This is done by filling in a GridInit structure and using the %MLG_SETGRIDEXSTYLE message. Only structure fields that are none zero will be used (except for the user data field). Be aware that when a grid is destroyed it will destroy all the objects it is using. This is an issue with fonts. It is advisable to only use programmer adhoc fonts created just for use with a particular grid if a built-in font does not suitable the need. MLG uses 3 built-in fonts: Arial, Courier, and Times Roman.
How to Format a Row or Column
Row and columns can be designated to be of five main types 1) General Textbox, 2) Combobox, 3) Checkbox, 4) Date textbox and 5) Number textbox. Numbers and Dates are just specialized Textboxes. Columns are typically formatted to be a certain way as a result of a database field type so most of the time only columns will be custom formatted. On specialized grids, sometimes rows need to have a particular format. A row format is alway superior to a column format.
The information for formats of a row or column is held in a RowColDataType structure. Each row and each column stores this information. Typically, zero is the default behavior. If the programmer needs to alter the structure after it has been set, it may be better to use the message %MLG_GETROWFORMAT or %MLG_GETCOLFORMAT first to first a temporary RowColDataType structure so the previous settings are not lost upon update. Some messages like %MLG_SETROWEXTRA are careful about this.
New in Version 1.08 is flexible display formatting of Number formats. Beside the ability to define the number of digits and decimal places as before, now you can define the display of a number in a cell using the power of 's FORMAT$ function. The programmer can use up to 20 masks or which 5 have been predefined. A typical mask definition could be:
SendMessage hGrid, %MLG_SETNUMFORMATSTR ,6,"0000.00"
for putting the mask "0000.00" in mask slot number 6.
The use the %MLG_SETROWFORMAT message with the PrintUsing field set to 6 of the RowColDataType structure to set the Row or Column to the display format (assuming that the FormatNumber field is also set. See Formatting to review mask options.
How to Override the Format of a Row or Column
Also new to Version 1.08 is the ability to override formatting on a row or column level, to a cell level. By creating a Format Override Array, any cell within that array can be defined to have its individual Font display (normal,bold, or italics), RGB Color, Border (top,line,bottom, or right heavy lines), and PrintUsing mask which will assume that a valid number will be in the cell or zero will be displayed. The maximum size of the override array is the currently sized sheet (up to 65,000 rows). Only one Format Override Array can be defined per sheet and it can not be resized dynamically. It would have to be deleted and a new one created if a resize is necessary. New to version 2.00 is the z switch, which will automatically set up a formatoverride array to match the size of your dimensioned grid up to 65,000 rows. The steps to set up a Format Override Array to alter cell 2,6 would be:
LOCAL fo AS FormatOverride
SendMessage hGrid ,%MLG_CREATEFORMATOVERRIDE,35,6 'set up a 35 row by 6 column array
fo.MyRGB=%YELLOW
fo.MyFont=2 'Italic
fo.MyUsing=%MLG_CURRENCY
SendMessage hGrid, %MLG_SETFORMATOVERRIDE ,MAKLNG(2,6),VARPTR(fo)
------------------------------------------------------------
Main format types and their attributes
General Textbox Type
Color
Justification
WriteLock
Text Length
Text Case
Date Textbox Type
Color
Justification
WriteLock
Date Format
Number Textbox Type
Color
Justification
WriteLock
Number Format
PrintUsing (for display only) NEW TO VERSION 1.08
Combobox Type
Editable or NonEditable
Checkbox Type
None
Notes:
1)Double click Editable Combobox to edit text
---------------------------------------------------------------
List of Equates
%FALSE = 0
%TRUE = 1
'Cell Types
%MLG_TYPE_EDIT = 0 'default - may be overridden
%MLG_TYPE_DRAW = 1
%MLG_TYPE_CHECKBOX = 2
%MLG_TYPE_COMBOSTATIC = 3
%MLG_TYPE_COMBOEDIT = 4
%MLG_TYPE_USERBUTTON = 5
%MLG_TYPE_DATE = 6
%MLG_TYPE_NUMBER = 7
'Write Lock
%MLG_NOLOCK = 0
%MLG_LOCK = 1
%MLG_LOCK_SKIPROW = -1 'Will not allow a locked row to be selected
'Hilight
%MLG_HILTE =-1
%MLG_NOHILITE = 0
'Case Formats
%MLG_NOCASE = 0
%MLG_UCASE = 1
%MLG_LCASE = 2
%MLG_MCASE = 3
'Justification formats
%MLG_JUST_LEFT = 0
%MLG_JUST_RIGHT = 1
%MLG_JUST_CENTER = 2
%MLG_JUST_WORDWRAP = 3
'Date formats
%MMDDYYYY = 1
%MMDDYYYYH = 2 'dot instead of a slash
%DDMMYYYY = 3
%DDMMYYYYH = 4 'dot instead of a slash
%MMYYYY = 5
%MMYYYYH = 6 'dot instead of a slash
%YYYYMMDD = 7
%YYYYMMDDH = 8 'dot instead of a slash
%YYYYMM = 9
%YYYYMMH = 10 'dot instead of a slash
'Redimensioning Error Constants
%MLG_ERR_TOTROWS1 = 1 'Requested Total Rows is less than 1
%MLG_ERR_TOTROWS65000 = 2 'Requested Total Rows is more than allowable total rows (65000)
%MLG_ERR_TOTCOLS1 = 3 'Requested Total Columns is less than 1
%MLG_ERR_TOTCOLS255 = 4 'Requested Total Columns is more than allowable total columns (255)
%MLG_ERR_DIMROWS1 = 5 'Requested Dimensioned Rows is less than 1
%MLG_ERR_DIMROWS65000 = 6 'Requested Dimensioned Rows is more than allowable total rows (65000)
%MLG_ERR_DIMCOLS1 = 7 'Requested Dimensioned Columns is less than 1
%MLG_ERR_DIMCOLS255 = 8 'Requested Dimensioned Columns is more than allowable total columns (255)
%MLG_ERR_TOTROWSDIMROWS = 9 'Requested Total Rows is greater than Dimensioned Rows
%MLG_ERR_TOTCOLSDIMCOLS = 10 'Requested Total Columns is greater than Dimensioned Columns
%MLG_ERR_GRIDMEM = 11 'Access to the grid memory block failed
%MLG_ERR_STRMEMREALLOCATION = 12 'ReAllocation of string memory failed
%MLG_ERR_ROWMEMREALLOCATION = 13 'ReAllocation of row formatting memory failed
'WorkSheet Information NEW TO VERSION 1.08
%MLG_SHEET_GETNUM = 1 'Get slot number of a sheet given the its name
%MLG_SHEET_GETNAME = 2 'Get the name of a sheet given the slot number
%MLG_SHEET_GETTOT = 3 'Get count of sheets
%MLG_SHEET_GETRIGHT = 4 'Get sheet slot number directly to the right of given sheet
%MLG_SHEET_GETLEFT = 5 'Get sheet slot number directly to the left of given sheet
%MLG_SHEET_GETFIRST = 6 'Get sheet slot number of first sheet
%MLG_SHEET_GETLAST = 7 'Get sheet slot number of last sheet
%MLG_SHEET_GETID = 8 'Get the Sheet ID number given the sheet slot number
%MLG_SHEET_GETNUMFROMID = 9 'Get sheet slot number given the sheet id number
'Format Override Borders NEW TO VERSION 1.08
%MLG_TOP = 1
%MLG_LEFT = 2
%MLG_BOTTOM = 4
%MLG_RIGHT = 8
%MLG_BOX = 99 ' to be used with MLG_SetFormatOverrideRange wrapper only
%MLG_GRID = 100 ' to be used with MLG_SetFormatOverrideRange wrapper only
'Format Masks of the Format Using NEW TO VERSION 1.08
%MLG_NODECIMAL = 1 '"#"
%MLG_COMMAS = 2 '"#,"
%MLG_COMMASDECIMAL = 3 '"#,.00"
%MLG_CURRENCY = 4 '"$* #,.00"
%MLG_PERCENT = 5 '"0.0%
'Workbook Properties
%MLG_USERTABMOVE = 1
%MLG_USERTABEDIT = 2
'Format Override Borders
%MLG_TOP = 8
%MLG_LEFT = 4
%MLG_BOTTOM = 2
%MLG_RIGHT = 1
'Font
%MLGSYSFONTNORM = 0
%MLGSYSFONTBOLD = 1
%MLGSYSFONTITAL = 2
%MLGSYSFONTTABNORM = 3
%MLGSYSFONTTABBOLD = 4
%MLGSYSFONTNORMVERT = 5
%MLGSYSFONTBOLDVERT = 6
%MLGSYSFONTRES = 7
%MLG_FONT_USER = 0
%MLG_FONT_ARIAL = 3
%MLG_FONT_COURIERNEW = 1
%MLG_FONT_TIMESNEWROMAN = 2
%MLG_FONT_SIZE8 = 0
%MLG_FONT_SIZE10 = 1
%MLG_FONT_SIZE12 = 2
%MLG_FONT_SIZE14 = 3
%MLG_FONT_SIZE16 = 4
%MLG_FONT_SIZE20 = 5
%MLG_FONT_SIZE24 = 6
%MLG_FONT_SIZE36 = 7
'CellColors
%CELLCOLORWHITE = 0
%CELLCOLORBLACK = 1
%CELLCOLORRED = 2
%CELLCOLORSALMON = 3
%CELLCOLORGREEN = 4
%CELLCOLORLIGHTGREEN = 5
%CELLCOLORBLUE = 6
%CELLCOLORLIGHTBLUE = 7
%CELLCOLORMAGENTA = 8
%CELLCOLORDARKMAGENTA = 9
%CELLCOLORCYAN = 10
%CELLCOLORAQUAMARINE = 11
%CELLCOLORKHAKI = 12
%CELLCOLORBROWN = 13
%CELLCOLORYELLOW = 14
%CELLCOLORORANGE = 15
'Callbacks
%MLG_DRAWCALLBACK = 1
%MLG_FORMULACALLBACK = 2
%MLG_NUMBERCALLBACK = 3
%MLG_LISTBOXCALLBACK = 4
%MLG_DATECALLBACK = 5
%MLG_SHEETTYPECALLBACK = 6
'Format Override Cell Attribute Types
%MLG_TYPE_CELLTYPE = 0 'default - may be overridden
%MLG_TYPE_WRITELOCK = 1
%MLG_TYPE_USING = 2
%MLG_TYPE_FONT = 3
%MLG_TYPE_BKGCOLOR = 4
%MLG_TYPE_FGCOLOR = 5
%MLG_TYPE_BORDER = 6
%MLG_TYPE_CASE = 7
%MLG_TYPE_JUST = 8
List of Structures
TYPE RowColDataType 'A Row Format is superior to a Column Format
CellType AS LONG 'Default(text) = 0 , text= 1,checkbox=2,dropdownlist=3,editable 'dropdownlist=4
VisWidth AS LONG 'if column, this is the width in pixels (zero is hidden)
FormatExtra AS LONG 'if negative then the row or column will be high lighted. May have ' 'future uses also.
WriteLock AS LONG 'locked <> 1 , unlocked = 0
FormatColor AS LONG 'RGB of the text (foreground color) of the cell - zero is black
FormatCase AS LONG 'No case formatting = 0 , upper case > 0 , lower case < 0
FormatLength AS LONG 'No Length restriction (%MLG_MAXCELLLEN max) = 0 or max characters (2 'characters minimum)
FormatJustify AS LONG 'Left = 0 (default), Right = 1, Center = 2
FormatNumber AS SINGLE 'Integer portion is count left of decimal point, decimal is portion 'right of decimal point ie "8.3" Note-a comma is also recoginized
'as a dot in the display of the grid.
Extra AS LONG 'Anything you want, could be used as Record Number in Row
List AS ASCIIZ PTR 'Used for the list box. Reserved
FormatDate AS LONG ' 0=mm/dd/yyyy etc.
TempHide AS LONG 'Internal
SortExtra AS LONG 'Internal
PrintUsing AS LONG 'PrintUsing on Numeric Fields 1 to %MLG_NUMFORMATSTR
END TYPE
TYPE GridInit
hFont AS DWORD 'Cell Font
hFontBold AS DWORD 'Header Font for column and row headers
hFontItalic AS DWORD 'Italic for option format override NEW TO VERSION 1.08
cyCharEx AS LONG Deprecated in version 2.00
CellBkColorRGB AS LONG 'Cells Background Color
CellLineColorRGB AS LONG 'Cell Line Color
WindowBkColorRGB AS LONG 'Window Background Color outside of cell area
RCHiLiteRGB AS LONG 'The color to high light a row or column
UserData AS LONG 'Use for anything you wish
END TYPE
CHANGED IN VERSION 2.00
TYPE FormatOverRide
CellFont AS BYTE '255 bits 1 2 3 size 4 5 font name 6 7 8 Bold Italic Underline zero is automatic
CellType AS BYTE 'bits 1 2 3 is cell type
'bit 4 is writelock
'bits 5 6 7 8 list pointers 1 to 15
'Cell Type 0 automatic (text) = Justify Case
'Cell Type 1 text with wordwrap = Justify Case DT_WORDBREAK
'Cell Type 2 checkbox = not used
'Cell Type 3 combo static = 1 to 15 lists
'Cell Type 4 combo edit = 1 to 15 lists
'Cell Type 5 user button = not used
'Cell Type 6 date = 1 to 15 date formats
'Cell Type 7 number = 1 to 15 number formats
CellFormatExtra AS BYTE 'bit 1 2 3 4 border bit 5 6 case bit 7 8 justify
CellColor AS BYTE '16 Background colors, 16 text colors
END TYPE
http://www.garybeene.com/sw/gbsnippets.htm