Что нового

Как убрать курсор из поля Edit

sasha-ld

Новичок
Сообщения
48
Репутация
0
Здравствуйте!
Есть такая проблемка, при нажатии на поле 'Edit' в нём начинает мигать курсор, так вот, можно ли сделать так чтобы при нажатии курсор не мигал, и мышкой тоже ничего не выделялось.
Спасибо за внимание.
 

VladUs

Скриптер
Сообщения
621
Репутация
181
sasha-ld [?]
можно ли сделать так чтобы при нажатии курсор не мигал, и мышкой тоже ничего не выделялось.

Можно так, при этом остается возможность редактировать текст :

Код:
#Include <GuiEdit.au3>
$hGUI = GUICreate("Gui")
$hEdit = GUICtrlCreateEdit("Курсора нет и ничего нельзя выделить, " & @CRLF & "но можно редактировать",0,0,400,400)
GUISetState()
DllCall("User32.dll","Int","HideCaret","HWnd",0)
While GUIGetMsg() <> -3
	$Ed =_GUICtrlEdit_GetSel($hEdit)
	If $Ed[0]>= 0  Then
		_GUICtrlEdit_SetSel($hEdit, -1, -1)
	EndIf
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
sasha-ld,
Немного измененный вариант VladUs
Код:
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <WinAPIEx.au3>

$fShowCaret = True

$hGUI = GUICreate('Test', 250, 250)
$hEdit = GUICtrlCreateEdit('Test', 5, 5, 230, 195)
$nButtonHide = GUICtrlCreateButton('Hide Caret', 30, 210, 80, 30)
$nButtonShow = GUICtrlCreateButton('Show Caret', 140, 210, 80, 30)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUISetState()

While 1
	If Not $fShowCaret Then
		$aEdit = _GUICtrlEdit_GetSel($hEdit)
		If $aEdit[0] >= 0 Then
			_GUICtrlEdit_SetSel($hEdit, -1, -1)
		EndIf
	EndIf
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButtonHide
			$fShowCaret = False
		Case $nButtonShow
			$fShowCaret = True
	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
	Switch $hWnd
		Case $hGUI
			Switch BitAND($wParam, 0xFFFF)
				Case $hEdit
					Switch BitShift($wParam, 16)
						Case $EN_SETFOCUS
							If $fShowCaret Then
								_WinAPI_ShowCaret($lParam)
							Else
								_WinAPI_HideCaret($lParam)
							EndIf
						Case $EN_KILLFOCUS
							If $fShowCaret Then
								_WinAPI_HideCaret($lParam)
							Else
								_WinAPI_ShowCaret($lParam)
							EndIf
					EndSwitch
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
 
Автор
S

sasha-ld

Новичок
Сообщения
48
Репутация
0
Спасибо большое очень помогло, особенно понравилось от 'madmasles' , всё работает. :smile:
Ох уж эти WinApi никак не могу разбраться в них. :(
Очень признателен!
 
Верх