注意:仅在vfp支持的字符集下有效
FUNCTION mGetRTLine(RThwnd As long, LineNum As Long)
#defi GTL_NUMBYTES
16
#defi EM_LINEINDEX 0xBB
#defi EM_GETLINECOUNT 0xBA
#defi EM_LINELENGTH 0xC1
#defi WM_USER
0x400
#DEFINE EM_GETTEXTRANGE
(WM_USER + 75)
Declare INTEGER SendMessage in WIN32API as sendmessage_n INTEGER hwnd , INTEGER wMsg , INTEGER wParam , INTEGER lParam
DECLARE INTEGER SendMessage IN win32api as sendmessage_c INTEGER hWnd, INTEGER wParam, INTEGER lParam,string @
DECLARE INTEGER GlobalAlloc IN KERNEL32.DLL
INTEGER
uFlags,INTEGER
dwBytes
DECLARE INTEGER GlobalLock IN KERNEL32.DLL
INTEGER
hMem
DECLARE INTEGER GlobalUnlock IN KERNEL32.DLL
INTEGER
hMem
DECLARE INTEGER GlobalFree IN KERNEL32.DLL
INTEGER
hMem
If LineNum < 1
RETURN ""
EndIf
LineCount = SendMessage_n(RThWnd, EM_GETLINECOUNT, 0, 0)
If LineNum > LineCount
RETURN ""
EndIf
charFrom = SendMessage_n(RThWnd, EM_LINEINDEX, LineNum - 1,
0)
lc = SendMessage_n(RThWnd, EM_LINELENGTH, charFrom,
0)
If lc = 0
RETURN ""
endif
charEnd = charFrom + lc
trAddress=GetMemPoint(0,2048)
IF trAddress=0
RETURN ""
endif
tr=BINTOC(charFrom,"4rs")+BINTOC(charEnd,"4rs")+BINTOC(trAddress,"4rs")
j = SendMessage_c(RThWnd, EM_GETTEXTRANGE, 0, @TR)
If j = 0
RETURN ""
ENDIF
getRTLine = left(SYS(2600,trAddress,2048),j)
DeleteMemPoint(trAddress)
RETURN getRTLine
FUNCTION GetMemPoint()
lPARAMETER uFlags,MemLen,PointAddress
LOCAL MemHandle,PAddress,MemSize
MemHandle = GlobalAlloc(m.uFlags,m.Memlen)
IF m.MemHandle = 0
RETURN 0
ENDIF
PAddress = GlobalLock(m.MemHandle)
IF m.PAddress = 0
=GlobalFree(m.PointAddress)
RETURN 0
ENDIF
RETURN
(m.PAddress)
ENDFUNC
FUNCTION DeleteMemPoint()
LPARAMETER PointAddress
=GlobalUnlock(m.PointAddress)
=GlobalFree(m.PointAddress)
ENDFUNC