New Page 1
Delphi: Изменим
размер и местоположение кнопочки "пуск" (MoveWindow,
FindWindow).
Сделать это довольно просто:
procedure
TfrmStartMove.btnStartMoveClick(Sender: TObject);
begin
MoveWindow(FindWindowEx(FindWindow('Shell_TrayWnd',
nil), 0, 'Button', nil), 200, 0,
110, 32, true);
end; |
А вот результат:
Теперь разберем функции API,
используемые в данной программке.
MoveWindow
Синтаксис:
BOOL MoveWindow
(
HWND hWnd, // дескриптор окна
int X, // позиция по горизонтали
int Y, // позиция по вертикали
int nWidth, // ширина
int nHeight, // высота
BOOL bRepaint // флажок перекраски
);
|
Параметры:
hWnd
Идентифицирует окно.
X
Устанавливает новую позицию левой стороны окна.
Y
Устанавливает новую позицию верхней части окна.
nWidth
Устанавливает новую ширину окна.
nHeight
Устанавливает новую высоту окна.
bRepaint
Определяет, должно ли окно быть перекрашено. Если этот параметр - ИСТИНА (TRUE),
окно принимает сообщение WM_PAINT. Если параметр - ЛОЖЬ(FALSE),
никакого перекрашивания какого-либо сорта не происходит. Это применяется к
рабочей области, нерабочей области (включая строку заголовка и линейки
прокрутки) и любой части родительского окна, раскрытого в результате перемещения
дочернего окна. Если этот параметр - ЛОЖЬ(FALSE), прикладная
программа должна явно аннулировать или перерисовать любые части окна и
родительского окна, которые нуждаются в перерисовке.
Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля. Если
функция потерпела неудачу, возвращаемое значение - ноль.
Замечания
Если параметр bRepaint - ИСТИНА (TRUE), Windows
посылает сообщение WM_PAINT оконной процедуре немедленно после
перемещения окна (то есть функция MoveWindow вызывает функцию
UpdateWindow). Если bRepaint - ЛОЖЬ(FALSE),
Windows помещает сообщение WM_PAINT в очередь
сообщений, связанную с окном. Цикл сообщений посылает сообщение WM_PAINT
только после диспетчеризации всех других сообщений в очереди. Функция
MoveWindow посылает в окно сообщения WM_WINDOWPOSCHANGING,
WM_WINDOWPOSCHANGED, WM_MOVE, WM_SIZE
и WM_NCCALCSIZE.
Замечание, касаемо Delphi.
В Delphi функция MoveWindow
возвращает тип boolean, тоесть, true
или false;
FindWindowEx
Синтаксис:
function FindWindowEx(Parent, Child: HWND; ClassName,
WindowName: PChar): HWND; |
Описание:
Возвращает хендл окна. Находит окна по классу или имени окна,
в отличие от FindWindow работает с дочерними окнами, начиная с того хендл
которого передан в параметре Child.
Параметры
Parent: Хендл родительского окна, в дочерних окнах которого будет производиться
поиск.
Если Parent равен nil, то родительским окном будет рабочий
стол Windows.
Child: хендл дочернего окна начиная с которого будет
производиться поиск. Поиск происходит в Z-последовательности(верхнее-нижнее).
Дочернее окно, должно быть прямым потомком родительского окна.
Если Child равен nil, то поиск начнется с первого дочернего окна.
Если Parent и Child равны nil, то поиск идет среди всех окон верхнего уровня.
ClassName: Строка содержащая имя класса или атом указывающий
на строку с именем класса (созданные функциями
RegisterClass или RegisterClassEx). Если это атом, то он должен быть
глобальным(см. функцию GlobalAddAtom). Значение атома помещается в младшее
слово, старшее должно быть нулем.
WindowName: Строка содежащая имя(заголовок) окна. Если
значение этого параметра равно Nil, то совпадающими со строкой считаются все
имена окон.
Возвращаемые значения
В случае успеха возвращается дескриптор окна, которое имеет заданные имя класса
и имя окна.
В случае неудачи возвращается Nil. Для получения дополнительной информации об
ошибке вызовите функцию GetLastError .
FindWindow
Функция FindWindow
извлекает дескриптор окна верхнего уровня, имя класса и имя окна которого
соответствуют заданным строкам. Эта функция не ищет дочерние окна. Эта функция
не выполняет регистрозависимый поиск.
Чтобы найти дочерние окна, начинающиеся с заданного дочернего окна,
используют функцию FindWindowEx
Синтаксис
HWND FindWindow(
LPCTSTR lpClassName,
// указатель на имя
класса
LPCTSTR lpWindowName
// указатель на имя
окна
);
|
Параметры
lpClassName
[in]Указатель на строку с нулевым символом в конце, которая определяет имя
класса или класс атома, который создается предварительным вызовом функции
RegisterClass
или
RegisterClassEx.
Идентифицирует строку имени класса. Атом младшим словом параметра
lpClassName;
старшее слово должно быть нулевое.
Если параметр lpClassName
указывает на строку, он устанавливает имя класса окна. Имя класса может быть
любое имя, зарегистрированное функцией
RegisterClass или
RegisterClassEx,
или любым из предопределенных имен
классов органов управления.
lpWindowName
[in] Указывает на строку с нулевым символом в конце, которая определяет имя
окна (заголовок окна). Если этот параметр - ПУСТО (NULL), соответствуют имена
всех окон.
Возвращаемые значения
Если функция завершилась успешно, возвращаемое значение - дескриптор окна,
которое имеет заданное имя класса и имя окна.
Если функция завершается ошибкой, возвращаемое значение - ПУСТО (NULL). Чтобы
получить дополнительные данные об ошибках, вызовите функцию
GetLastError.
Замечания
Если параметр lpWindowName
не является значением ПУСТО (NULL), функция
FindWindow
вызывает функцию
GetWindowText, чтобы извлечь имя
окна для сравнения. За описанием потенциальной проблемы, которая может возникать
при этом, см. Замечания в статье
GetWindowText.
|