Автор: Хованский Ян
Источник: http://yansoft.nm.ru
Вы
уже прочитали теоретическую часть, а сейчас перейдём к конкретным
примерам:
Пример
№1: Отмена последнего действия в тестовом поле
Для
начала рассмотрим простейший пример, сделаем отмену (Undo) последнего
действия в текстовом поле:
1.
Создайте новый проект
2. На созданную вместе с проектом форму добавьте Кнопку (cmdUndo)
и Текстовое Поле (txtUndo)
3. После перечисленных выше действий форма должна выглядеть примерно
так:

4.
Добавьте в модуль формы следующий код:
'Функция посылает окну сообщение
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg
As Long, _
ByVal wParam As Long, lParam As Any) As Long
'Идентификатор сообщения, отменяющего последнюю
операцию редактирования
Private Const EM_UNDO = &HC7
Private Sub cmdUndo_Click()
'Посылаем сообщение
текстовому полю, чтобы отменить последнее действие
SendMessage txtUndo.hwnd, EM_UNDO, 0,
0
End Sub
Теперь
нажимая кнопку, вы можете отменить последнюю операцию редактирования
текстового поля.
Пример можно скачать здесь
Пример
№2: Что скрывается под звёздочками?
Этот
пример будет посложнее. Мы создадим программу, которая будет раскрывать
звёздочки в паролях:
1.
Создайте новый проект
2. На созданную вместе с проектом форму добавьте 5 меток (lblHelp,
lblCursor, lblXY, lblWindow, lblHwnd), 1 таймер (tmrCrack), 1
кнопку (cmdExit), а также можете добавить одну картинку, для красоты:)
3. Элементы управления должны иметь следующие свойства:
Имя: |
Свойство: |
Значение: |
lblHelp |
Caption |
Наведите
курсор мыши на скрытую надпись, щёлкните по ней и надпись
раскроется!!! |
lblCursor |
Caption |
Текущие
координаты мыши: |
lblXY |
BorderStyle |
1 |
lblWindow |
Caption |
Манипулятор
окна: |
lblHwnd |
BorderStyle |
1 |
tmrCrack |
Interval |
1 |
cmdExit |
Caption |
&Закрыть |
4.
После перечисленных выше действий форма должна выглядеть примерно
так:

5.
Добавьте в модуль формы следующий код:
'Функция
определяет манипулятор окна по его координатам
Private Declare Function WindowFromPoint Lib "user32"
(ByVal xPoint As Long, ByVal yPoint As Long) As Long
'Посылает
окну сообщение
Private Declare Function SendMessage Lib "user32" Alias
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,
ByVal wParam As Long, lParam As Any) As Long
'Определяет
текущую позицию курсора
Private Declare Function GetCursorPos Lib "user32" (lpPoint
As POINTAPI) As Long
'Структура
POINTAPI
Private Type POINTAPI
x As Long
y As Long
End Type
'Идентификатор сообщения, задаёт
символ, используемый для ввода пароля
Private Const EM_SETPASSWORDCHAR = &HCC
Private
Sub cmdExit_Click()
Unload Me
End Sub
Private
Sub Timer1_Timer()
Dim hwnd As Long
Dim Curs As POINTAPI
'Определяем координаты
курсора
GetCursorPos Curs
'Определяем манипулятор
окна
hwnd = WindowFromPoint(Curs.x, Curs.y)
'Отображаем полученные
значения
lblHwnd.Caption = hwnd
lblXY.Caption = " X: " & Curs.x
& " Y: " & Curs.y
'Посылаем окну сообщение, чтобы звёздочек не было
SendMessage hwnd, EM_SETPASSWORDCHAR, 0, 0
End Sub
Теперь
с помощью этой программы вы можете раскрывать звёздочки в паролях,
для этого вам нужно навести курсор на скрытый пароль и кликнуть
по нему:

Пример можно скачать здесь
На
этом наше знакомство с сообщениями окон подходит к концу. Если
остались вопросы, пишите