找回密码
 加入
搜索
楼主: sanmoking

[GUI管理] au3的gui如何接受浏览器拖放过来的链接地址【已解决】

 火... [复制链接]
发表于 2012-5-3 22:07:17 | 显示全部楼层
回复 29# sanmoking


    何必这么苛刻呢,实际中这样的链接不多吧

评分

参与人数 1金钱 +22 贡献 +5 收起 理由
sanmoking + 22 + 5 编程就是未卜先知,必须得把能想到的都考虑 ...

查看全部评分

 楼主| 发表于 2012-5-3 22:11:07 | 显示全部楼层
回复 31# zldfsz


    挺多的啊,后缀html,前缀http,都是ht开头,肯定会出错,
发表于 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

评分

参与人数 2金钱 +67 贡献 +10 收起 理由
sanmoking + 22 + 5 多谢超版支持,只是这一种情况的话没问题, ...
zldfsz + 45 + 5 测试了,没问题,又读了几遍,懂了

查看全部评分

发表于 2012-5-3 22:38:41 | 显示全部楼层
回复 33# afan


    超版终于看不下去了,出手搭救了,呵呵
 楼主| 发表于 2012-5-3 23:09:25 | 显示全部楼层
回复 33# afan


    超版的代码单独拿出来可以的,放到一楼的那种应用环境下还是有很多问题。。比如前后两次的链接是一样的【http://wenku.baidu.com/view/c20ac106bed5b9f3f90f1c13.htmlhttp://wenku.baidu.com/view/c20ac106bed5b9f3f90f1c13.html】
发表于 2012-5-3 23:23:38 | 显示全部楼层
回复  afan


    超版的代码单独拿出来可以的,放到一楼的那种应用环境下还是有很多问题。。比如前后两 ...
sanmoking 发表于 2012-5-3 15:09


放到一楼的那种应用环境下还是有很多问题。。。什么问题啊?

评分

参与人数 1金钱 +6 收起 理由
sanmoking + 6 主要是用户的操作太不固定,超版的那个只能 ...

查看全部评分

发表于 2012-5-3 23:49:28 | 显示全部楼层
有用吗????
 楼主| 发表于 2012-5-4 00:00:20 | 显示全部楼层
回复 36# zldfsz


    我已经解决了光标所在位置的字符数。。。经过试验效果非常好,不管拖动的位置是在最前最后还是中间有29楼那种苛刻问题的情况都能解决。。。,再复杂一点的情况,比如手动从右向左选中一部分文字之后,ctrl+v粘贴进去一部分文字,这种情况还是会有出现问题的几率,不过那已经非常罕见困了,等用户发现拖动非常好用的时候绝对不会手动输入,所以目前的成果来看,纯拖动的时候应用已经没有任何问题了。。。等下加上点击时全选文字的代码即可结贴。
发表于 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[1]-StringLen($x2)+StringLen($x1),$aPos[1])
$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

评分

参与人数 2金钱 +37 贡献 +3 收起 理由
星雨朝霞 + 25 + 3 精品文章
sanmoking + 12 25行26行可以用字符串去计算即可,不需要实 ...

查看全部评分

 楼主| 发表于 2012-5-4 00:36:10 | 显示全部楼层
回复 39# zldfsz


    看来我走弯路了。。。先获取光标的相对控件的坐标,然后转换成字符数。。。修改一下去。。
发表于 2012-5-4 00:40:22 | 显示全部楼层
回复 40# 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[1]-StringLen($sNow) + StringLen($sLast)),StringLen($sNow)-$aPos[1])
                        _GUICtrlRichEdit_SetText($RichEdit, $sLast)                                 
                Else
                        $sLast = $sNow
        EndIf
        Sleep(5)
                $aPos  =_GUICtrlRichEdit_GetSel($RichEdit)
                ToolTip(_Caret_GetPosnum($RichEdit)&@CR&$aPos[0]&@CR&$aPos[1])
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[2]        
        DllCall("User32.dll", "int", "GetCaretPos", "ptr", DllStructGetPtr($POINT))
        $Return[0] = DllStructGetData($POINT, 1)
        $Return[1] = DllStructGetData($POINT, 2)                
        Return _GUICtrlRichEdit_GetCharPosFromXY($hWnd, $Return[0], $Return[1])
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
 楼主| 发表于 2012-5-4 01:02:27 | 显示全部楼层
本帖最后由 sanmoking 于 2012-5-4 01:08 编辑
回复  sanmoking


    直接拖拽没问题,但是还是你说的那样,选定部分粘贴就会出问题
zldfsz 发表于 2012-5-4 00:40



    记录的是选定之前的字数,选定后粘贴等于把选定部分删掉了,实际的字数已经小于之前记录的字数,所以会把新粘进去的前部去掉刚才选定部分的字数。。。。
不过出现这种几率小之又小,只有在胡乱粘贴进行测试的时候才会出现。。。平常用户使用顶多是把百度文库\view\后边的部分替换一下而已,字数不变的情况下不会出现问题,字数增加超过1才会出问题。。出问题也不会造成严重后果,顶多是提示个网址不是百度的而已。。。一般用户发现网址变的奇怪,都会删除全部重新粘贴,更何况还有更好使的拖拽功能难道不用。。

好吧这个帖子就结束吧,明天挨个加分。谢谢大家支持。。
发表于 2012-5-4 08:40:53 | 显示全部楼层
回复 43# sanmoking

超版对用户的心理和习惯研究得透啊。!

评分

参与人数 1金钱 +6 收起 理由
sanmoking + 6 我不是超版。。。

查看全部评分

发表于 2012-5-4 13:36:34 | 显示全部楼层
关注一下,不知进展如何了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-27 00:55 , Processed in 0.076825 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表