mDialog module
Holds the constants, the four structure types and the eight conversion functions that the dialog classes of the package share. The conversions change between inches, millimetres, points and twips, and between an HTML colour text and its red, green and blue parts.
Functions: HtmlToRGB, InchesToMM, InchesToPoints, InchesToTwips, MMToInches, PointsToInches, RGBToHtml, TwipsToInches.
Constants: MM_PER_INCH, POINTS_PER_INCH, TWIPS_PER_INCH and the eight paper sizes.
Types: COMDLG_FILTERSPEC, GUID, POINT, RECT.
The members of mDialog are global: a program writes InchesToMM(1) and also mDialog.InchesToMM(1).
Debug.Print InchesToMM(8.5) ' 215.9
Debug.Print InchesToPoints(1) ' 72
Debug.Print InchesToTwips(1.5) ' 2160
Debug.Print RGBToHtml(255, 128, 0) ' #FF8000
Dim r As Long, g As Long, b As Long
HtmlToRGB "#00ff7f", r, g, b
Debug.Print r; g; b ' 0 255 127
Functions
HtmlToRGB
Splits an HTML colour text into its red, green and blue parts.
Syntax: HtmlToRGB ( htmlColor, r, g, b )
- htmlColor
- required A String of six hexadecimal digits, with a leading
#or without one, and with or without spaces at its ends:#FF8000,ff8000. - r, g, b
- required Long variables, passed by reference. They receive the red, green and blue parts, each from 0 to 255.
The text must have exactly six characters after the optional #. Any other text sets all three variables to 0: three-digit colours (#FFF), eight-digit colours (#FF8000FF), colour names, an empty string and text with characters that are not hexadecimal digits (#GG0000) give black, and no error is raised. A text with a sign character (#-10000, #+12345) gives black too. A space inside six characters is not always rejected: #1 2345 gives 1, 35 and 69.
InchesToMM
Converts inches to millimetres.
Syntax: InchesToMM ( inches ) As Double
Returns inches multiplied by 25.4: 215.9 for 8.5.
InchesToPoints
Converts inches to points.
Syntax: InchesToPoints ( inches ) As Double
Returns inches multiplied by 72: 72 for 1.
InchesToTwips
Converts inches to twips.
Syntax: InchesToTwips ( inches ) As Long
Returns inches multiplied by 1,440, rounded to the nearest whole number with CLng: 2160 for 1.5, 0 for 0.0003 and 1 for 0.0004.
MMToInches
Converts millimetres to inches.
Syntax: MMToInches ( mm ) As Double
Returns mm divided by 25.4: 1 for 25.4, and 8.26771653543307 for 210.
PointsToInches
Converts points to inches.
Syntax: PointsToInches ( points ) As Double
Returns points divided by 72: 0.5 for 36.
RGBToHtml
Builds an HTML colour text from red, green and blue parts.
Syntax: RGBToHtml ( r, g, b ) As String
Each argument is a Long. The function takes the lowest eight bits of each (And &HFF), writes each as two upper-case hexadecimal digits and puts a # first. A value outside 0 to 255 is not rejected: it wraps, so RGBToHtml(256, -1, 300) gives #00FF2C.
TwipsToInches
Converts twips to inches.
Syntax: TwipsToInches ( twips ) As Double
twips is a Long. Returns it divided by 1,440: 0.5 for 720.
Constants
| Constant | Type | Value |
|---|---|---|
| MM_PER_INCH | Double | 25.4 |
| POINTS_PER_INCH | Long | 72 |
| TWIPS_PER_INCH | Long | 1440 |
Paper sizes
Paper sizes in inches, all Double. The A sizes are rounded to two decimals.
| Constant | Value |
|---|---|
| PAPER_LETTER_WIDTH, PAPER_LETTER_HEIGHT | 8.5, 11 |
| PAPER_LEGAL_WIDTH, PAPER_LEGAL_HEIGHT | 8.5, 14 |
| PAPER_A4_WIDTH, PAPER_A4_HEIGHT | 8.27, 11.69 |
| PAPER_A3_WIDTH, PAPER_A3_HEIGHT | 11.69, 16.54 |
Types
The structures are those of the Windows API, written for the dialog classes of the package.
| Type | Members | Size, 32-bit and 64-bit |
|---|---|---|
| COMDLG_FILTERSPEC | pszName and pszSpec, both LongPtr | 8 and 16 bytes |
| GUID | Data1 (Long), Data2 and Data3 (Integer), Data4 (8 Byte values) | 16 bytes |
| POINT | X and Y, both Long | 8 bytes |
| RECT | Left, Top, Right and Bottom, all Long | 16 bytes |
Declare GUID as mDialog.GUID: the name GUID alone refers to another type, and Dim g As GUID is refused with error TB5106 in a project that references the package. Writing the module name before RECT, POINT and COMDLG_FILTERSPEC as well makes sure that the type of the package is the one used.
Dim g As mDialog.GUID
Dim rc As mDialog.RECT
g.Data1 = 5
rc.Left = 2
rc.Right = 9
Debug.Print g.Data1 ' 5
Debug.Print rc.Right - rc.Left ' 7
Debug.Print LenB(rc) ' 16
See Also
- TBMANLIB_Dialog package – overview
- cDialogEx class – uses GUID and COMDLG_FILTERSPEC