www.pudn.com > Super_richBoxall.zip > mRichEdit.bas


Attribute VB_Name = "mRichEdit" 
Option Explicit 
 
' General 
Public Const LF_FACESIZE = 32 
 
'' /* 
' *  RICHEDIT.H 
' * 
' *  Purpose: 
' *      RICHEDIT v2.0 public definitions.  Note that there is additional 
' *      functionality available for v2.0 that is not in the original 
' *      Windows 95 release. 
' * 
' *  Copyright (c) 1985-1996, Microsoft Corporation 
' */ 
 
' #ifndef _RICHEDIT_ 
'public const _RICHEDIT_ 
 
' #ifdef _WIN32 
' #include  
' #elif !defined(RC_INVOKED) 
' #pragma pack(4) 
' #End If 
 
' #ifdef __cplusplus 
'extern "C" { 
' #endif ' /* __cplusplus */ 
 
' /* To mimic older RichEdit behavior, simply set _RICHEDIT_VER to the appropriate value */ 
' /*      Version 1.0     =&H0100  */ 
' /*      Version 2.0     =&H0200  */ 
' #ifndef _RICHEDIT_VER 
Public Const RICHEDIT_VER = &H210 
' #End If 
 
' /* 
' *  To make some structures which can be passed between 16 and 32 bit windows 
' *  almost compatible, padding is introduced to the 16 bit versions of the 
' *  structure. 
' */ 
' #ifdef _WIN32 
' #   define  _WPAD   /' #' #/ 
' #Else 
' #   define  _WPAD   WORD 
' #End If 
 
Public Const cchTextLimitDefault = 32767& 
 
' /* Richedit2.0 Window Class. */ 
 
Public Const RICHEDIT_CLASSA = "RichEdit20A" 
Public Const RICHEDIT_CLASS10A = "RICHEDIT"           '// Richedit 1.0 
 
' #ifndef MACPORT 
'public Const RICHEDIT_CLASSW = "RichEdit20W" 
' #else   ' /*----------------------MACPORT */ 
'public const RICHEDIT_CLASSW     =TEXT("RichEdit20W") ' /* MACPORT change */ 
' #endif ' /* MACPORT  */ 
 
' #if (_RICHEDIT_VER >= =&H0200 ) 
' #ifdef UNICODE 
'public const RICHEDIT_CLASS      RICHEDIT_CLASSW 
' #Else 
Public Const RICHEDIT_CLASS = RICHEDIT_CLASSA 
' #endif ' /* UNICODE */ 
' #Else 
'public const RICHEDIT_CLASS      RICHEDIT_CLASS10A 
' #endif ' /* _RICHEDIT_VER >= =&H0200 */ 
 
' /* RichEdit messages */ 
 
' #ifndef WM_CONTEXTMENU 
Public Const WM_CONTEXTMENU = &H7B& 
' #End If 
 
' #ifndef WM_PRINTCLIENT 
Public Const WM_PRINTCLIENT = &H318& 
' #End If 
 
' #ifndef EM_GETLIMITTEXT 
'public Const EM_GETLIMITTEXT = (WM_USER + 37) 
' #End If 
 
' #ifndef EM_POSFROMCHAR 
'public Const EM_POSFROMCHAR = (WM_USER + 38) 
'public Const EM_CHARFROMPOS = (WM_USER + 39) 
' #End If 
 
' #ifndef EM_SCROLLCARET 
'public Const EM_SCROLLCARET = (WM_USER + 49) 
' #End If 
Public Const EM_CANPASTE = (WM_USER + 50) 
Public Const EM_DISPLAYBAND = (WM_USER + 51) 
Public Const EM_EXGETSEL = (WM_USER + 52) 
Public Const EM_EXLIMITTEXT = (WM_USER + 53) 
Public Const EM_EXLINEFROMCHAR = (WM_USER + 54) 
Public Const EM_EXSETSEL = (WM_USER + 55) 
Public Const EM_FINDTEXT = (WM_USER + 56) 
Public Const EM_FORMATRANGE = (WM_USER + 57) 
Public Const EM_GETCHARFORMAT = (WM_USER + 58) 
Public Const EM_GETEVENTMASK = (WM_USER + 59) 
Public Const EM_GETOLEINTERFACE = (WM_USER + 60) 
Public Const EM_GETPARAFORMAT = (WM_USER + 61) 
Public Const EM_GETSELTEXT = (WM_USER + 62) 
Public Const EM_HIDESELECTION = (WM_USER + 63) 
Public Const EM_PASTESPECIAL = (WM_USER + 64) 
Public Const EM_REQUESTRESIZE = (WM_USER + 65) 
Public Const EM_SELECTIONTYPE = (WM_USER + 66) 
Public Const EM_SETBKGNDCOLOR = (WM_USER + 67) 
Public Const EM_SETCHARFORMAT = (WM_USER + 68) 
Public Const EM_SETEVENTMASK = (WM_USER + 69) 
Public Const EM_SETOLECALLBACK = (WM_USER + 70) 
Public Const EM_SETPARAFORMAT = (WM_USER + 71) 
Public Const EM_SETTARGETDEVICE = (WM_USER + 72) 
Public Const EM_STREAMIN = (WM_USER + 73) 
Public Const EM_STREAMOUT = (WM_USER + 74) 
Public Const EM_GETTEXTRANGE = (WM_USER + 75) 
Public Const EM_FINDWORDBREAK = (WM_USER + 76) 
Public Const EM_SETOPTIONS = (WM_USER + 77) 
Public Const EM_GETOPTIONS = (WM_USER + 78) 
Public Const EM_FINDTEXTEX = (WM_USER + 79) 
' #ifdef _WIN32 
Public Const EM_GETWORDBREAKPROCEX = (WM_USER + 80) 
Public Const EM_SETWORDBREAKPROCEX = (WM_USER + 81) 
' #End If 
 
' /* Richedit v2.0 messages */ 
Public Const EM_SETUNDOLIMIT = (WM_USER + 82) 
Public Const EM_REDO = (WM_USER + 84) 
Public Const EM_CANREDO = (WM_USER + 85) 
Public Const EM_GETUNDONAME = (WM_USER + 86) 
Public Const EM_GETREDONAME = (WM_USER + 87) 
Public Const EM_STOPGROUPTYPING = (WM_USER + 88) 
 
Public Const EM_SETTEXTMODE = (WM_USER + 89) 
Public Const EM_GETTEXTMODE = (WM_USER + 90) 
 
Public Const EM_FINDTEXTW = (WM_USER + 123) 
Public Const EM_FINDTEXTEXW = (WM_USER + 124) 
 
' /* enum for use with EM_GET/SETTEXTMODE */ 
Public Enum TextMode 
    TM_PLAINTEXT = 1 
    TM_RICHTEXT = 2                ' /* default behavior */ 
    TM_SINGLELEVELUNDO = 4 
    TM_MULTILEVELUNDO = 8          ' /* default behavior */ 
    TM_SINGLECODEPAGE = 16 
    TM_MULTICODEPAGE = 32           ' /* default behavior */ 
End Enum 
 
Public Const EM_AUTOURLDETECT = (WM_USER + 91) 
Public Const EM_GETAUTOURLDETECT = (WM_USER + 92) 
Public Const EM_SETPALETTE = (WM_USER + 93) 
Public Const EM_GETTEXTEX = (WM_USER + 94) 
Public Const EM_GETTEXTLENGTHEX = (WM_USER + 95) 
 
' /* Far East specific messages */ 
Public Const EM_SETPUNCTUATION = (WM_USER + 100) 
Public Const EM_GETPUNCTUATION = (WM_USER + 101) 
Public Const EM_SETWORDWRAPMODE = (WM_USER + 102) 
Public Const EM_GETWORDWRAPMODE = (WM_USER + 103) 
Public Const EM_SETIMECOLOR = (WM_USER + 104) 
Public Const EM_GETIMECOLOR = (WM_USER + 105) 
Public Const EM_SETIMEOPTIONS = (WM_USER + 106) 
Public Const EM_GETIMEOPTIONS = (WM_USER + 107) 
Public Const EM_CONVPOSITION = (WM_USER + 108) 
 
Public Const EM_SETLANGOPTIONS = (WM_USER + 120) 
Public Const EM_GETLANGOPTIONS = (WM_USER + 121) 
Public Const EM_GETIMECOMPMODE = (WM_USER + 122) 
 
 
' /* BiDi specific messages */ 
Public Const EM_SETBIDIOPTIONS = (WM_USER + 200) 
Public Const EM_GETBIDIOPTIONS = (WM_USER + 201) 
 
' /* Options for EM_SETLANGOPTIONS and EM_GETLANGOPTIONS */ 
Public Const IMF_AUTOKEYBOARD = &H1 
Public Const IMF_AUTOFONT = &H2 
Public Const IMF_IMECANCELCOMPLETE = &H4      '// high completes the comp string when aborting, low cancels. 
Public Const IMF_IMEALWAYSSENDNOTIFY = &H8 
 
' /* Values for EM_GETIMECOMPMODE */ 
Public Const ICM_NOTOPEN = &H0 
Public Const ICM_LEVEL3 = &H1 
Public Const ICM_LEVEL2 = &H2 
Public Const ICM_LEVEL2_5 = &H3 
Public Const ICM_LEVEL2_SUI = &H4 
 
' /* New notifications */ 
 
Public Const EN_MSGFILTER = &H700& 
Public Const EN_REQUESTRESIZE = &H701& 
Public Const EN_SELCHANGE = &H702& 
Public Const EN_DROPFILES = &H703& 
Public Const EN_PROTECTED = &H704& 
Public Const EN_CORRECTTEXT = &H705&                   ' /* PenWin specific */ 
Public Const EN_STOPNOUNDO = &H706& 
Public Const EN_IMECHANGE = &H707&                     ' /* Far East specific */ 
Public Const EN_SAVECLIPBOARD = &H708& 
Public Const EN_OLEOPFAILED = &H709& 
Public Const EN_OBJECTPOSITIONS = &H70A& 
Public Const EN_LINK = &H70B& 
Public Const EN_DRAGDROPDONE = &H70C& 
 
' /* BiDi specific notifications */ 
 
Public Const EN_ALIGN_LTR = &H710& 
Public Const EN_ALIGN_RTL = &H711& 
 
' /* Event notification masks */ 
 
Public Const ENM_NONE = &H0 
Public Const ENM_CHANGE = &H1 
Public Const ENM_UPDATE = &H2 
Public Const ENM_SCROLL = &H4 
Public Const ENM_KEYEVENTS = &H10000 
Public Const ENM_MOUSEEVENTS = &H20000 
Public Const ENM_REQUESTRESIZE = &H40000 
Public Const ENM_SELCHANGE = &H80000 
Public Const ENM_DROPFILES = &H100000 
Public Const ENM_PROTECTED = &H200000 
Public Const ENM_CORRECTTEXT = &H400000               ' /* PenWin specific */ 
Public Const ENM_SCROLLEVENTS = &H8 
Public Const ENM_DRAGDROPDONE = &H10 
 
' /* Far East specific notification mask */ 
Public Const ENM_IMECHANGE = &H800000                 ' /* unused by RE2.0 */ 
Public Const ENM_LANGCHANGE = &H1000000 
Public Const ENM_OBJECTPOSITIONS = &H2000000 
Public Const ENM_LINK = &H4000000 
 
' /* New edit control styles */ 
 
Public Const ES_SAVESEL = &H8000& 
Public Const ES_SUNKEN = &H4000& 
Public Const ES_DISABLENOSCROLL = &H2000& 
' /* same as WS_MAXIMIZE, but that doesn't make sense so we re-use the value */ 
Public Const ES_SELECTIONBAR = &H1000000 
' /* same as ES_UPPERCASE, but re-used to completely disable OLE drag'n'drop */ 
Public Const ES_NOOLEDRAGDROP = &H8 
 
' /* New edit control extended style */ 
' #ifdef  _WIN32 
Public Const ES_EX_NOCALLOLEINIT = &H1000000 
' #End If 
 
' /* These flags are used in FE Windows */ 
Public Const ES_VERTICAL = &H400000 
Public Const ES_NOIME = &H80000 
Public Const ES_SELFIME = &H40000 
 
' /* new word break function actions */ 
Public Const WB_CLASSIFY = 3& 
Public Const WB_MOVEWORDLEFT = 4& 
Public Const WB_MOVEWORDRIGHT = 5& 
Public Const WB_LEFTBREAK = 6& 
Public Const WB_RIGHTBREAK = 7& 
 
' /* Far East specific flags */ 
Public Const WB_MOVEWORDPREV = 4& 
Public Const WB_MOVEWORDNEXT = 5& 
Public Const WB_PREVBREAK = 6& 
Public Const WB_NEXTBREAK = 7& 
 
Public Const PC_FOLLOWING = 1& 
Public Const PC_LEADING = 2& 
Public Const PC_OVERFLOW = 3& 
Public Const PC_DELIMITER = 4& 
Public Const WBF_WORDWRAP = &H10& 
Public Const WBF_WORDBREAK = &H20& 
Public Const WBF_OVERFLOW = &H40& 
Public Const WBF_LEVEL1 = &H80& 
Public Const WBF_LEVEL2 = &H100& 
Public Const WBF_CUSTOM = &H200& 
 
' /* Far East specific flags */ 
Public Const IMF_FORCENONE = &H1 
Public Const IMF_FORCEENABLE = &H2 
Public Const IMF_FORCEDISABLE = &H4 
Public Const IMF_CLOSESTATUSWINDOW = &H8 
Public Const IMF_VERTICAL = &H20 
Public Const IMF_FORCEACTIVE = &H40 
Public Const IMF_FORCEINACTIVE = &H80 
Public Const IMF_FORCEREMEMBER = &H100 
Public Const IMF_MULTIPLEEDIT = &H400 
 
' /* Word break flags (used with WB_CLASSIFY) */ 
Public Const WBF_CLASS = &HF          '((BYTE) =&H0F) 
Public Const WBF_ISWHITE = &H10       '((BYTE) =&H10) 
Public Const WBF_BREAKLINE = &H20     '((BYTE) =&H20) 
Public Const WBF_BREAKAFTER = &H40    '((BYTE) =&H40) 
 
 
' /* new data types */ 
 
' #ifdef _WIN32 
' /* extended edit word break proc (character set aware) */ 
'typedef LONG (*EDITWORDBREAKPROCEX)(char *pchText, LONG cchText, BYTE bCharSet, INT action); 
' #End If 
 
' /* all character format measurements are in twips */ 
' Corrected... 
Public Type CHARFORMAT 
    cbSize As Integer '2 
    wPad1 As Integer  '4 
    dwMask As Long    '8 
    dwEffects As Long '12 
    yHeight As Long   '16 
    yOffset As Long   '20 
    crTextColor As Long '24 
    bCharSet As Byte    '25 
    bPitchAndFamily As Byte '26 
    szFaceName(0 To LF_FACESIZE - 1) As Byte ' 58 
    wPad2 As Integer ' 60 
End Type 
 
' #if (_RICHEDIT_VER >= =&H0200) 
' #ifdef UNICODE 
'public const CHARFORMAT CHARFORMATW 
' #Else 
'public const CHARFORMAT CHARFORMATA 
' #endif ' /* UNICODE */ 
' #Else 
'public const CHARFORMAT CHARFORMATA 
' #endif ' /* _RICHEDIT_VER >= =&H0200 */ 
 
' /* CHARFORMAT masks */ 
Public Const CFM_BOLD = &H1 
Public Const CFM_ITALIC = &H2 
Public Const CFM_UNDERLINE = &H4 
Public Const CFM_STRIKEOUT = &H8 
Public Const CFM_PROTECTED = &H10 
Public Const CFM_LINK = &H20&                  ' /* Exchange hyperlink extension */ 
Public Const CFM_SIZE = &H80000000 
Public Const CFM_COLOR = &H40000000 
Public Const CFM_FACE = &H20000000 
Public Const CFM_OFFSET = &H10000000 
Public Const CFM_CHARSET = &H8000000 
 
' /* CHARFORMAT effects */ 
Public Const CFE_BOLD = &H1& 
Public Const CFE_ITALIC = &H2& 
Public Const CFE_UNDERLINE = &H4& 
Public Const CFE_STRIKEOUT = &H8& 
Public Const CFE_PROTECTED = &H10& 
Public Const CFE_LINK = &H20& 
Public Const CFE_AUTOCOLOR = &H40000000       ' /* NOTE: this corresponds to */ 
                                        ' /* CFM_COLOR, which controls it */ 
Public Const yHeightCharPtsMost = 1638& 
 
' /* EM_SETCHARFORMAT wParam masks */ 
Public Const SCF_SELECTION = &H1& 
Public Const SCF_WORD = &H2& 
Public Const SCF_DEFAULT = &H0&            '// set the default charformat or paraformat 
Public Const SCF_ALL = &H4&                '// not valid with SCF_SELECTION or SCF_WORD 
Public Const SCF_USEUIRULES = &H8&         '// modifier for SCF_SELECTION; says that 
                                   ' // the format came from a toolbar, etc. and 
                                   ' // therefore UI formatting rules should be 
                                   ' // used instead of strictly formatting the 
                                   ' // selection. 
 
 
Public Type CHARRANGE 
    cpMin As Long 
    cpMax As Long 
End Type 
 
Public Type TEXTRANGE 
    chrg As CHARRANGE 
    lpstrText As Long    ' /* allocated by caller, zero terminated by RichEdit */ 
End Type 
 
'typedef struct _textrangew 
'{ 
'    CHARRANGE chrg; 
'    LPWSTR lpstrText;   ' /* allocated by caller, zero terminated by RichEdit */ 
'} TEXTRANGEW; 
 
' #if (_RICHEDIT_VER >= =&H0200) 
' #ifdef UNICODE 
'public const TEXTRANGE   TEXTRANGEW 
' #Else 
'public const TEXTRANGE   TEXTRANGEA 
' #endif ' /* UNICODE */ 
' #Else 
'public const TEXTRANGE   TEXTRANGEA 
' #endif ' /* _RICHEDIT_VER >= =&H0200 */ 
 
 
'typedef DWORD (CALLBACK *EDITSTREAMCALLBACK)(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb); 
 
Public Type EDITSTREAM 
    dwCookie As Long     ' /* user value passed to callback as first parameter */ 
    dwError As Long      ' /* last error */ 
    pfnCallback As Long  'EDITSTREAMCALLBACK 
End Type 
 
' /* stream formats */ 
 
'Public Const SF_TEXT = &H1 
'Public Const SF_RTF = &H2 
Public Const SF_RTFNOOBJS = &H3           ' /* outbound only */ 
Public Const SF_TEXTIZED = &H4            ' /* outbound only */ 
Public Const SF_UNICODE = &H10            ' /* Unicode file of some kind */ 
 
' /* Flag telling stream operations to operate on the selection only */ 
' /* EM_STREAMIN will replace the current selection */ 
' /* EM_STREAMOUT will stream out the current selection */ 
Public Const SFF_SELECTION = &H8000& 
 
' /* Flag telling stream operations to operate on the common RTF keyword only */ 
' /* EM_STREAMIN will accept the only common RTF keyword */ 
' /* EM_STREAMOUT will stream out the only common RTF keyword */ 
Public Const SFF_PLAINRTF = &H4000& 
 
Public Type FindText 
    chrg As CHARRANGE 
    lpstrText As Long 
End Type 
 
'typedef struct _findtextw 
'{ 
'    CHARRANGE chrg; 
'    LPWSTR lpstrText; 
'} FINDTEXTW;' 
 
' #if (_RICHEDIT_VER >= =&H0200) 
' #ifdef UNICODE 
'public const FINDTEXT    FINDTEXTW 
' #Else 
'public const FINDTEXT    FINDTEXTA 
' #endif ' /* UNICODE */ 
' #Else 
'public const FINDTEXT    FINDTEXTA 
' #endif ' /* _RICHEDIT_VER >= =&H0200 */ 
 
Public Type FINDTEXTEX_A 
    chrg As CHARRANGE 
    lpstrText As Long 
    chrgText As CHARRANGE 
End Type 
 
Public Type FINDTEXTEX_W 
    chrg As CHARRANGE 
    lpstrText As Long 
    chrgText As CHARRANGE 
End Type 
 
'typedef struct _findtextexw 
'{ 
'    CHARRANGE chrg; 
'    LPWSTR lpstrText; 
'    CHARRANGE chrgText; 
'} FINDTEXTEXW;' 
 
' #if (_RICHEDIT_VER >= =&H0200) 
' #ifdef UNICODE 
'public const FINDTEXTEX  FINDTEXTEXW 
' #Else 
'public const FINDTEXTEX  FINDTEXTEXA 
' #endif ' /* UNICODE */ 
' #Else 
'public const FINDTEXTEX  FINDTEXTEXA 
' #endif ' /* _RICHEDIT_VER >= =&H0200 */ 
 
 
Public Type FORMATRANGE 
    hdc As Long 
    hdcTarget As Long 
    rc As RECT 
    rcPage As RECT 
    chrg As CHARRANGE 
End Type 
 
' /* all paragraph measurements are in twips */ 
 
Public Const MAX_TAB_STOPS = 32& 
Public Const lDefaultTab = 720& 
 
Public Type PARAFORMAT 
    cbSize As Integer 
    wPad1 As Integer 
    dwMask As Long 
    wNumbering As Integer 
    wEffects As Integer ' Note reserved in RichEdit 32 
    dxStartIndent As Long 
    dxRightIndent As Long 
    dxOffset As Long 
    wAlignment As Integer 
    cTabCount As Integer 
    lTabStops(0 To MAX_TAB_STOPS - 1) As Long 
End Type 
 
' /* PARAFORMAT mask values */ 
Public Const PFM_STARTINDENT = &H1& 
Public Const PFM_RIGHTINDENT = &H2& 
Public Const PFM_OFFSET = &H4& 
Public Const PFM_ALIGNMENT = &H8& 
Public Const PFM_TABSTOPS = &H10& 
Public Const PFM_NUMBERING = &H20& 
Public Const PFM_OFFSETINDENT = &H80000000 
 
' /* PARAFORMAT numbering options */ 
Public Const PFN_BULLET = &H1& 
 
' /* PARAFORMAT alignment options */ 
Public Const PFA_LEFT = &H1& 
Public Const PFA_RIGHT = &H2& 
Public Const PFA_CENTER = &H3& 
 
' /* CHARFORMAT2 and PARAFORMAT2 structures */ 
 
' #ifdef __cplusplus 
 
'struct CHARFORMAT2W : _charformatw 
'{ 
'    WORD        wWeight;            ' /* Font weight (LOGFONT value)      */ 
'    SHORT       sSpacing;           ' /* Amount to space between letters  */ 
'    COLORREF    crBackColor;        ' /* Background color                 */ 
'    LCID        lcid;               ' /* Locale ID                        */ 
'    DWORD       dwReserved;         ' /* Reserved. Must be 0              */ 
'    SHORT       sStyle;             ' /* Style handle                     */ 
'    WORD        wKerning;           ' /* Twip size above which to kern char pair*/ 
'    BYTE        bUnderlineType;     ' /* Underline type                   */ 
'    BYTE        bAnimation;         ' /* Animated text like marching ants */ 
'    BYTE        bRevAuthor;         ' /* Revision author index            */ 
'}; 
 
'struct CHARFORMAT2A : _charformat 
'{ 
'    WORD        wWeight;            ' /* Font weight (LOGFONT value)      */ 
'    SHORT       sSpacing;           ' /* Amount to space between letters  */ 
'    COLORREF    crBackColor;        ' /* Background color                 */ 
'    LCID        lcid;               ' /* Locale ID                        */ 
'    DWORD       dwReserved;         ' /* Reserved. Must be 0              */ 
'    SHORT       sStyle;             ' /* Style handle                     */ 
'    WORD        wKerning;           ' /* Twip size above which to kern char pair*/ 
'    BYTE        bUnderlineType;     ' /* Underline type                   */ 
'    BYTE        bAnimation;         ' /* Animated text like marching ants */ 
'    BYTE        bRevAuthor;         ' /* Revision author index            */ 
'}; 
 
' #else   ' /* regular C-style  */ 
 
'type C 
'{ 
'    UINT        cbSize; 
''    _WPAD       _wPad1; 
 '   DWORD       dwMask; 
 '   DWORD       dwEffects; 
 '   LONG        yHeight; 
 ''   LONG        yOffset;            ' /* > 0 for superscript, < 0 for subscript */ 
'    COLORREF    crTextColor; 
'    BYTE        bCharSet; 
'    BYTE        bPitchAndFamily; 
'    WCHAR       szFaceName[LF_FACESIZE]; 
'    _WPAD       _wPad2; 
'    WORD        wWeight;            ' /* Font weight (LOGFONT value)      */ 
'    SHORT       sSpacing;           ' /* Amount to space between letters  */ 
'    COLORREF    crBackColor;        ' /* Background color                 */ 
'    LCID        lcid;               ' /* Locale ID                        */ 
'    DWORD       dwReserved;         ' /* Reserved. Must be 0              */ 
'    SHORT       sStyle;             ' /* Style handle                     */ 
'    WORD        wKerning;           ' /* Twip size above which to kern char pair*/ 
'    BYTE        bUnderlineType;     ' /* Underline type                   */ 
'    BYTE        bAnimation;         ' /* Animated text like marching ants */ 
'    BYTE        bRevAuthor;         ' /* Revision author index            */ 
'    BYTE        bReserved1; 
'} CHARFORMAT2W; 
 
Public Type CHARFORMAT2 
    cbSize As Integer '2 
    wPad1 As Integer  '4 
    dwMask As Long    '8 
    dwEffects As Long '12 
    yHeight As Long   '16 
    yOffset As Long   '20 
    crTextColor As Long '24 
    bCharSet As Byte    '25 
    bPitchAndFamily As Byte '26 
    szFaceName(0 To LF_FACESIZE - 1) As Byte ' 58 
    wPad2 As Integer ' 60 
     
    ' Additional stuff supported by RICHEDIT20 
    wWeight As Integer            ' /* Font weight (LOGFONT value)      */ 
    sSpacing As Integer           ' /* Amount to space between letters  */ 
    crBackColor As Long        ' /* Background color                 */ 
    lLCID As Long               ' /* Locale ID                        */ 
    dwReserved As Long         ' /* Reserved. Must be 0              */ 
    sStyle As Integer            ' /* Style handle                     */ 
    wKerning As Integer            ' /* Twip size above which to kern char pair*/ 
    bUnderlineType As Byte     ' /* Underline type                   */ 
    bAnimation As Byte         ' /* Animated text like marching ants */ 
    bRevAuthor As Byte         ' /* Revision author index            */ 
    bReserved1 As Byte 
End Type 
 
' #endif ' /* C++ */ 
 
' #ifdef UNICODE 
'public const CHARFORMAT2 CHARFORMAT2W 
' #Else 
'public const CHARFORMAT2 CHARFORMAT2A 
' #End If 
 
'public Const CHARFORMATDELTA = (Len(CHARFORMAT2) - Len(CHARFORMAT)) 
 
 
' /* CHARFORMAT and PARAFORMAT "ALL" masks 
'   CFM_COLOR mirrors CFE_AUTOCOLOR, a little hack to easily deal with autocolor*/ 
 
Public Const CFM_EFFECTS = (CFM_BOLD Or CFM_ITALIC Or CFM_UNDERLINE Or CFM_COLOR Or _ 
                     CFM_STRIKEOUT Or CFE_PROTECTED Or CFM_LINK) 
Public Const CFM_ALL = (CFM_EFFECTS Or CFM_SIZE Or CFM_FACE Or CFM_OFFSET Or CFM_CHARSET) 
 
' /* New masks and effects -- a parenthesized asterisk indicates that 
'   the data is stored by RichEdit2.0, but not displayed */ 
 
Public Const CFM_SMALLCAPS = &H40&                 ' /* (*)  */ 
Public Const CFM_ALLCAPS = &H80&                   ' /* (*)  */ 
Public Const CFM_HIDDEN = &H100&                   ' /* (*)  */ 
Public Const CFM_OUTLINE = &H200&                  ' /* (*)  */ 
Public Const CFM_SHADOW = &H400&                   ' /* (*)  */ 
Public Const CFM_EMBOSS = &H800&                   ' /* (*)  */ 
Public Const CFM_IMPRINT = &H1000&                 ' /* (*)  */ 
Public Const CFM_DISABLED = &H2000& 
Public Const CFM_REVISED = &H4000& 
 
Public Const CFM_BACKCOLOR = &H4000000 
Public Const CFM_LCID = &H2000000 
Public Const CFM_UNDERLINETYPE = &H800000         ' /* (*)  */ 
Public Const CFM_WEIGHT = &H400000 
Public Const CFM_SPACING = &H200000               ' /* (*)  */ 
Public Const CFM_KERNING = &H100000               ' /* (*)  */ 
Public Const CFM_STYLE = &H80000                  ' /* (*)  */ 
Public Const CFM_ANIMATION = &H40000              ' /* (*)  */ 
Public Const CFM_REVAUTHOR = &H8000& 
 
Public Const CFE_SUBSCRIPT = &H10000               ' /* Superscript and subscript are */ 
Public Const CFE_SUPERSCRIPT = &H20000            ' /*  mutually exclusive           */ 
 
Public Const CFM_SUBSCRIPT = CFE_SUBSCRIPT Or CFE_SUPERSCRIPT 
Public Const CFM_SUPERSCRIPT = CFM_SUBSCRIPT 
 
Public Const CFM_EFFECTS2 = (CFM_EFFECTS Or CFM_DISABLED Or CFM_SMALLCAPS Or CFM_ALLCAPS _ 
                    Or CFM_HIDDEN Or CFM_OUTLINE Or CFM_SHADOW Or CFM_EMBOSS _ 
                    Or CFM_IMPRINT Or CFM_DISABLED Or CFM_REVISED _ 
                    Or CFM_SUBSCRIPT Or CFM_SUPERSCRIPT Or CFM_BACKCOLOR) 
 
Public Const CFM_ALL2 = (CFM_ALL Or CFM_EFFECTS2 Or CFM_BACKCOLOR Or CFM_LCID _ 
                    Or CFM_UNDERLINETYPE Or CFM_WEIGHT Or CFM_REVAUTHOR _ 
                    Or CFM_SPACING Or CFM_KERNING Or CFM_STYLE Or CFM_ANIMATION) 
 
Public Const CFE_SMALLCAPS = CFM_SMALLCAPS 
Public Const CFE_ALLCAPS = CFM_ALLCAPS 
Public Const CFE_HIDDEN = CFM_HIDDEN 
Public Const CFE_OUTLINE = CFM_OUTLINE 
Public Const CFE_SHADOW = CFM_SHADOW 
Public Const CFE_EMBOSS = CFM_EMBOSS 
Public Const CFE_IMPRINT = CFM_IMPRINT 
Public Const CFE_DISABLED = CFM_DISABLED 
Public Const CFE_REVISED = CFM_REVISED 
 
' /* NOTE: CFE_AUTOCOLOR and CFE_AUTOBACKCOLOR correspond to CFM_COLOR and 
'   CFM_BACKCOLOR, respectively, which control them */ 
Public Const CFE_AUTOBACKCOLOR = CFM_BACKCOLOR 
 
' /* Underline types */ 
Public Const CFU_CF1UNDERLINE = &HFF&      ' /* map charformat's bit underline to CF2.*/ 
Public Const CFU_INVERT = &HFE&            ' /* For IME composition fake a selection.*/ 
Public Const CFU_UNDERLINEDOTTED = &H4&    ' /* (*) displayed as ordinary underline  */ 
Public Const CFU_UNDERLINEDOUBLE = &H3&    ' /* (*) displayed as ordinary underline  */ 
Public Const CFU_UNDERLINEWORD = &H2&      ' /* (*) displayed as ordinary underline  */ 
Public Const CFU_UNDERLINE = &H1& 
Public Const CFU_UNDERLINENONE = 0& 
 
' #ifdef __cplusplus 
'struct PARAFORMAT2 : _paraformat 
'{ 
'    LONG    dySpaceBefore;          ' /* Vertical spacing before para         */ 
'    LONG    dySpaceAfter;           ' /* Vertical spacing after para          */ 
'    LONG    dyLineSpacing;          ' /* Line spacing depending on Rule       */ 
'    SHORT   sStyle;                 ' /* Style handle                         */ 
'    BYTE    bLineSpacingRule;       ' /* Rule for line spacing (see tom.doc)  */ 
'    BYTE    bCRC;                   ' /* Reserved for CRC for rapid searching */ 
'    WORD    wShadingWeight;         ' /* Shading in hundredths of a per cent  */ 
'    WORD    wShadingStyle;          ' /* Nibble 0: style, 1: cfpat, 2: cbpat  */ 
'    WORD    wNumberingStart;        ' /* Starting value for numbering         */ 
'    WORD    wNumberingStyle;        ' /* Alignment, roman/arabic, (), ), ., etc.*/ 
'    WORD    wNumberingTab;          ' /* Space bet FirstIndent and 1st-line text*/ 
'    WORD    wBorderSpace;           ' /* Space between border and text (twips)*/ 
'    WORD    wBorderWidth;           ' /* Border pen width (twips)             */ 
'    WORD    wBorders;               ' /* Byte 0: bits specify which borders   */ 
'                                    ' /* Nibble 2: border style, 3: color index*/ 
'}; 
 
' #else   ' /* regular C-style  */ 
 
Public Type PARAFORMAT2 
    cbSize As Integer 
    wPad1 As Integer 
    dwMask As Long 
    wNumbering As Integer 
    wReserved As Integer 
    dxStartIndent As Long 
    dxRightIndent As Long 
    dxOffset As Long 
    wAlignment As Integer 
    cTabCount As Integer 
    'rgxTabs(0 To MAX_TAB_STOPS - 1) As Byte 
    'lPtrRgxTabs As Long 
    lTabStops(0 To MAX_TAB_STOPS - 1) As Long 
    dySpaceBefore As Long          ' /* Vertical spacing before para         */ 
    dySpaceAfter As Long           ' /* Vertical spacing after para          */ 
    dyLineSpacing As Long          ' /* Line spacing depending on Rule       */ 
    sStyle As Integer                  ' /* Style handle                         */ 
    bLineSpacingRule As Byte       ' /* Rule for line spacing (see tom.doc)  */ 
    bCRC As Byte                   ' /* Reserved for CRC for rapid searching * 
    wShadingWeight As Integer          ' /* Shading in hundredths of a per cent  */ 
    wShadingStyle As Integer           ' /* Nibble 0: style, 1: cfpat, 2: cbpat  */ 
    wNumberingStart As Integer         ' /* Starting value for numbering         */ 
    wNumberingStyle As Integer        ' /* Alignment, roman/arabic, (), ), ., etc.*/ 
    wNumberingTab As Integer           ' /* Space bet 1st indent and 1st-line text*/ 
    wBorderSpace As Integer            ' /* Space between border and text (twips)*/ 
    wBorderWidth As Integer           ' /* Border pen width (twips)             */ 
    wBorders As Integer                ' /* Byte 0: bits specify which borders   */ 
                                    ' /* Nibble 2: border style, 3: color index*/ 
End Type 
 
' #endif ' /* C++   */ 
 
' /* PARAFORMAT 2.0 masks and effects */ 
 
Public Const PFM_SPACEBEFORE = &H40& 
Public Const PFM_SPACEAFTER = &H80& 
Public Const PFM_LINESPACING = &H100& 
Public Const PFM_STYLE = &H400& 
Public Const PFM_BORDER = &H800&                   ' /* (*)  */ 
Public Const PFM_SHADING = &H1000&                 ' /* (*)  */ 
Public Const PFM_NUMBERINGSTYLE = &H2000&          ' /* (*)  */ 
Public Const PFM_NUMBERINGTAB = &H4000&            ' /* (*)  */ 
Public Const PFM_NUMBERINGSTART = &H8000&         ' /* (*)  */ 
 
Public Const PFM_DIR = &H10000 
Public Const PFM_RTLPARA = &H10000                ' /* (Version 1.0 flag) */ 
Public Const PFM_KEEP = &H20000                   ' /* (*)  */ 
Public Const PFM_KEEPNEXT = &H40000               ' /* (*)  */ 
Public Const PFM_PAGEBREAKBEFORE = &H80000        ' /* (*)  */ 
Public Const PFM_NOLINENUMBER = &H100000          ' /* (*)  */ 
Public Const PFM_NOWIDOWCONTROL = &H200000        ' /* (*)  */ 
Public Const PFM_DONOTHYPHEN = &H400000           ' /* (*)  */ 
Public Const PFM_SIDEBYSIDE = &H800000            ' /* (*)  */ 
 
Public Const PFM_TABLE = &HC0000000               ' /* (*)  */ 
 
' /* Note: PARAFORMAT has no effects */ 
Public Const PFM_EFFECTS = (PFM_DIR Or PFM_KEEP Or PFM_KEEPNEXT Or PFM_TABLE _ 
                    Or PFM_PAGEBREAKBEFORE Or PFM_NOLINENUMBER _ 
                    Or PFM_NOWIDOWCONTROL Or PFM_DONOTHYPHEN Or PFM_SIDEBYSIDE _ 
                    Or PFM_TABLE) 
 
Public Const PFM_ALL = (PFM_STARTINDENT Or PFM_RIGHTINDENT Or PFM_OFFSET Or _ 
                 PFM_ALIGNMENT Or PFM_TABSTOPS Or PFM_NUMBERING Or _ 
                 PFM_OFFSETINDENT Or PFM_DIR) 
 
Public Const PFM_ALL2 = (PFM_ALL Or PFM_EFFECTS Or PFM_SPACEBEFORE Or PFM_SPACEAFTER _ 
                    Or PFM_LINESPACING Or PFM_STYLE Or PFM_SHADING Or PFM_BORDER _ 
                    Or PFM_NUMBERINGTAB Or PFM_NUMBERINGSTART Or PFM_NUMBERINGSTYLE) 
 
'public const PFE_RTLPARA  =           (PFM_DIR             >> 16) 
'public const PFE_RTLPAR              (PFM_RTLPARA         >> 16) ' /* (Version 1.0 flag) */ 
'public const PFE_KEEP                (PFM_KEEP            >> 16) ' /* (*)  */ 
'public const PFE_KEEPNEXT            (PFM_KEEPNEXT        >> 16) ' /* (*)  */ 
'public const PFE_PAGEBREAKBEFORE     (PFM_PAGEBREAKBEFORE >> 16) ' /* (*)  */ 
'public const PFE_NOLINENUMBER        (PFM_NOLINENUMBER    >> 16) ' /* (*)  */ 
'public const PFE_NOWIDOWCONTROL      (PFM_NOWIDOWCONTROL  >> 16) ' /* (*)  */ 
'public const PFE_DONOTHYPHEN         (PFM_DONOTHYPHEN     >> 16) ' /* (*)  */ 
'public const PFE_SIDEBYSIDE          (PFM_SIDEBYSIDE      >> 16) ' /* (*)  */' 
 
Public Const PFE_TABLEROW = &HC000&                ' /* These 3 options are mutually */ 
Public Const PFE_TABLECELLEND = &H8000&            ' /*  exclusive and each imply    */ 
Public Const PFE_TABLECELL = &H4000&               ' /*  that para is part of a table*/ 
 
' /* 
' *  PARAFORMAT numbering options (values for wNumbering): 
' * 
' *      Numbering Type      Value   Meaning 
' *      tomNoNumbering        0     Turn off paragraph numbering 
' *      tomNumberAsLCLetter   1     a, b, c, ... 
' *      tomNumberAsUCLetter   2     A, B, C, ... 
' *      tomNumberAsLCRoman    3     i, ii, iii, ... 
' *      tomNumberAsUCRoman    4     I, II, III, ... 
' *      tomNumberAsSymbols    5     default is bullet 
' *      tomNumberAsNumber     6     0, 1, 2, ... 
' *      tomNumberAsSequence   7     tomNumberingStart is first Unicode to use 
' * 
' *  Other valid Unicode chars are Unicodes for bullets. 
' */ 
 
 
Public Const PFA_JUSTIFY = 4          ' /* New paragraph-alignment option 2.0 (*) 
 
 
' /* notification structures */ 
 
Public Type NMHDR_RICHEDIT 
    hwndFrom As Long 
    wPad1 As Integer 
    idfrom As Integer 
    code As Integer 
    wPad2 As Integer 
End Type 
' #endif  ' /* !WM_NOTIFY */ 
 
Public Type MSGFILTER 
    NMHDR As NMHDR_RICHEDIT 
    msg As Integer 
    wPad1 As Integer 
    wParam As Integer 
    wPad2 As Integer 
    lParam As Long 
End Type 
 
Public Type REQRESIZE 
    NMHDR As NMHDR_RICHEDIT 
    rc As RECT 
End Type 
 
Public Type SELCHANGE 
    NMHDR As NMHDR_RICHEDIT 
    chrg As CHARRANGE 
    seltyp As Long 
End Type 
 
' /* used with IRichEditOleCallback::GetContextMenu, this flag will be 
'   passed as a "selection type".  It indicates that a context menu for 
'   a right-mouse drag drop should be generated.  The IOleObject parameter 
'   will really be the IDataObject for the drop 
' */ 
Public Const GCM_RIGHTMOUSEDROP = &H8000& 
 
Public Type ENDROPFILES 
    NMHDR As NMHDR_RICHEDIT 
    hDrop As Long 
    cp As Long 
    fProtected As Long 
End Type 
 
Public Type ENPROTECTED 
    NMHDR As NMHDR_RICHEDIT 
    msg As Long 
    wPad1 As Integer 
    wParam As Long 
    wPad2 As Integer 
    lParam As Long 
    chrg As CHARRANGE 
End Type 
 
Public Type ENSAVECLIPBOARD 
    NMHDR As NMHDR_RICHEDIT 
    cObjectCount As Long 
    cch As Long 
End Type 
 
' #ifndef MACPORT 
Public Type ENOLEOPFAILED 
    NMHDR As NMHDR_RICHEDIT 
    iob As Long 
    lOper As Long 
    hr As Long 
End Type 
' #End If 
 
Public Const OLEOP_DOVERB = 1 
 
Public Type OBJECTPOSITIONS 
    NMHDR As NMHDR_RICHEDIT 
    cObjectCount As Long 
        ' !!!POINTER to long value!!! 
    pcpPositions As Long 
End Type 
 
Public Type ENLINK 
    NMHDR As NMHDR_RICHEDIT 
    msg As Integer 
    wPad1 As Integer 
    wParam As Integer 
    wPad2 As Integer 
    lParam As Integer 
    chrg As CHARRANGE 
End Type 
 
' /* PenWin specific */ 
Public Type ENCORRECTTEXT 
    NMHDR As NMHDR_RICHEDIT 
    chrg As CHARRANGE 
    seltyp As Integer 
End Type 
 
' /* Far East specific */ 
'typedef struct _punctuation 
'{ 
'    UINT    iSize; 
'    LPSTR   szPunctuation; 
'} PUNCTUATION; 
 
' /* Far East specific */ 
'typedef struct _compcolor 
'{ 
'    COLORREF crText; 
'    COLORREF crBackground; 
'    DWORD dwEffects; 
'}COMPCOLOR; 
 
 
' /* clipboard formats - use as parameter to RegisterClipboardFormat() */ 
Public Const CF_RTF = "Rich Text Format" 
Public Const CF_RTFNOOBJS = "Rich Text Format Without Objects" 
Public Const CF_RETEXTOBJ = "RichEdit Text and Objects" 
 
' /* Paste Special */ 
Public Type REPASTESPECIAL 
    dwAspect As Long 
    dwParam As Long 
End Type 
 
 
' /* flags for the GETEXTEX data structure */ 
Public Const GT_DEFAULT = 0& 
Public Const GT_USECRLF = 1& 
 
' /* EM_GETTEXTEX info; this struct is passed in the wparam of the message */ 
Public Type GETTEXTEX 
    cb As Long             ' /* count of bytes in the string             */ 
    flags As Long          ' /* flags (see the GT_XXX defines            */ 
    codepage As Long       ' /* code page for translation (CP_ACP for default, 
                           '    1200 for Unicode                         */ 
    lpDefaultChar As Long ';  ' /* replacement for unmappable chars         */ 
    lpUsedDefChar As Long ';  ' /* pointer to flag set when def char used   */ 
End Type 
 
' /* flags for the GETTEXTLENGTHEX data structure                         */ 
Public Const GTL_DEFAULT = 0&      ' /* do the default (return ' # of chars)       */ 
Public Const GTL_USECRLF = 1&      ' /* compute answer using CRLFs for paragraphs*/ 
Public Const GTL_PRECISE = 2&      ' /* compute a precise answer                 */ 
Public Const GTL_CLOSE = 4&        ' /* fast computation of a "close" answer     */ 
Public Const GTL_NUMCHARS = 8&     ' /* return the number of characters          */ 
Public Const GTL_NUMBYTES = 16&    ' /* return the number of _bytes_             */ 
 
' /* EM_GETTEXTLENGTHEX info; this struct is passed in the wparam of the msg */ 
Public Type GETTEXTLENGTHEX 
    flags As Long          ' /* flags (see GTL_XXX defines)              */ 
    codepage As Long       ' /* code page for translation (CP_ACP for default, 
                              '1200 for Unicode                         */ 
End Type 
     
' /* BiDi specific features */ 
Public Type BIDIOPTIONS 
    cbSize As Long 
    wPad1 As Integer 
    wMask As Integer 
    wEffects As Integer 
End Type 
 
' /* BIDIOPTIONS masks */ 
' #if (_RICHEDIT_VER == =&H0100) 
Public Const BOM_DEFPARADIR = &H1&             ' /* Default paragraph direction (implies alignment) (obsolete) */ 
Public Const BOM_PLAINTEXT = &H2&              ' /* Use plain text layout (obsolete) */ 
Public Const BOM_NEUTRALOVERRIDE = &H4&        ' /* Override neutral layout (obsolete) */ 
' #endif ' /* _RICHEDIT_VER == =&H0100 */ 
Public Const BOM_CONTEXTREADING = &H8&         ' /* Context reading order */ 
Public Const BOM_CONTEXTALIGNMENT = &H10&      ' /* Context alignment */ 
 
' /* BIDIOPTIONS effects */ 
' #if (_RICHEDIT_VER == =&H0100) 
Public Const BOE_RTLDIR = &H1&                 ' /* Default paragraph direction (implies alignment) (obsolete) */ 
Public Const BOE_PLAINTEXT = &H2&              ' /* Use plain text layout (obsolete) */ 
Public Const BOE_NEUTRALOVERRIDE = &H4&        ' /* Override neutral layout (obsolete) */ 
' #endif ' /* _RICHEDIT_VER == =&H0100 */ 
Public Const BOE_CONTEXTREADING = &H8&         ' /* Context reading order */ 
Public Const BOE_CONTEXTALIGNMENT = &H10&      ' /* Context alignment */ 
 
' /* Additional EM_FINDTEXT[EX] flags */ 
Public Const FR_MATCHDIAC = &H20000000 
Public Const FR_MATCHKASHIDA = &H40000000 
Public Const FR_MATCHALEFHAMZA = &H80000000 
 
' /* UNICODE embedding character */ 
' #ifndef WCH_EMBEDDING 
Public Const WCH_EMBEDDING = &HFFFC& 
' #endif ' /* WCH_EMBEDDING */ 
         
 
' #undef _WPAD 
 
' #ifdef _WIN32 
' #include  
' #elif !defined(RC_INVOKED) 
' #pragma pack() 
' #End If 
 
' #ifdef __cplusplus 
'} 
' #endif  ' /* __cplusplus */ 
 
' #endif ' /* !_RICHEDIT_ */ 
 
 
' /* 
 '* Edit Control Messages 
 '*/ 
Public Const EM_GETSEL = &HB0& 
Public Const EM_SETSEL = &HB1& 
Public Const EM_GETRECT = &HB2& 
Public Const EM_SETRECT = &HB3& 
Public Const EM_SETRECTNP = &HB4& 
Public Const EM_SCROLL = &HB5& 
Public Const EM_LINESCROLL = &HB6& 
Public Const EM_SCROLLCARET = &HB7& 
Public Const EM_GETMODIFY = &HB8& 
Public Const EM_SETMODIFY = &HB9& 
Public Const EM_GETLINECOUNT = &HBA& 
Public Const EM_LINEINDEX = &HBB& 
Public Const EM_SETHANDLE = &HBC& 
Public Const EM_GETHANDLE = &HBD& 
Public Const EM_GETTHUMB = &HBE& 
Public Const EM_LINELENGTH = &HC1& 
Public Const EM_REPLACESEL = &HC2& 
Public Const EM_GETLINE = &HC4& 
Public Const EM_LIMITTEXT = &HC5& 
Public Const EM_CANUNDO = &HC6& 
Public Const EM_UNDO = &HC7& 
Public Const EM_FMTLINES = &HC8& 
Public Const EM_LINEFROMCHAR = &HC9& 
Public Const EM_SETTABSTOPS = &HCB& 
Public Const EM_SETPASSWORDCHAR = &HCC& 
Public Const EM_EMPTYUNDOBUFFER = &HCD& 
Public Const EM_GETFIRSTVISIBLELINE = &HCE& 
Public Const EM_SETREADONLY = &HCF& 
Public Const EM_SETWORDBREAKPROC = &HD0& 
Public Const EM_GETWORDBREAKPROC = &HD1& 
Public Const EM_GETPASSWORDCHAR = &HD2& 
'#if(WINVER >= =&H0400) 
Public Const EM_SETMARGINS = &HD3& 
Public Const EM_GETMARGINS = &HD4& 
Public Const EM_SETLIMITTEXT = EM_LIMITTEXT          ' /* ;win40 Name change */ 
Public Const EM_GETLIMITTEXT = &HD5& 
Public Const EM_POSFROMCHAR = &HD6& 
Public Const EM_CHARFROMPOS = &HD7& 
 
Public Const EC_LEFTMARGIN = &H1 
Public Const EC_RIGHTMARGIN = &H2 
Public Const EC_USEFONTINFO = &HFFFF& 
'#End If ' /* WINVER >= =&H0400 */ 
'/* 
' * Edit Control Styles 
' */ 
Public Const ES_LEFT = &H0& 
Public Const ES_CENTER = &H1& 
Public Const ES_RIGHT = &H2& 
Public Const ES_MULTILINE = &H4& 
Public Const ES_UPPERCASE = &H8& 
Public Const ES_LOWERCASE = &H10& 
Public Const ES_PASSWORD = &H20& 
Public Const ES_AUTOVSCROLL = &H40& 
Public Const ES_AUTOHSCROLL = &H80& 
Public Const ES_NOHIDESEL = &H100& 
Public Const ES_OEMCONVERT = &H400& 
Public Const ES_READONLY = &H800& 
Public Const ES_WANTRETURN = &H1000& 
'#if(WINVER >= =&H0400) 
Public Const ES_NUMBER = &H2000& 
'#endif /* WINVER >= =&H0400 */ 
 
'/* Edit Control Notifications */ 
Public Const EN_CHANGE = &H300 
Public Const EN_ERRSPACE = &H500 
Public Const EN_HSCROLL = &H601 
Public Const EN_KILLFOCUS = &H200 
Public Const EN_MAXTEXT = &H501 
Public Const EN_SETFOCUS = &H100 
Public Const EN_UPDATE = &H400 
Public Const EN_VSCROLL = &H602 
 
Private m_sText As String 
Private m_lPos As Long 
Private m_lLen As Long 
Private m_bFileMode As Boolean 
Private m_lObj As Long 
 
Public Property Let RichEdit(ByVal edtThis As vbalRichEdit) 
   m_lObj = ObjPtr(edtThis) 
End Property 
Public Property Get RichEdit() As vbalRichEdit 
Dim rT As vbalRichEdit 
   If (m_lObj <> 0) Then 
      CopyMemory rT, m_lObj, 4 
      Set RichEdit = rT 
      CopyMemory rT, 0&, 4 
   End If 
End Property 
Public Sub ClearRichEdit() 
   m_lObj = 0 
End Sub 
 
Public Property Let FileMode(ByVal bMode As Boolean) 
    m_bFileMode = bMode 
    m_lPos = 0 
    m_lLen = -1 
End Property 
Public Property Get FileMode() As Boolean 
    FileMode = m_bFileMode 
End Property 
Public Sub ClearStreamText() 
    m_sText = "" 
End Sub 
Public Property Get StreamText() As String 
    StreamText = m_sText 
End Property 
Public Property Let StreamText(ByRef sText As String) 
    m_sText = sText 
    m_lPos = 1 
    m_lLen = Len(m_sText) 
End Property 
Public Function LoadCallBack( _ 
        ByVal dwCookie As Long, _ 
        ByVal lPtrPbBuff As Long, _ 
        ByVal cb As Long, _ 
        ByVal pcb As Long _ 
    ) As Long 
Dim sBuf As String 
Dim b() As Byte 
Dim lLen As Long 
Dim lRead As Long 
     
    If (m_bFileMode) Then 
        ReadFile dwCookie, ByVal lPtrPbBuff, cb, ByVal pcb, ByVal 0& 
        CopyMemory lRead, ByVal pcb, 4 
        If (lRead < cb) Then 
            ' Complete: 
            LoadCallBack = 0 
        Else 
            ' More to read: 
            LoadCallBack = 0 
        End If 
        m_lPos = m_lPos + lRead 
      If Not (RichEdit Is Nothing) Then 
         RichEdit.RaiseLoadStatus m_lPos, -1 
      End If 
     
    Else 
        CopyMemory lRead, ByVal pcb, 4 
        Debug.Print lRead, cb 
        ' Place cb bytes if possible, or place in the whole string: 
        If (m_lLen - m_lPos >= 0) Then 
            If (m_lLen - m_lPos < cb) Then 
                ReDim b(0 To (m_lLen - m_lPos)) As Byte 
                b = StrConv(Mid$(m_sText, m_lPos), vbFromUnicode) 
                lRead = m_lLen - m_lPos + 1 
                CopyMemory ByVal lPtrPbBuff, b(0), lRead 
                m_lPos = m_lLen + 1 
            Else 
                ReDim b(0 To cb - 1) As Byte 
                b = StrConv(Mid$(m_sText, m_lPos, cb), vbFromUnicode) 
                CopyMemory ByVal lPtrPbBuff, b(0), cb 
                m_lPos = m_lPos + cb 
                lRead = cb 
            End If 
                         
            CopyMemory ByVal pcb, lRead, 4 
            LoadCallBack = 0 
        Else 
            lRead = 0 
            CopyMemory ByVal pcb, lRead, 4 
            LoadCallBack = 0 
        End If 
         
        If Not (RichEdit Is Nothing) Then 
         If (m_lPos > m_lLen) Then 
            RichEdit.RaiseLoadStatus m_lLen, m_lLen 
         Else 
            RichEdit.RaiseLoadStatus m_lPos, m_lLen 
         End If 
        End If 
 
    End If 
     
End Function 
Public Function SaveCallBack( _ 
        ByVal dwCookie As Long, _ 
        ByVal lPtrPbBuff As Long, _ 
        ByVal cb As Long, _ 
        ByVal pcb As Long _ 
    ) As Long 
Dim sBuf As String 
Dim b() As Byte 
Dim lLen As Long 
 
    lLen = cb 
     
    If (lLen > 0) Then 
        If (m_bFileMode) Then 
            If Not (RichEdit Is Nothing) Then 
               RichEdit.RaiseLoadStatus lLen, -1 
            End If 
            WriteFile dwCookie, ByVal lPtrPbBuff, cb, ByVal pcb, ByVal 0& 
        Else 
            If Not (RichEdit Is Nothing) Then 
               RichEdit.RaiseLoadStatus lLen, -1 
            End If 
            ReDim b(0 To lLen - 1) As Byte 
            CopyMemory b(0), ByVal lPtrPbBuff, lLen 
            sBuf = StrConv(b, vbUnicode) 
            CopyMemory ByVal pcb, lLen, 4 
            m_sText = m_sText & sBuf 
            m_lPos = 1 
            m_lLen = Len(m_sText) 
             
        End If 
    End If 
    SaveCallBack = 0 
     
     
End Function