Что нового

Массивы Проверка на нажатый элемент через AdlibRegister

smsgeorge

Новичок
Сообщения
63
Репутация
0
Здравствуйте! Како оптимально в режиме Opt("GUIOnEventMode", 1), проверять на какой элемент я нажал, если у меня их 120 элементов. Процесс проверки вызывается командой AdlibRegister. Как правильно сделать? Такое ощущение, но не уверен, что for долгий для программы.
Первый, долгий вариант по оформлению
Код:
Func _Poluchaem_znachenie()
    $aInfo = GUIGetCursorInfo($mainwindow[1])
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Switch $aInfo[4]
       case (едит 1)

       case (едит 2)
    EndSwitch

    $aInfo = GUIGetCursorInfo($mainwindow[2])
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Switch $aInfo[4]
       case (едит 1)

       case (едит 2)
    EndSwitch
EndFunc

Второй,
Код:
Func _Poluchaem_znachenie()
fot $i=1 to Ряд_едит  ;кнопок - едит, 6 в ряд.
    $aInfo = GUIGetCursorInfo($mainwindow[Ряд_едит])
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Switch $aInfo[4]
       case (едит [(Ряд_едит-1)*6+1]

       case (едит [(Ряд_едит-1)*6+2]
    EndSwitch
next
EndFunc
 

Вложения

  • сам код.txt
    18.9 КБ · Просмотры: 3
Последнее редактирование:

Norm

Продвинутый
Сообщения
269
Репутация
70
А где Ваш GUI?

при создании элементов GUI нужно "привязывать" этот элемент к функции с помощью GUICtrlSetOnEvent
и больше ничего делать не надо. При наживании на кнопку нужная функция будет вызываться. Смотрите примеры в справке.
 
Автор
S

smsgeorge

Новичок
Сообщения
63
Репутация
0
А где Ваш GUI?

при создании элементов GUI нужно "привязывать" этот элемент к функции с помощью GUICtrlSetOnEvent
и больше ничего делать не надо. При наживании на кнопку нужная функция будет вызываться. Смотрите примеры в справке.
там едит, не кнопки, я неправильно написал . Исправил.
 

Norm

Продвинутый
Сообщения
269
Репутация
70
В этом примере думаю вы найдете обработку всех событий для Edit
Код:
#include <GuiEdit.au3>
#include <WinAPI.au3> 
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

Opt("GUIOnEventMode", 1)  ; Включает режим OnEvent
Global $hGUI = GUICreate("Привет мир", 400, 150)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
Global $hEdit = GUICtrlCreateEdit("Привет мир! Как дела?", 5, 5, 390, 100)
Global $okbutton = GUICtrlCreateButton("OK", 180, 120, 60)
GUICtrlSetOnEvent($okbutton, "OKButton")
GUISetState()

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
  Sleep(1000)  ; Цикл ожидания
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
    If Not IsHWnd($hEdit) Then $hWndEdit = GUICtrlGetHandle($hEdit)
    $hWndFrom = $ilParam
    $iIDFrom = _WinAPI_LoWord($iwParam)
    $iCode = _WinAPI_HiWord($iwParam)
    Switch $hWndFrom
        Case $hEdit, $hWndEdit
            Switch $iCode
                Case $EN_ALIGN_LTR_EC ; Высылается, когда пользователь изменяет направление текста в окне редактирования в состояние слева-направо
                    _DebugPrint("$EN_ALIGN_LTR_EC" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_ALIGN_RTL_EC ; Высылается, когда пользователь изменяет направление текста в окне редактирования в состояние справа-налево
                    _DebugPrint("$EN_ALIGN_RTL_EC" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_CHANGE ; Высылается, когда пользователь выполнил действие, которое может изменить текст в окне редактирования
                    _DebugPrint("$EN_CHANGE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_ERRSPACE ; Высылается, когда окно редактирования не может выделить достаточно памяти для выполнения определённого запроса
                    _DebugPrint("$EN_ERRSPACE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_HSCROLL ; Высылается, когда пользователь кликает горизонтальную прокрутку в окне редактирования
                    _DebugPrint("$EN_HSCROLL" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_KILLFOCUS ; Высылается, когда окно редактирования теряет фокус
                    _DebugPrint("$EN_KILLFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_MAXTEXT ; Высылается, когда текущий вставляемый текст превысил указанное число символов для окна редактирования
                    _DebugPrint("$EN_MAXTEXT" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Это сообщение также высылается, когда окно редактирования не имеет стиля $ES_AUTOHSCROLL и количество символов, которое будет вставлено превысит ширину окна редактирования.
                    ; Это сообщение также высылается, когда окно редактирования не имеет стиля $ES_AUTOVSCROLL и общее количество строк в результате вставки текста будет превышать высоту окна редактирования.

                    ; Нет возвращаемых значений
                Case $EN_SETFOCUS ; Высылается, когда окно редактирования получает фокус
                    _DebugPrint("$EN_SETFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_UPDATE ; Высылается, когда окно редактирования собирается перерисовать себя
                    _DebugPrint("$EN_UPDATE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_VSCROLL ; Высылается, когда пользователь кликает вертикальную прокрутку в окне редактирования или прокручивает её колесом мыши
                    _DebugPrint("$EN_VSCROLL" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func _DebugPrint($s_text, $line = @ScriptLineNumber)
    ConsoleWrite( _
            "!===========================================================" & @LF & _
            "+======================================================" & @LF & _
            "-->Строка(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
            "+======================================================" & @LF)
EndFunc   ;==>_DebugPrint

Func OKButton()
  ;Примечание: в этом месте @GUI_CtrlId равен $okbutton,
  MsgBox(0, "GUI Event", "Вы нажали OK!")
EndFunc


Func CLOSEClicked()
  ;Примечание: в этом месте @GUI_CtrlId равен $GUI_EVENT_CLOSE,
  ;@GUI_WinHandle может быть либо $mainwindow, либо $dummywindow
  If @GUI_WinHandle = $hGUI Then
    MsgBox(0, "GUI Event", "Вы нажали CLOSE в основном окне! Завершаем...")
    Exit
  EndIf
EndFunc
 
Последнее редактирование:
Автор
S

smsgeorge

Новичок
Сообщения
63
Репутация
0
В этом примере думаю вы найдете обработку всех событий для Edit
Код:
#include <GuiEdit.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

Opt("GUIOnEventMode", 1)  ; Включает режим OnEvent
Global $hGUI = GUICreate("Привет мир", 400, 150)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
Global $hEdit = GUICtrlCreateEdit("Привет мир! Как дела?", 5, 5, 390, 100)
Global $okbutton = GUICtrlCreateButton("OK", 180, 120, 60)
GUICtrlSetOnEvent($okbutton, "OKButton")
GUISetState()

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
  Sleep(1000)  ; Цикл ожидания
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
    If Not IsHWnd($hEdit) Then $hWndEdit = GUICtrlGetHandle($hEdit)
    $hWndFrom = $ilParam
    $iIDFrom = _WinAPI_LoWord($iwParam)
    $iCode = _WinAPI_HiWord($iwParam)
    Switch $hWndFrom
        Case $hEdit, $hWndEdit
            Switch $iCode
                Case $EN_ALIGN_LTR_EC ; Высылается, когда пользователь изменяет направление текста в окне редактирования в состояние слева-направо
                    _DebugPrint("$EN_ALIGN_LTR_EC" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_ALIGN_RTL_EC ; Высылается, когда пользователь изменяет направление текста в окне редактирования в состояние справа-налево
                    _DebugPrint("$EN_ALIGN_RTL_EC" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_CHANGE ; Высылается, когда пользователь выполнил действие, которое может изменить текст в окне редактирования
                    _DebugPrint("$EN_CHANGE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_ERRSPACE ; Высылается, когда окно редактирования не может выделить достаточно памяти для выполнения определённого запроса
                    _DebugPrint("$EN_ERRSPACE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_HSCROLL ; Высылается, когда пользователь кликает горизонтальную прокрутку в окне редактирования
                    _DebugPrint("$EN_HSCROLL" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_KILLFOCUS ; Высылается, когда окно редактирования теряет фокус
                    _DebugPrint("$EN_KILLFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_MAXTEXT ; Высылается, когда текущий вставляемый текст превысил указанное число символов для окна редактирования
                    _DebugPrint("$EN_MAXTEXT" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Это сообщение также высылается, когда окно редактирования не имеет стиля $ES_AUTOHSCROLL и количество символов, которое будет вставлено превысит ширину окна редактирования.
                    ; Это сообщение также высылается, когда окно редактирования не имеет стиля $ES_AUTOVSCROLL и общее количество строк в результате вставки текста будет превышать высоту окна редактирования.

                    ; Нет возвращаемых значений
                Case $EN_SETFOCUS ; Высылается, когда окно редактирования получает фокус
                    _DebugPrint("$EN_SETFOCUS" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_UPDATE ; Высылается, когда окно редактирования собирается перерисовать себя
                    _DebugPrint("$EN_UPDATE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
                Case $EN_VSCROLL ; Высылается, когда пользователь кликает вертикальную прокрутку в окне редактирования или прокручивает её колесом мыши
                    _DebugPrint("$EN_VSCROLL" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Нет возвращаемых значений
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func _DebugPrint($s_text, $line = @ScriptLineNumber)
    ConsoleWrite( _
            "!===========================================================" & @LF & _
            "+======================================================" & @LF & _
            "-->Строка(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
            "+======================================================" & @LF)
EndFunc   ;==>_DebugPrint

Func OKButton()
  ;Примечание: в этом месте @GUI_CtrlId равен $okbutton,
  MsgBox(0, "GUI Event", "Вы нажали OK!")
EndFunc


Func CLOSEClicked()
  ;Примечание: в этом месте @GUI_CtrlId равен $GUI_EVENT_CLOSE,
  ;@GUI_WinHandle может быть либо $mainwindow, либо $dummywindow
  If @GUI_WinHandle = $hGUI Then
    MsgBox(0, "GUI Event", "Вы нажали CLOSE в основном окне! Завершаем...")
    Exit
  EndIf
EndFunc
я попробовал этот код, не понял как он работает , ничего не происходит.
 

Norm

Продвинутый
Сообщения
269
Репутация
70
я попробовал этот код, не понял как он работает , ничего не происходит.
Если Вы используете в качестве редактора SciTE, то в самом низу окна есть консоль вывода.
Там Вы можете видеть все события в виде сообщений.
Функция _DebugPrint() все эти сообщения в консоль
Если Вы подставите вместо неё Вашу функцию то она тоже будет выполняться при нужном Вам событии.
Конкретно в Вашем случае нужно смотреть событие $EN_SETFOCUS
4984b9074391.gif

Если всё же не разобрались, то вот пример попроще
Код:
#include <GuiEdit.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

Opt("GUIOnEventMode", 1)  ; Включает режим OnEvent
Global $hGUI = GUICreate("Привет мир", 400, 150)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
Global $hEdit1 = GUICtrlCreateEdit("Edit-1", 5, 5, 170, 100)
Global $hEdit2 = GUICtrlCreateEdit("Edit-2", 190, 5, 170, 100)
Global $okbutton = GUICtrlCreateButton("OK", 180, 120, 60)
GUICtrlSetOnEvent($okbutton, "OKButton")
GUISetState()

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
  Sleep(1000)  ; Цикл ожидания
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom = $ilParam
    Local $hWndEdit1 = GUICtrlGetHandle($hEdit1)
    Local $hWndEdit2 = GUICtrlGetHandle($hEdit2)
    Local $iCode = _WinAPI_HiWord($iwParam)
    Switch $hWndFrom
        Case $hWndEdit1, $hWndEdit2
            Switch $iCode
                Case $EN_SETFOCUS ; Высылается, когда окно редактирования получает фокус
                    If $hWndFrom = $hWndEdit1 Then
                        MsgBox(0, "GUI Event", "Фокус в Edit-1")
                    Else
                        MsgBox(0, "GUI Event", "Фокус в Edit-2")
                    EndIf
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func OKButton()
  ;Примечание: в этом месте @GUI_CtrlId равен $okbutton,
  MsgBox(0, "GUI Event", "Вы нажали OK!")
EndFunc


Func CLOSEClicked()
  ;Примечание: в этом месте @GUI_CtrlId равен $GUI_EVENT_CLOSE,
  ;@GUI_WinHandle может быть либо $mainwindow, либо $dummywindow
  If @GUI_WinHandle = $hGUI Then
    MsgBox(0, "GUI Event", "Вы нажали CLOSE в основном окне! Завершаем...")
    Exit
  EndIf
EndFunc
 
Последнее редактирование:
Автор
S

smsgeorge

Новичок
Сообщения
63
Репутация
0
Если Вы используете в качестве редактора SciTE, то в самом низу окна есть консоль вывода.
Там Вы можете видеть все события в виде сообщений.
Функция _DebugPrint() все эти сообщения в консоль
Если Вы подставите вместо неё Вашу функцию то она тоже будет выполняться при нужном Вам событии.
Конкретно в Вашем случае нужно смотреть событие $EN_SETFOCUS
4984b9074391.gif

Если всё же не разобрались, то вот пример попроще
Код:
#include <GuiEdit.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

Opt("GUIOnEventMode", 1)  ; Включает режим OnEvent
Global $hGUI = GUICreate("Привет мир", 400, 150)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
Global $hEdit1 = GUICtrlCreateEdit("Edit-1", 5, 5, 170, 100)
Global $hEdit2 = GUICtrlCreateEdit("Edit-2", 190, 5, 170, 100)
Global $okbutton = GUICtrlCreateButton("OK", 180, 120, 60)
GUICtrlSetOnEvent($okbutton, "OKButton")
GUISetState()

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
  Sleep(1000)  ; Цикл ожидания
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom = $ilParam
    Local $hWndEdit1 = GUICtrlGetHandle($hEdit1)
    Local $hWndEdit2 = GUICtrlGetHandle($hEdit2)
    Local $iCode = _WinAPI_HiWord($iwParam)
    Switch $hWndFrom
        Case $hWndEdit1, $hWndEdit2
            Switch $iCode
                Case $EN_SETFOCUS ; Высылается, когда окно редактирования получает фокус
                    If $hWndFrom = $hWndEdit1 Then
                        MsgBox(0, "GUI Event", "Фокус в Edit-1")
                    Else
                        MsgBox(0, "GUI Event", "Фокус в Edit-2")
                    EndIf
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func OKButton()
  ;Примечание: в этом месте @GUI_CtrlId равен $okbutton,
  MsgBox(0, "GUI Event", "Вы нажали OK!")
EndFunc


Func CLOSEClicked()
  ;Примечание: в этом месте @GUI_CtrlId равен $GUI_EVENT_CLOSE,
  ;@GUI_WinHandle может быть либо $mainwindow, либо $dummywindow
  If @GUI_WinHandle = $hGUI Then
    MsgBox(0, "GUI Event", "Вы нажали CLOSE в основном окне! Завершаем...")
    Exit
  EndIf
EndFunc
А если я уже внутри едит, то есть я нажал на едит, он поймал фокус, если снова нажимаю?, Функция не срабатывает.
Это легче для компьютера? Вот вообще такой способ, чем for? и если у тебя будет 100 элементов, в примере тоже через свитч.
 

Norm

Продвинутый
Сообщения
269
Репутация
70
А если я уже внутри едит, то есть я нажал на едит, он поймал фокус, если снова нажимаю?, Функция не срабатывает.
Каково предназначение этих Edit? Если Вы будите там текст менять или печатать, то можно использовать событие $EN_CHANGE
Может лучше использовать не Edit. Но если нужен Edit, то как вариант можно попробовать отслеживать нажатие Мыши, и если это произошло в Edit с фокусом то ...
Это легче для компьютера? Вот вообще такой способ, чем for? и если у тебя будет 100 элементов, в примере тоже через свитч
Что быстрее будет работать, Вы сами сможете проверить с помощью TimerInit
С For код получится компактней.
Если по простому, то не важно сколько элементов, событие одно на всех. Нужно только определить от какого элемента.
При количестве 100 вы не заметите ничего.
 
Автор
S

smsgeorge

Новичок
Сообщения
63
Репутация
0
Каково предназначение этих Edit? Если Вы будите там текст менять или печатать, то можно использовать событие $EN_CHANGE
Может лучше использовать не Edit. Но если нужен Edit, то как вариант можно попробовать отслеживать нажатие Мыши, и если это произошло в Edit с фокусом то ...

Что быстрее будет работать, Вы сами сможете проверить с помощью TimerInit
С For код получится компактней.
Если по простому, то не важно сколько элементов, событие одно на всех. Нужно только определить от какого элемента.
При количестве 100 вы не заметите ничего.
Я нажимаю на едит и от туда копируется текст. Их я сделал только для чтения.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Я нажимаю на едит и от туда копируется текст. Их я сделал только для чтения.
Даже если эдит только для чтения, в нём можно выделить текст и скопировать с помощью всплывающего меню или горячих клавиш.
Для быстрого копирования обычно рядом делают кнопку. Потому что копирование текста при клике в эдит - это нестандартное поведение.
Но если очень надо, то как вариант
Код:
#include <GuiConstants.au3>

GUICreate("Edit")
$Edit1 = GUICtrlCreateInput("один", 5, 5, 100, -1, $ES_READONLY)
$Edit2 = GUICtrlCreateInput("два", 5, 35, 100, -1, $ES_READONLY)
$Edit3 = GUICtrlCreateEdit("три" & @CRLF & "четыре", 5, 65, 100, -1, $ES_READONLY)
GUICtrlCreateButton("кнопка", 5, 250, 100)
GUISetState()

Do
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      Exit
    Case $GUI_EVENT_PRIMARYDOWN
      $ID = GUIGetCursorInfo()[4]
      Switch $ID
        Case $Edit1, $Edit2, $Edit3
          MsgBox(0, "", GUICtrlRead($ID))
      EndSwitch
  EndSwitch
Until 0
 
Автор
S

smsgeorge

Новичок
Сообщения
63
Репутация
0
Даже если эдит только для чтения, в нём можно выделить текст и скопировать с помощью всплывающего меню или горячих клавиш.
Для быстрого копирования обычно рядом делают кнопку. Потому что копирование текста при клике в эдит - это нестандартное поведение.
Но если очень надо, то как вариант
Код:
#include <GuiConstants.au3>

GUICreate("Edit")
$Edit1 = GUICtrlCreateInput("один", 5, 5, 100, -1, $ES_READONLY)
$Edit2 = GUICtrlCreateInput("два", 5, 35, 100, -1, $ES_READONLY)
$Edit3 = GUICtrlCreateEdit("три" & @CRLF & "четыре", 5, 65, 100, -1, $ES_READONLY)
GUICtrlCreateButton("кнопка", 5, 250, 100)
GUISetState()

Do
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      Exit
    Case $GUI_EVENT_PRIMARYDOWN
      $ID = GUIGetCursorInfo()[4]
      Switch $ID
        Case $Edit1, $Edit2, $Edit3
          MsgBox(0, "", GUICtrlRead($ID))
      EndSwitch
  EndSwitch
Until 0
у меня просто, нажал на едит, всё скопировалось.
 
Верх