Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] GUICtrlCreateInput - маленький вопрос (http://forum.oszone.net/showthread.php?t=179677)

Centrinar 02-07-2010 13:15 1445923

GUICtrlCreateInput - маленький вопрос
 
GUICtrlCreateInput("Модель:", 190, 250, 260, 25) какможно сделать что бы при нажатии на строку ввода, слово "Модель:" пропадало

Creat0R 02-07-2010 13:32 1445941

Код:

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

GUICreate("Input Focus Demo", 500, 300)

$Input = GUICtrlCreateInput("Модель:", 190, 250, 260, 25)
$Exit = GUICtrlCreateButton("Exit", 20, 100, 60, 20)
GUICtrlSetState(-1, $GUI_FOCUS)

GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE, $Exit
            ExitLoop
    EndSwitch

WEnd

Func WM_COMMAND($hWnd, $nMsg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)

    Switch $nID
        Case $Input
            Switch $nNotifyCode
                Case $EN_SETFOCUS
                    If GUICtrlRead($Input) = "Модель:" Then
                        GUICtrlSetData($Input, "")
                    EndIf
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc

А вообще если я правильно понял, то тебе будет интересно это.
Немного улучшенная версия
Код:

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

GUICreate("_GUICtrlEdit_SetDefault")

Global $EDIT_DEF_ITEMS[1][2] = [[0, 0]]

$nEdit1 = GUICtrlCreateInput("", 5, 5, 100, 20)
_GUICtrlEdit_SetDefault($nEdit1, "This is the test", 0xFFC1C1, 0x0000FF)

$nEdit2 = GUICtrlCreateInput("", 5, 30, 100, 20)
_GUICtrlEdit_SetDefault($nEdit2, "Take 2.", 0x989898)

GUICtrlCreateInput("Just a standard input", 5, 55, 200, 20)
GUICtrlSetState(-1, $GUI_FOCUS)

GUISetState()

While GUIGetMsg() <> -3
WEnd

Func _GUICtrlEdit_SetDefault($hEdit, $sDefText, $nDefColor = 0x989898, $nTextColor = 0x000000)
    If $hEdit = 0 Then
        Return SetError(1, 0, 0)
    EndIf

    If $EDIT_DEF_ITEMS[0][0] = 0 Then
        GUIRegisterMsg($WM_COMMAND, "__EDIT_DEF_WM_COMMAND")
    EndIf

    If GUICtrlRead($hEdit) = "" Then
        GUICtrlSetColor($hEdit, $nDefColor)
        GUICtrlSetData($hEdit, $sDefText)
    EndIf

    $EDIT_DEF_ITEMS[0][0] += 1
    ReDim $EDIT_DEF_ITEMS[$EDIT_DEF_ITEMS[0][0] + 1][4]

    $EDIT_DEF_ITEMS[$EDIT_DEF_ITEMS[0][0]][0] = $hEdit
    $EDIT_DEF_ITEMS[$EDIT_DEF_ITEMS[0][0]][1] = $sDefText
    $EDIT_DEF_ITEMS[$EDIT_DEF_ITEMS[0][0]][2] = $nDefColor
    $EDIT_DEF_ITEMS[$EDIT_DEF_ITEMS[0][0]][3] = $nTextColor

    Return 1
EndFunc  ;==>_GUICtrlEdit_SetDefault

Func __EDIT_DEF_WM_COMMAND($hWnd, $msgID, $wParam, $lParam)
    Local $n = __EDIT_DEF_GETINDEX(BitAND($wParam, 0xFFFF))

    If $n = -1 Then
        Return $GUI_RUNDEFMSG
    EndIf

    Local $nMsg = BitShift($wParam, 16)

    If $nMsg = $EN_SETFOCUS Then ; Gained focus (EN_SETFOCUS)
        If (GUICtrlRead($EDIT_DEF_ITEMS[$n][0]) == $EDIT_DEF_ITEMS[$n][1]) Then
            GUICtrlSetColor($EDIT_DEF_ITEMS[$n][0], $EDIT_DEF_ITEMS[$n][3])
            GUICtrlSetData($EDIT_DEF_ITEMS[$n][0], "")
        EndIf
    ElseIf $nMsg = $EN_KILLFOCUS Then ; Lost Focus (EN_KILLFOCUS)
        If GUICtrlRead($EDIT_DEF_ITEMS[$n][0]) = "" Then
            GUICtrlSetColor($EDIT_DEF_ITEMS[$n][0], $EDIT_DEF_ITEMS[$n][2])
            GUICtrlSetData($EDIT_DEF_ITEMS[$n][0], $EDIT_DEF_ITEMS[$n][1])
        EndIf
    EndIf
EndFunc  ;==>__EDIT_DEF_WM_COMMAND

Func __EDIT_DEF_GETINDEX($hEdit)
    For $i = 1 To UBound($EDIT_DEF_ITEMS) - 1
        If $EDIT_DEF_ITEMS[$i][0] = $hEdit Then
            Return $i
        EndIf
    Next

    Return -1
EndFunc  ;==>__EDIT_DEF_GETINDEX


madmasles 02-07-2010 14:45 1445983

У меня так работает:
Код:

#include <GUIConstantsEx.au3>

$iCheck = 1
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 200, 100, -1, -1)
$Input1 = GUICtrlCreateInput("Input1", 10, 15, 180, 20)
$Input2 = GUICtrlCreateInput("Input2", 10, 45, 180, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
    If $iCheck Then
        If ControlGetFocus($Form1) = 'Edit1' Then
            GUICtrlSetData($Input1, "")
            $iCheck = 0
        EndIf
    EndIf
WEnd


Creat0R 02-07-2010 16:48 1446077

Цитата:

Цитата madmasles
У меня так работает »

У меня тоже, но это не самое оптимальное решение ;)

madmasles 02-07-2010 17:15 1446096

Цитата:

Цитата Creat0R
У меня тоже, но это не самое оптимальное решение »

А в каком случае этот вариант может не сработать?

Creat0R 02-07-2010 19:11 1446174

Цитата:

Цитата madmasles
в каком случае этот вариант может не сработать? »

А я не говорил что это может не сработать :).


Время: 16:51.

Время: 16:51.
© OSzone.net 2001-