kxing 发表于 2012-8-12 11:17:13

求助设置edit控件样式的问题

请问下下面代码为何设置样式无效呢?#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <guiedit.au3>
#include <string.au3>

$Form1 = GUICreate("", 190, 240)
$Edit1 = _GUICtrlEdit_Create($Form1,"", 0, 0, 190, 190)
$Button1 = GUICtrlCreateButton("显示", 10, 200, 150, 30)
GUISetState(@SW_SHOW)

local $flag=0

While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
if $flag then
$flag=1
else
$flag=0
endif
_setautoline($Edit1,$flag)
      EndSwitch
WEnd

Func _SetAutoLine($hEdit,$flag=0)
if $flag=0 then;不自动换行
guictrlsetstyle($hEdit,bitor($ES_MULTILINE, $ES_WANTRETURN))
else;自动换行
guictrlsetstyle($hEdit,bitor($ES_MULTILINE, $ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
endif
EndFunc;setautoline

netegg 发表于 2012-8-12 12:26:52

_WinAPI_GetWindowLong?

kxing 发表于 2012-8-12 13:37:52

不行啊,蛋兄。
要设置,不是获取呢。。。

netegg 发表于 2012-8-12 14:04:26

本帖最后由 netegg 于 2012-8-12 14:05 编辑

回复 3# kxing
获取完了,再bit*对应的试试

xiehuahere 发表于 2012-8-13 15:52:41

本帖最后由 xiehuahere 于 2012-8-13 16:28 编辑

回复 1# kxing

_GUICtrlEdit_Create返回的是控件句柄,而后面内置函数guictrlsetstyle要求的是控件ID,不匹配。
你还是使用内置函数GUICtrlCreateEdit来创建Edit控件吧,这里没必要用UDF的。#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("", 190, 240)
$Edit1 = GUICtrlCreateEdit("", 0, 0, 190, 190, bitor($ES_MULTILINE, $ES_WANTRETURN)) ;非自动换行
$Button1 = GUICtrlCreateButton("显示", 10, 200, 150, 30)
GUISetState(@SW_SHOW)

local $flag=0 ;非自动换行

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        if $flag Then ;当前为自动换行
                                $flag = 0 ;变为非自动换行
                        Else;当前为非自动换行
                                $flag = 1 ;变为自动换行
                        endif
                        _setautoline($Edit1, $flag)
        EndSwitch
WEnd

Func _SetAutoLine($Edit, $flag=0)
        if $flag=0 Then ;不自动换行
                guictrlsetstyle($Edit, bitor($ES_MULTILINE, $ES_WANTRETURN))
        else;自动换行
                guictrlsetstyle($Edit, bitor($ES_MULTILINE, $ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
        endif
EndFunc;setautoline

夜猫猫 发表于 2012-8-13 15:56:58

需要修改控件吧?

kxing 发表于 2012-8-13 17:05:34

感谢啦,原来要用这个函数创建。

kxing 发表于 2012-8-13 17:09:11

但是为何设置成没有水平滚动的也不会自动换行呢?

kxing 发表于 2012-8-13 17:11:50

是不是原来设置的样式不能撤销。

happytc 发表于 2012-8-13 18:42:47

回复kxing
获取完了,再bit*对应的试试
netegg 发表于 2012-8-12 14:04 http://www.autoitx.com/images/common/back.gif


   直接是 不行的,用_WinAPI_SetWindowLong这样子的,必须再重绘Edit控件,才能使Modify的Style生效的。

xiehuahere 发表于 2012-8-13 21:34:01

回复 8# kxing


    不懂你什么意思。我上面的代码是可以自动换行的。

kxing 发表于 2012-8-18 06:52:37

我是想要和记事本那样的效果,能自动换行或不自动换行切换。

xiehuahere 发表于 2012-8-20 12:55:24

回复 12# kxing


请使用“回复”按钮,否则无法及时收到。

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("", 190, 240)
$Edit1 = GUICtrlCreateEdit("", 0, 0, 190, 190, bitor($ES_MULTILINE, $ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL))
$Button1 = GUICtrlCreateButton("显示", 10, 200, 150, 30)
GUISetState(@SW_SHOW)

local $flag = 0

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        _SetAutoLine()
        EndSwitch
WEnd

Func _SetAutoLine()
        Local $text
        GUICtrlSetState($Button1, $GUI_DISABLE)
        If $flag Then ;不自动换行,有水平滚动条
                $text = GUICtrlRead($Edit1)
                GUICtrlDelete($Edit1)
                $Edit1 = GUICtrlCreateEdit($text, 0, 0, 190, 190, bitor($ES_MULTILINE, $ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL))
                $flag = 0
        Else ;自动换行,无水平滚动条
                $text = GUICtrlRead($Edit1)
                $text = StringReplace($text, @CRLF, "")
                GUICtrlDelete($Edit1)
                $Edit1 = GUICtrlCreateEdit($text, 0, 0, 190, 190, bitor($ES_MULTILINE, $ES_WANTRETURN, $WS_HSCROLL, $ES_AUTOHSCROLL))
                $flag = 1
        EndIf
        GUICtrlSetState($Button1, $GUI_ENABLE)
EndFunc
页: [1]
查看完整版本: 求助设置edit控件样式的问题