home *** CD-ROM | disk | FTP | other *** search
- VERSION 5.00
- Begin VB.UserControl RTE
- ClientHeight = 3390
- ClientLeft = 0
- ClientTop = 0
- ClientWidth = 4800
- ScaleHeight = 226
- ScaleMode = 3 'Pixel
- ScaleWidth = 320
- Attribute VB_Name = "RTE"
- Attribute VB_GlobalNameSpace = False
- Attribute VB_Creatable = True
- Attribute VB_PredeclaredId = False
- Attribute VB_Exposed = True
- Option Explicit
- Private Declare Function CreateWindowEx Lib "user32" _
- Alias "CreateWindowExA" (ByVal dwExStyle As Long, _
- ByVal lpClassName As String, _
- ByVal lpWindowName As String, _
- ByVal dwStyle As Long, _
- ByVal X As Long, ByVal Y As Long, _
- ByVal nWidth As Long, ByVal nHeight As Long, _
- ByVal hWndParent As Long, ByVal hMenu As Long, _
- ByVal hInstance As Long, lpParam As Any) As Long
- Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
- Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
- Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, wParam As Any, lParam As Any) As Long
- Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
- Private Declare Function MoveWindow Lib "user32" _
- (ByVal hWnd As Long, ByVal X As Long, ByVal Y As Long, _
- ByVal nWidth As Long, ByVal nHeight As Long, _
- ByVal bRepaint As Long) As Long
- Private Declare Function SetFocusX Lib "user32" Alias "SetFocus" (ByVal hWnd As Long) As Long
- Const WS_VISIBLE = &H10000000
- Const WS_CHILD = &H40000000
- Const WM_USER = &H400
- Const WM_SETTEXT = 12
- Const WM_GETTEXTLENGTH = &HE
- Const WS_TABSTOP = &H10000
- Const WS_BORDER = &H800000
- Const EM_GETTEXTEX = WM_USER + 94
- Const EM_GETSELTEXT = WM_USER + 62
- Const ES_MULTILINE = &H4&
- Const ES_NOHIDESEL = &H100&
- Const EN_SELCHANGE = &H702
- Const ENM_SELCHANGE = &H80000
- Const EM_SETBKGNDCOLOR = WM_USER + 67
- Const EM_EXSETSEL = WM_USER + 55
- Const ENM_MOUSEEVENTS = &H20000
- Const EM_SETEVENTMASK = WM_USER + 69
- Const ENM_KEYEVENTS = &H10000
- Const WS_VSCROLL = &H200000
- Const WS_HSCROLL = &H100000
- Const LOGPIXELSX = 88
- Const LOGPIXELSY = 90
- Const SCF_ALL = 4
- Const LF_FACESIZE = 32
- Private Type GETTEXTEX
- cb As Long
- flags As Long
- CodePage As Integer
- lpDefaultChar As Long
- lpUsedDefChar As Long
- End Type
- Private Type CHARRANGE
- cpMin As Long
- cpMax As Long
- End Type
- 'Property Variables:
- Private m_hWnd As Long
- Public Property Get hWnd() As Long
- hWnd = m_hWnd
- End Property
- Public Property Let hWnd(ByVal New_hWnd As Long)
- m_hWnd = New_hWnd
- PropertyChanged "hWnd"
- End Property
- Public Property Let Font(s As String)
- Module1.faceName = MyFormat(hWnd, SCF_ALL)
- End Property
- Public Property Get Font() As String
- Font = Module1.faceName
- End Property
- Public Property Let Text(s As String)
- Dim r As Long
- r = SendMessage(m_hWnd, WM_SETTEXT, 0, ByVal s)
- End Property
- Public Property Get Text() As String
- Dim gtxx As GETTEXTEX
- Dim r As Long, s As Long, BufSize As Long
- Dim buf As String
- r = SendMessage(m_hWnd, WM_GETTEXTLENGTH, 0, 0)
- BufSize = 2 * (r + 1) ' allow for possible NULL
- buf = String$(BufSize, 0)
- gtxx.cb = BufSize
- gtxx.flags = 0
- gtxx.CodePage = 1200
- gtxx.lpDefaultChar = 0
- gtxx.lpUsedDefChar = 0
- s = StrPtr(buf)
- r = SendMessage(m_hWnd, EM_GETTEXTEX, gtxx, ByVal s)
- Text = Left$(buf, r)
- End Property
- Public Function HighlightText(offset As Long, Size As Long) As Long
- Dim cr As CHARRANGE
- Dim r As Long
- cr.cpMin = offset
- cr.cpMax = offset + Size
- r = SendMessage(m_hWnd, EM_EXSETSEL, 0, cr)
- HighlightText = r
- End Function
- Public Sub HandleMouse()
- Dim r As Long
- r = SendMessage(m_hWnd, EM_SETEVENTMASK, 0, _
- ByVal (ENM_SELCHANGE Or ENM_MOUSEEVENTS))
- End Sub
- Private Sub UserControl_GotFocus()
- Dim r As Long
- ' note that we have to call the API SetFocus
- ' as SetFocusX to avoid a name class with the
- ' VB SetFocus
- r = SetFocusX(m_hWnd)
- End Sub
- Private Sub UserControl_Initialize()
- Dim X As Long, Y As Long, r As Long, i As Integer
- r = LoadLibrary("RICHED20.DLL")
- i = GetDeviceCaps(UserControl.hdc, LOGPIXELSX)
- X = Width / 1440 * i
- i = GetDeviceCaps(UserControl.hdc, LOGPIXELSY)
- Y = Height / 1440 * i
- Module1.yDpi = i
- m_hWnd = CreateWindowEx(0, "RichEdit20A", _
- Name, _
- WS_VISIBLE Or WS_BORDER Or WS_CHILD Or ES_MULTILINE Or ES_NOHIDESEL Or WS_VSCROLL, _
- 0, _
- 0, _
- X, _
- Y, _
- UserControl.hWnd, _
- 0, _
- 0, _
- 0)
- If m_hWnd = 0 Then
- MsgBox ("Can't create window!")
- End If
- Module1.rtehwnd = m_hWnd
- zap (UserControl.hWnd)
- End Sub
- Private Sub UserControl_Resize()
- Dim r As Boolean
- r = MoveWindow(m_hWnd, 0, 0, ScaleWidth, ScaleHeight, 1)
- End Sub
- Private Sub UserControl_Terminate()
- Dim r As Boolean
- unzap (UserControl.hWnd)
- r = DestroyWindow(m_hWnd)
- End Sub
-