?? morphlcd.ctl
字號:
Private Const MAX_DIGITS As Long = 50 ' maximum displayable number of digits.
Private DigitXPos(0 To MAX_DIGITS - 1) As Long ' X coordinate of each main value digit.
Private DigitXPosExp(0 To 4) As Long ' X coordinate of each exponent digit.
Private ThousandsFlag() As Boolean ' thousands separator flag for after each digit.
' X and Y coordinates of the decimal separator.
Private DecimalSeparatorPos As POINTAPI
' X and Y coordinates of each 'dot' in the colon.
Private Type ColonCoordinateType
TopPoint As POINTAPI
BottomPoint As POINTAPI
End Type
Private ColonPos As ColonCoordinateType
' the widths and heights of main and exponent LCD digits.
Private DigitWidth As Long ' width of a main value digit, in pixels.
Private DigitHeight As Long ' height of a main value digit, in pixels.
Private DigitWidthExp As Long ' width of an exponent digit, in pixels.
Private DigitHeightExp As Long ' height of an exponent digit, in pixels.
Private ChangingPicture As Boolean ' so control knows to reblit new bg to virtual DC.
Private PreviousMainValue As String ' used to determine whether to display new digit.
Private PreviousExponentValue As String ' used to determine whether to display new digit.
Private PreviousNegative As Boolean ' flag to determine sign of previously displayed value.
' default property value constants.
Private Const m_def_BackAngle = 90 ' horizontal gradient.
Private Const m_def_BackColor1 = &H0 ' black background gradient start color.
Private Const m_def_BackColor2 = &H0 ' black background gradient end color.
Private Const m_def_BackMiddleOut = True ' middle-out gradient display.
Private Const m_def_BorderWidth = 1 ' 1-pixel wide border.
Private Const m_def_BorderColor = &HFF0000 ' blue border color.
Private Const m_def_BurnInColor = &H505000 ' dark cyan simulated segment burn-in color.
Private Const m_def_BurnInColorNeg = &H505000 ' dark cyan negative value burn-in color.
Private Const m_def_CurveBottomLeft = 0 ' no curvature.
Private Const m_def_CurveBottomRight = 0 ' no curvature.
Private Const m_def_CurveTopLeft = 0 ' no curvature.
Private Const m_def_CurveTopRight = 0 ' no curvature.
Private Const m_def_DecimalSeparator = 1 ' period decimal separator.
Private Const m_def_InterDigitGap = 6 ' 6 pixels between main LCD digits.
Private Const m_def_InterDigitGapExp = 2 ' 2 pixels between exponent digits.
Private Const m_def_InterSegmentGap = 0 ' no segment gap in main LCD digit segments.
Private Const m_def_InterSegmentGapExp = 0 ' no segment gap in exponent digits.
Private Const m_def_NumDigits = 20 ' 20 main value digits.
Private Const m_def_NumDigitsExp = 4 ' 3 digits + minus sign.
Private Const m_def_PictureMode = 0 ' normal picture display.
Private Const m_def_Seg3DAngle = 90 '
Private Const m_def_Seg3DColor1 = &H0 ' black first segment gradient color.
Private Const m_def_Seg3DColor2 = &HC0C0C0 ' grey second segment gradient color.
Private Const m_def_Seg3DMiddleOut = True ' show middle out segment gradient style.
Private Const m_def_SegmentFillStyle = 1 ' solid filled digits.
Private Const m_def_SegmentHeight = 8 ' main segments 8 pixels high.
Private Const m_def_SegmentHeightExp = 6 ' exponent digit segments 4 pixels high.
Private Const m_def_SegmentLitColor = &HFFFF00 ' cyan lit positive value segment.
Private Const m_def_SegmentLitColorNeg = &HFFFF00 ' cyan lit negative value segment.
Private Const m_def_SegmentStyle = 2 ' rectangular main digit segments.
Private Const m_def_SegmentStyleExp = 2 ' rectangular exponent digit segments.
Private Const m_def_SegmentWidth = 3 ' main segments 3 pixels high.
Private Const m_def_SegmentWidthExp = 3 ' exponent segments 3 pixels wide.
Private Const m_def_ShowBurnIn = True ' show 'burned-in' segments.
Private Const m_def_ShowExponent = True ' show exponent.
Private Const m_def_ShowThousandsSeparator = False ' don't show thousands separator.
Private Const m_def_Theme = 5 ' 'rectangular medium' theme selected.
Private Const m_def_ThousandsGrouping = 3 ' thousands separator every three digits.
Private Const m_def_ThousandsSeparator = 0 ' comma thousands separator.
Private Const m_def_Value = "1234567890" ' displayed at first by default in design mode.
Private Const m_def_XOffset = 5 ' 5 pixels from control left border.
Private Const m_def_XOffsetExp = 355 ' 355 pixels from control left border.
Private Const m_def_YOffset = 5 ' display main digits 5 pixels down from top edge.
Private Const m_def_YOffsetExp = 5 ' display exponent 5 pixels from control top.
' property variables.
Private m_BackAngle As Single ' angle of background gradient.
Private m_BackColor1 As OLE_COLOR ' first color of background gradient.
Private m_BackColor2 As OLE_COLOR ' second color of background gradient.
Private m_BackMiddleOut As Boolean ' if True, gradient displays in middle-out fashion.
Private m_BorderColor As OLE_COLOR ' border color.
Private m_BorderWidth As Integer ' width, in pixels, of control border.
Private m_BurnInColor As OLE_COLOR ' color of simulated LCD digit 'burn-in'.
Private m_BurnInColorNeg As OLE_COLOR ' burn in color when value is negative.
Private m_CurveBottomLeft As Long ' amount of curve for bottom left corner.
Private m_CurveBottomRight As Long ' amount of curve for bottom right corner.
Private m_CurveTopLeft As Long ' amount of curve for top left corner.
Private m_CurveTopRight As Long ' amount of curve for top right corner.
Private m_DecimalSeparator As SeparatorOptions ' decimal separator character ("." in U.S.).
Private m_InterDigitGap As Long ' # of pixels separating each main value digit.
Private m_InterDigitGapExp As Long ' # of pixels separating each exponent digit.
Private m_InterSegmentGap As Long ' # of pixels separating main value LCD segments.
Private m_InterSegmentGapExp As Long ' # of pixels separating exponent LCD segments.
Private m_NumDigits As Long ' number of digits to display.
Private m_NumDigitsExp As Long ' number of exponent digits to display.
Private m_Picture As Picture ' bitmap to be displayed in lieu of gradient.
Private m_PictureMode As LCDPicModeOptions ' normal, stretched or tiled bitmap display options.
Private m_Seg3DAngle As Single '
Private m_Seg3DColor1 As OLE_COLOR ' first color of segment gradient.
Private m_Seg3DColor2 As OLE_COLOR ' second color of segment gradient.
Private m_Seg3DMiddleOut As Boolean ' mid-out mode for segment gradient.
Private m_SegmentFillStyle As SegmentFillStyleOptions ' solid or filament-style segment styles.
Private m_SegmentHeight As Long ' # of pixels in long dimension of main value segment.
Private m_SegmentHeightExp As Long ' # of pixels in short dimension of exponent segment.
Private m_SegmentLitColor As OLE_COLOR ' the color of displayed (non burn-in) segments.
Private m_SegmentLitColorNeg As OLE_COLOR ' lit segment color when value is negative.
Private m_SegmentStyle As SegmentStyleOptions ' hexagonal, trapezoidal, or rectangular segments.
Private m_SegmentStyleExp As SegmentStyleOptions ' hexagonal, trapezoidal, or rectangular segments.
Private m_SegmentWidth As Long ' # of pixels in short dimension of main value segment.
Private m_SegmentWidthExp As Long ' # of pixels in short dimension of exponent segment.
Private m_ShowBurnIn As Boolean ' if True, simulated digit 'burn-in' is displayed.
Private m_ShowExponent As Boolean ' if True, exponent portion of value is shown.
Private m_ShowThousandsSeparator As Boolean ' display thousands separator? boolean.
Private m_Theme As LCDThemeOptions ' user-definable and selectable display theme.
Private m_ThousandsGrouping As Long ' how many digits between thousands separators.
Private m_ThousandsSeparator As SeparatorOptions ' thousands separator character ("," in U.S.).
Private m_Value As String ' the value to be displayed.
Private m_XOffset As Long ' # of pixels from left to display main value.
Private m_XOffsetExp As Long ' # of pixels from left to display exponent.
Private m_YOffset As Long ' # of pixels from top to display main value.
Private m_YOffsetExp As Long ' # of pixels from top to display exponent.
' declares for virtual background bitmap.
Private VirtualDC_BG As Long ' handle of the created DC.
Private mMemoryBitmap_BG As Long ' handle of the created bitmap.
Private mOriginalBitmap_BG As Long ' used in destroying virtual DC.
' declares for virtual horizontal segment gradient bitmap.
Private VirtualDC_SegH As Long ' handle of the created DC.
Private mMemoryBitmap_SegH As Long ' handle of the created bitmap.
Private mOriginalBitmap_SegH As Long ' used in destroying virtual DC.
' declares for virtual horizontal segment gradient bitmap.
Private VirtualDC_SegV As Long ' handle of the created DC.
Private mMemoryBitmap_SegV As Long ' handle of the created bitmap.
Private mOriginalBitmap_SegV As Long ' used in destroying virtual DC.
' declares for virtual horizontal exponent segment gradient bitmap.
Private VirtualDC_SegHExp As Long ' handle of the created DC.
Private mMemoryBitmap_SegHExp As Long ' handle of the created bitmap.
Private mOriginalBitmap_SegHExp As Long ' used in destroying virtual DC.
' declares for virtual horizontal exponent segment gradient bitmap.
Private VirtualDC_SegVExp As Long ' handle of the created DC.
Private mMemoryBitmap_SegVExp As Long ' handle of the created bitmap.
Private mOriginalBitmap_SegVExp As Long ' used in destroying virtual DC.
' declares for virtual period (for colon) segment gradient bitmap.
Private VirtualDC_Period As Long ' handle of the created DC.
Private mMemoryBitmap_Period As Long ' handle of the created bitmap.
Private mOriginalBitmap_Period As Long ' used in destroying virtual DC.
Private ExponentFlag As Boolean
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Events >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Private Sub UserControl_Initialize()
'*************************************************************************
'* initializes variables at the start of the control's existence. *
'*************************************************************************
' initialize the display patterns for the LCD segments. Segment
' positions on the 7-segment LCD start with #1 on top, go clockwise.
' The center segment is #7. A "1" means the segment is lit.
DisplayPattern(0) = "1111110" ' zero.
DisplayPattern(1) = "0110000" ' one.
DisplayPattern(2) = "1101101" ' two.
DisplayPattern(3) = "1111001" ' three.
DisplayPattern(4) = "0110011" ' four.
DisplayPattern(5) = "1011011" ' five.
DisplayPattern(6) = "1011111" ' six.
DisplayPattern(7) = "1110000" ' seven.
DisplayPattern(8) = "1111111" ' eight.
DisplayPattern(9) = "1111011" ' nine.
DisplayPattern(10) = "0000000" ' for display of 'burn-in' unused digits.
DisplayPattern(11) = "0000001" ' minus sign.
DisplayPattern(12) = "1110111" ' Hex "A".
DisplayPattern(13) = "0011111" ' Hex "b". (have to do it lowercase so as not to confuse it with "8".)
DisplayPattern(14) = "1001110" ' Hex "C".
DisplayPattern(15) = "0111101" ' Hex "d". (have to do it lowercase so as not to confuse it with "0".)
DisplayPattern(16) = "1001111" ' Hex "E".
DisplayPattern(17) = "1000111" ' Hex "F".
' initialize the decimal separator location to 'no decimal separator'.
DecimalSeparatorPos.X = -1
' initialize the colon location to 'no colon'.
ColonPos.TopPoint.X = -1
End Sub
Private Sub UserControl_Resize()
'*************************************************************************
'* just used in design mode at the moment. *
'*************************************************************************
CalculateBackgroundGradient
RedrawControl
End Sub
Private Sub UserControl_Show()
'*************************************************************************
'* dimension the thousands flag to match size of .NumDigits property. *
'*************************************************************************
ReDim ThousandsFlag(0 To m_NumDigits - 1)
' for showing the control when placed on form in design mode.
If Not Ambient.UserMode Then
InitDigitalDisplay
RedrawControl
End If
End Sub
Private Sub UserControl_Terminate()
'*************************************************************************
'* destroys all active objects and regions prior to control termination. *
'*************************************************************************
Dim i As Long ' loop variable.
' delete digit segment region objects.
For i = 0 To 9
DeleteObject LCDSegment(i)
DeleteObject LCDSegmentExp(i)
Next i
' delete digit segment color brushes.
DeleteObject LCDLitColorBrush
DeleteObject LCDBurnInColorBrush
DeleteObject LCDLitColorBrushNeg
DeleteObject LCDBurnInColorBrushNeg
' destroy the virtual DC's used in background storage and segment gradients.
DestroyVirtualDC VirtualDC_BG, mMemoryBitmap_BG, mOriginalBitmap_BG
DestroyVirtualDC VirtualDC_SegH, mMemoryBitmap_SegH, mOriginalBitmap_SegH
DestroyVirtualDC VirtualDC_SegV, mMemoryBitmap_SegV, mOriginalBitmap_SegV
DestroyVirtualDC VirtualDC_SegHExp, mMemoryBitmap_SegHExp, mOriginalBitmap_SegHExp
DestroyVirtualDC VirtualDC_SegVExp, mMemoryBitmap_SegVExp, mOriginalBitmap_SegVExp
DestroyVirtualDC VirtualDC_Period, mMemoryBitmap_Period, mOriginalBitmap_Period
' destroy the pattern brush used in background bitmap tiling.
DestroyPattern
End Sub
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Graphics >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Private Sub DisplayValue(sValue As String, ByVal ForceDisplay As Boolean)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -