WLMSN 发表于 2012-12-30 19:08:08

au3记事本模拟制作过程的问题,请大家帮忙看下。

1、在打开记事本的时候,无输入文字和输入文字鼠标不选中复制这些都是不能用的。怎么判断鼠标是否选中文字,
怎么把鼠标选中的文字弄到剪切板去

2、这个图片中格式的前面的选择(带勾的那个)怎么弄出来的、


希望懂得帮小弟一下,给些想法也可以。
   先谢过了。。{:face (270):}

WLMSN 发表于 2012-12-30 19:15:08





两个没显示的图片、、{:face (394):}

netegg 发表于 2012-12-30 19:21:07

lz是想用autoit开发一个记事本?

WLMSN 发表于 2012-12-30 19:27:06

回复 3# netegg


    嗯。看了入门的文档、想拿这个试试。

netegg 发表于 2012-12-30 19:30:08

本帖最后由 netegg 于 2012-12-30 19:34 编辑

回复 4# WLMSN
工程不小,鼓励下吧
大概说下,算不上指导,字符类的api几乎都要用上,剪贴板,同步,消息,至于界面元素就不多说了

WLMSN 发表于 2012-12-30 19:32:45

回复 5# netegg


    大哥,au3中有判断鼠标是否选中文本的函数没?
         还有有没有获取鼠标选中的文本的函数
      可以给些思路嘛、

netegg 发表于 2012-12-30 19:35:24

实时跟踪鼠标位置,改变场景颜色

WLMSN 发表于 2012-12-30 19:42:34

回复 7# netegg


    我试试,谢谢大哥。

annybaby 发表于 2012-12-30 21:07:12

回复 1# WLMSN


楼主有志气啊,呵呵~~
就当灌水吧,回复个,长点积分也好~
1.判断鼠标是否选中文字,你可以直接使用UDF函数_GUICtrlEdit_GetSel(),它返回一个数组,第一个元素表示选择的起始位置,第二个当然就是结束啦,当没有选择文本时,两个元素数值相等,指示当前光标的所在的位置,所以你可以通过比较两个元素的值是否相等来确定有没有选中文本,从而设置相应的菜单是否可用;
至于将文字弄到剪贴板中,如果是在编辑框中,那个系统自己会处理的,不用管,如果是菜单中选择的话,你可以使用最笨的办法,就是直接发送CTRL+C,当然也可以使用发送消息的办法(具体翻看帮助文档及UDF中的源码吧)
2.那个菜单选中就打勾的话,直接设置控件状态为选中即可
guictrlsetstate($CTRL_ID,$GUI_CHECKED)

WLMSN 发表于 2012-12-30 21:36:54

回复 9# annybaby


    哇哦,我试下那个函数。这个思路太 好了、
   CTRL+C的方法。。。可以是可以,就是想他内部怎么弄的、
勾选也知道了、非常感谢、、{:face (88):}

annybaby 发表于 2012-12-30 21:47:08

回复 10# WLMSN

安装包里有好多_sendmessage相关的示例函数,UDF等都可以学习,消息常量也可以查看帮助文档附录部分,或者是相关的头文件或者网上找资源,好多的~~

风行者 发表于 2012-12-31 02:20:51

本帖最后由 风行者 于 2012-12-31 02:29 编辑

可以判断鼠标左键弹起时,有没有选择文本

风行者 发表于 2012-12-31 02:46:14

示例:

#include <WinApi.au3>
#include <Constants.au3>
#Include <GuiEdit.au3>

Global Const $WM_SYSCOMMAND = 0x0112
Global Const $WM_LBUTTONUP = 0x0202
$gui = GUICreate("测试", 700, 600)
$edit = GUICtrlCreateEdit("你好这是一个测试哈哈",50,50,300,100)
GUISetState() ;显示窗口
GUIRegisterMsg($WM_SYSCOMMAND,"WM_SYSCOMMAND")
$wProcOld = GUIRegisterMsgEx($edit, "_MyWindowProc") ;窗口子类化

While 1
        Sleep(100)
WEnd

Func WM_SYSCOMMAND($hWnd, $sMsg, $sWParam, $slParam)
        Switch $sWParam
                Case 61536;$SC_CLOSE
                        Exit
        EndSwitch
EndFunc

Func GUIRegisterMsgEx($ctrID, $funcName) ;控件id,函数名
        Local $wProcNew = DllCallbackRegister($funcName, "ptr", "hwnd;uint;long;ptr")
        Local $wProcOld = _WinAPI_SetWindowLong(GUICtrlGetHandle($ctrID), $GWL_WNDPROC, DllCallbackGetPtr($wProcNew))
        Return $wProcOld
EndFunc   ;==>GUIRegisterMsgEx

Func _MyWindowProc($hWnd, $uiMsg, $wParam, $lParam)
        Switch $uiMsg
                Case $WM_LBUTTONUP
                        $sel = _GUICtrlEdit_GetSel($edit)
                        MsgBox(0,"","你选择了:"&StringMid(GUICtrlRead($edit),$sel+1,$sel-$sel))
        EndSwitch
        ;向默认窗口进程传递未处理过的消息
        Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $uiMsg, $wParam, $lParam)
EndFunc   ;==>_MyWindowProc

WLMSN 发表于 2012-12-31 22:08:19

回复 11# annybaby


    _GUICtrlEdit_GetSel(),大哥这个函数好给力。根据你的描述,我试验了下,可以实现判断是否选中文本、前面那个勾选的也行。
       谢谢大哥。。。。{:face (293):}

WLMSN 发表于 2012-12-31 22:10:59

回复 13# 风行者


    左键弹起。。意思没懂,好好参考大哥你的代码看看、
      谢谢大哥帮助。{:face (55):}
页: [1] 2
查看完整版本: au3记事本模拟制作过程的问题,请大家帮忙看下。