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

关注一下,不知进展如何了
页: 1 2 [3] 4
查看完整版本: au3的gui如何接受浏览器拖放过来的链接地址【已解决】