Private Declare Function LineTo Lib "gdi32.dll" _
(ByVal hdc As Long, ByVal nXEnd As Long, ByVal nYEnd As Long) As Long
Private Declare Function MoveToEx Lib "gdi32.dll" _
(ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpCoord As Long) As Long
Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long
Private Declare Function CreatePen Lib "gdi32.dll" _
(ByVal fnPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Const PS_SOLID = 0
Private Const PS_DASH = 1
Private Const PS_DOT = 2
Private Const PS_DASHDOT = 3
Private Const PS_DASHDOTDOT = 4
Private Const PS_NULL = 5
Private Const PS_INSIDEFRAME = 6
Private Declare Function DeleteObject Lib "gdi32.dll" _
(ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32.dll" _
(ByVal hdc As Long, ByVal hgdiobj As Long) As Long
Private Declare Function ReleaseDC Lib "user32.dll" _
(ByVal hWnd As Long, ByVal hdc As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const EM_SETMARGINS = &HD3
Private Const EC_LEFTMARGIN = &H1
Private Const EC_RIGHTMARGIN = &H2
Private Const EM_GETMARGINS = &HD4
Private Sub Form_Load()
Dim rc As Long, x As Long, y As Long
Call SendMessage(Me.Text1.hWnd, EM_SETMARGINS, EC_LEFTMARGIN Or EC_RIGHTMARGIN, MAKELONG(30, 40))
End Sub
Private Sub Text1_Change()
Call DrawLine
End Sub
Private Sub Text1_Click()
Call DrawLine
End Sub
Private Sub DrawLine()
Dim hdc As Long, hPen As Long, hOldPen As Long
Dim LeftMargin, RightMargin, rc As Long
rc = SendMessage(Me.Text1.hWnd, EM_GETMARGINS, 0, 0)
LeftMargin = LWORD(rc)
RightMargin = HWORD(rc)
hdc = GetDC(Me.Text1.hWnd)
hPen = CreatePen(PS_DOT, 1, vbRed)
hOldPen = SelectObject(hdc, hPen)
Call MoveToEx(hdc, LeftMargin, 1, 0)
Call LineTo(hdc, LeftMargin, Me.Text1.Height)
Call MoveToEx(hdc, Me.Text1.Width - RightMargin, 1, 0)
Call LineTo(hdc, Me.Text1.Width - RightMargin, Me.Text1.Height)
Call SelectObject(hdc, hPen)
Call ReleaseDC(Me.Text1.hWnd, hdc)
Call DeleteObject(hPen)
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Call DrawLine
End Sub
Private Function MAKELONG(ByVal LowWord As Integer, ByVal HighWord As Integer) As Long
MAKELONG = (LowWord And &HFFFF&) Or (HighWord * &H10000)
End Function
Private Function HWORD(ByVal LongValue As Long) As Integer
HWORD = (LongValue And &HFFFF0000) \ &H10000
End Function
Private Function LWORD(ByVal LongValue As Long) As Integer
If (LongValue And &HFFFF&) > &H7FFF Then
LWORD = (LongValue And &HFFFF&) - &H10000
Else
LWORD = LongValue And &HFFFF&
End If
End Function |