zldfsz
发表于 2012-5-3 22:07:17
回复 29# sanmoking
何必这么苛刻呢,实际中这样的链接不多吧
sanmoking
发表于 2012-5-3 22:11:07
回复 31# zldfsz
挺多的啊,后缀html,前缀http,都是ht开头,肯定会出错,
afan
发表于 2012-5-3 22:14:12
回复 29# sanmoking $s1 = 'http://ww.baidu.com/1111111.html'
$s2 = 'http://ww.baidu.com/1111111.http://ww.baidu.com/222222.htmlhtml'
MsgBox(0, '获取插入的字符串', _StringGetInsertStr($s1, $s2))
Func _StringGetInsertStr($sLast, $sNow)
Local $Len = StringLen($sNow) - StringLen($sLast)
Local $i, $str, $sRe
For $i = 1 To StringLen($sNow)
$str = StringMid($sNow, $i, $Len)
$sRe = StringReplace($sNow, $str, '', 1)
If $sRe = $sLast Then Return $str
Next
Return SetError(1, 0, '')
EndFunc ;==>_StringGetInsertStr
zldfsz
发表于 2012-5-3 22:38:41
回复 33# afan
超版终于看不下去了,出手搭救了,呵呵
sanmoking
发表于 2012-5-3 23:09:25
回复 33# afan
超版的代码单独拿出来可以的,放到一楼的那种应用环境下还是有很多问题。。比如前后两次的链接是一样的【http://wenku.baidu.com/view/c20ac106bed5b9f3f90f1c13.htmlhttp://wenku.baidu.com/view/c20ac106bed5b9f3f90f1c13.html】
zldfsz
发表于 2012-5-3 23:23:38
回复afan
超版的代码单独拿出来可以的,放到一楼的那种应用环境下还是有很多问题。。比如前后两 ...
sanmoking 发表于 2012-5-3 15:09 http://www.autoitx.com/images/common/back.gif
放到一楼的那种应用环境下还是有很多问题。。。什么问题啊?
yorker0503
发表于 2012-5-3 23:49:28
有用吗????
sanmoking
发表于 2012-5-4 00:00:20
回复 36# zldfsz
我已经解决了光标所在位置的字符数。。。经过试验效果非常好,不管拖动的位置是在最前最后还是中间有29楼那种苛刻问题的情况都能解决。。。,再复杂一点的情况,比如手动从右向左选中一部分文字之后,ctrl+v粘贴进去一部分文字,这种情况还是会有出现问题的几率,不过那已经非常罕见困了,等用户发现拖动非常好用的时候绝对不会手动输入,所以目前的成果来看,纯拖动的时候应用已经没有任何问题了。。。等下加上点击时全选文字的代码即可结贴。
zldfsz
发表于 2012-5-4 00:11:40
回复 38# sanmoking
我也刚弄出来
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiRichEdit.au3>
Opt("GUIOnEventMode", 1)
Local $dat = "", $m = 0
$hGui = GUICreate("网址拖放测试", 830, 100, -1, -1, -1, $WS_EX_WINDOWEDGE + $WS_EX_TOPMOST)
GUISetOnEvent($GUI_EVENT_CLOSE, "ExitGui")
GUICtrlCreateLabel("网址:", 5, 45, 40, 20)
GUICtrlCreateButton("解析", 760, 35, 60, 25)
GUICtrlSetOnEvent($GUI_EVENT_CLOSE, "click")
$RichEdit = _GUICtrlRichEdit_Create($hGui, "", 40, 40, 700, 20, BitOR($ES_WANTRETURN, $ES_AUTOHSCROLL))
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW, $hGui)
$x1 = ""
While True
$x2 = _GUICtrlRichEdit_GetText($RichEdit)
If StringLen($x2) > 0 And $x1 = "" Then
$x1 = $x2
ElseIf StringLen($x2) - StringLen($x1) = 1 Or StringLen($x1) - StringLen($x2) > 1 Then
$x1 = $x2
ElseIf StringLen($x2) - StringLen($x1) > 1 And $x1 <> "" Then
$aPos=_GUICtrlRichEdit_GetSel($RichEdit)
_GuiCtrlRichEdit_SetSel($RichEdit,$aPos-StringLen($x2)+StringLen($x1),$aPos)
$x1= _GuiCtrlRichEdit_GetSelText($RichEdit)
_GUICtrlRichEdit_SetText($RichEdit,$x1)
EndIf
Sleep(5)
WEnd
Func ExitGui()
_GUICtrlRichEdit_Destroy($RichEdit)
Exit
EndFunc ;==>ExitGui
Func click()
$dat = _GUICtrlRichEdit_GetText($RichEdit)
MsgBox(4096, "网址为", $dat)
EndFunc ;==>click
sanmoking
发表于 2012-5-4 00:36:10
回复 39# zldfsz
看来我走弯路了。。。先获取光标的相对控件的坐标,然后转换成字符数。。。修改一下去。。
zldfsz
发表于 2012-5-4 00:40:22
回复 40# sanmoking
直接拖拽没问题,但是还是你说的那样,选定部分粘贴就会出问题
sanmoking
发表于 2012-5-4 00:49:18
我修改的代码,。。。。
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiRichEdit.au3>
Opt("GUIOnEventMode", 1)
Local $dat = "", $m = 0
$hGui = GUICreate("网址拖放测试", 400, 100, -1, -1, -1, $WS_EX_WINDOWEDGE + $WS_EX_TOPMOST)
GUISetOnEvent($GUI_EVENT_CLOSE, "ExitGui")
GUICtrlCreateLabel("网址:", 5, 45, 40, 20)
GUICtrlCreateButton("解析", 350, 37, 50, 25)
GUICtrlSetOnEvent($GUI_EVENT_CLOSE, "click")
$RichEdit = _GUICtrlRichEdit_Create($hGui, "", 40, 40, 310, 20, BitOR($ES_WANTRETURN, $ES_AUTOHSCROLL))
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
;~ GUIRegisterMsg(0x0111, 'WM_COMMAND');看来【拖入替换】跟【点击全选】是不能共存了,我是在解决不了
_GUICtrlRichEdit_SetText($RichEdit, "dgvsdfhtdfuhydrtgbnfdtjhytj")
GUISetState(@SW_SHOW, $hGui)
$sLast = ""
While True
$sNow = _GUICtrlRichEdit_GetText($RichEdit)
If StringLen($sNow) - StringLen($sLast) > 1 And $sLast <> "" Then
$aPos=_GUICtrlRichEdit_GetSel($RichEdit)
$sLast = StringTrimRight(StringTrimLeft($sNow,$aPos-StringLen($sNow) + StringLen($sLast)),StringLen($sNow)-$aPos)
_GUICtrlRichEdit_SetText($RichEdit, $sLast)
Else
$sLast = $sNow
EndIf
Sleep(5)
$aPos=_GUICtrlRichEdit_GetSel($RichEdit)
ToolTip(_Caret_GetPosnum($RichEdit)&@CR&$aPos&@CR&$aPos)
WEnd
Func ExitGui()
_GUICtrlRichEdit_Destroy($RichEdit)
Exit
EndFunc ;==>ExitGui
Func click()
$dat = _GUICtrlRichEdit_GetText($RichEdit)
MsgBox(4096, "网址为", $dat)
EndFunc ;==>click
Func _Caret_GetPosnum($hWnd);获取当前光标所在位置之前的字符数,我自己写的。。。竟然不知道udf自带_GUICtrlRichEdit_GetSel
Local $POINT = DllStructCreate("long;long")
Local $Return
DllCall("User32.dll", "int", "GetCaretPos", "ptr", DllStructGetPtr($POINT))
$Return = DllStructGetData($POINT, 1)
$Return = DllStructGetData($POINT, 2)
Return _GUICtrlRichEdit_GetCharPosFromXY($hWnd, $Return, $Return)
EndFunc ;==>_Caret_GetPos
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg
If $ilParam = $RichEdit And BitShift($iwParam, 16) = 256 Then ControlSend ($hGui, "", 'RICHEDIT50W1',"^a")
EndFunc ;==>WM_COMMAND
sanmoking
发表于 2012-5-4 01:02:27
本帖最后由 sanmoking 于 2012-5-4 01:08 编辑
回复sanmoking
直接拖拽没问题,但是还是你说的那样,选定部分粘贴就会出问题
zldfsz 发表于 2012-5-4 00:40 http://www.autoitx.com/images/common/back.gif
记录的是选定之前的字数,选定后粘贴等于把选定部分删掉了,实际的字数已经小于之前记录的字数,所以会把新粘进去的前部去掉刚才选定部分的字数。。。。
不过出现这种几率小之又小,只有在胡乱粘贴进行测试的时候才会出现。。。平常用户使用顶多是把百度文库\view\后边的部分替换一下而已,字数不变的情况下不会出现问题,字数增加超过1才会出问题。。出问题也不会造成严重后果,顶多是提示个网址不是百度的而已。。。一般用户发现网址变的奇怪,都会删除全部重新粘贴,更何况还有更好使的拖拽功能难道不用。。
好吧这个帖子就结束吧,明天挨个加分。谢谢大家支持。。
楼上风云
发表于 2012-5-4 08:40:53
回复 43# sanmoking
超版对用户的心理和习惯研究得透啊。!
zldfsz
发表于 2012-5-4 13:36:34
关注一下,不知进展如何了