Изменить вид курсора TEdit или другого элемента управления Windows
Звонок в Microsoft:
-Здравствуйте, 3 года назад я установила Windows 95. За все время работы не было ни одного сбоя. Подскажите, что я неправильно делаю?
В примере показано как создать два цветных "bitmap'а": "улыбчивый" и "хмурый" и присвоить их курсору edit'а. Для этого нужно перехватить оконную процедуру edit'а. Чтобы сделать это заменим адрес оконной процедуры Edit'а нашим собственным, а старую оконную процедуру будем вызывать по необходимости. Пример показывает "улыбчивый" курсор при наборе текста и "хмурый" при забое клавишей backspace.
Программа на Delphi, демонстрирующая изменение курсора для контрола редактирования в Windows. Программа создает два битмап-изображения, одно для курсора "улыбка" и другое для курсора "грусть", используя шрифт Wingdings. Затем она заменяет оригинальную процедуру окна контрола на новую пользовательскую процедуру, которая устанавливает изображение курсора в зависимости от ввода пользователя.
Обзор кода:
Определен класс TForm1, который наследуется от TForm. Он имеет два приватных переменных CaretBm и CaretBmBk, которые используются для хранения битмап-изображений для курсоров.
В процедуре FormCreate программа создает битмап-изображения, используя шрифт Wingdings, и настраивает их свойства соответственно.
Определена функция NewWindowProc, которая является пользовательской процедурой окна, заменяющей оригинальную для контрола редактирования. Она проверяет конкретные сообщения окон (WM_SETFOCUS, WM_KILLFOCUS и WM_KEYDOWN) и устанавливает изображение курсора в зависимости от ввода пользователя.
В процедуре FormCreate программа привязывает процедуру окна контрола к новой пользовательской процедуре, используя функцию SetWindowLong.
В процедуре FormDestroy программа разъединяет процедуру окна контрола и освобождает память, выделенную для битмап-изображений.
Результатом программы является изменение курсора контрола редактирования на изображение "улыбка" при фокусировке на него или вводе символов, а на изображение "грусть" при нажатии клавиши "Backspace". Это достигается путем переопределения оригинальной процедуры окна контрола редактирования на новую пользовательскую процедуру, которая устанавливает изображение курсора в зависимости от ввода пользователя.
Альтернативное решение с использованием встроенной поддержки Delphi для курсоров:
В этом альтернативном решении программа устанавливает курсор контрола редактирования на изображение "улыбка" с помощью свойства Cursor. Процедура FormCreate устанавливает начальную курсор на изображение "улыбка", когда форма создается, а процедура FormDestroy сбрасывает ее в стандартный стрелочный курсор, когда форма уничтожается.
Процедура Edit1MouseMove используется для изменения курсора в зависимости от ввода пользователя. Она проверяет, является ли режим перетаскивания текстом (т.е., пользователь вводит символы), и устанавливает курсор на изображение "улыбка" соответственно. В противном случае она сбрасывает курсор в стандартный стрелочный курсор.
Изменение вид курсора TEdit или другого элемента управления Windows с помощью перехвата оконной процедуры и создания битмапов различных изображений.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.