Что нового

Edit/Input как применить (отменить) стиль $ES_PASSWORD

pvnn

Осваивающий
Сообщения
305
Репутация
32
Всем доброго времени суток. Помогите пожалуйста разобраться

Есть Input cо звездочками ($ES_PASSWORD), как данный стиль применить или отменить в форме

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 321, 119, 357, 208)
$Input1 = GUICtrlCreateInput("", 64, 13, 225, 21,BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
$Label1 = GUICtrlCreateLabel("Пароль:", 8, 16, 45, 17)
$Checkbox1 = GUICtrlCreateCheckbox("Показать пароль", 64, 48, 145, 17)
$Button1 = GUICtrlCreateButton("ОК", 80, 80, 75, 25)
$Button2 = GUICtrlCreateButton("Отмена", 160, 80, 75, 25)
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE,$Button2
			Exit
		Case $Checkbox1
			If GUICtrlRead($Checkbox1)=1 Then
				GUICtrlSetStyle($Input1,$GUI_SS_DEFAULT_INPUT)
			Else
				GUICtrlSetStyle($Input1,BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
			EndIf
	EndSwitch
WEnd


И еще вопрос: Как применить стиль $ES_PASSWORD к Edit (если такое вообще возможно)?
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
pvnn
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("", 321, 119, 357, 208)
$Input1 = GUICtrlCreateInput("", 64, 13, 225, 21)
__SetPasswordChar($Form1,GUICtrlGetHandle($Input1),-1,9679)
$Label1 = GUICtrlCreateLabel("Пароль:", 8, 16, 45, 17)
$Checkbox1 = GUICtrlCreateCheckbox("Показать пароль", 64, 48, 145, 17)
$Button1 = GUICtrlCreateButton("ОК", 80, 80, 75, 25)
$Button2 = GUICtrlCreateButton("Отмена", 160, 80, 75, 25)
GUISetState(@SW_SHOW)
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE,$Button2
            Exit
        Case $Checkbox1
            If BitAND(GUICtrlRead($Checkbox1),$gui_checked)=$gui_checked Then
                __SetPasswordChar($Form1,GUICtrlGetHandle($Input1),-1,0)
            ElseIf BitAND(GUICtrlRead($Checkbox1),$gui_unchecked)=$gui_unchecked Then
				__SetPasswordChar($Form1,GUICtrlGetHandle($Input1),-1,9679)
            EndIf
    EndSwitch
WEnd
Func __SetPasswordChar($hWnd,$hCtrl,$iToggleState,$sPassChar)
    If Not IsHWnd($hWnd) Then
        $hWnd = WinGetHandle($hWnd)
    EndIf
    If Not IsHWnd($hCtrl) Then
        $hCtrl = ControlGetHandle($hWnd, "", $hCtrl)
    EndIf
    Local Const $EM_SETPASSWORDCHAR = 0xCC
    Local Const $EM_GETPASSWORDCHAR = 0xD2
    Local $iGet_Pass_Char, $iSet_Pass_Char, $iDef_Pass_Char = 9679
    Local $aRet = DllCall("user32.dll", "long", "SendMessageW", "hwnd", $hCtrl, "int", $EM_GETPASSWORDCHAR, "int", 0, "int", 0)
    If Not @error And $aRet[0] Then
        $iGet_Pass_Char = $aRet[0]
    EndIf
    If $sPassChar = -1 Then
        $iSet_Pass_Char = $iGet_Pass_Char
    Else
        If StringLen($sPassChar) = 1 And IsString($sPassChar) Then
            $iSet_Pass_Char = Asc($sPassChar)
        Else
            $iSet_Pass_Char = Number($sPassChar)
        EndIf
        $iDef_Pass_Char = $iSet_Pass_Char
    EndIf
    If $iToggleState = -1 Then
        If $iGet_Pass_Char <> 0 Then
            $iSet_Pass_Char = 0
        Else
            $iSet_Pass_Char = $iDef_Pass_Char
        EndIf
    ElseIf $iToggleState = 0 Then
        $iSet_Pass_Char = 0
    ElseIf $iToggleState = 1 Then
        $iSet_Pass_Char = $iDef_Pass_Char
    EndIf
    DllCall("user32.dll", "none", "SendMessageW", "hwnd", $hCtrl, "int", $EM_SETPASSWORDCHAR, "int", $iSet_Pass_Char, "int", 0)
    DllCall("user32.dll", "none", "InvalidateRect", "hwnd", $hCtrl, "ptr", 0, "int", 1)
EndFunc
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
MnM спасибо за помощь
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
http://autoit-script.ru/index.php/topic,5547.0.html
 
Верх