Skip to main content

Передача активности окну

Аватар пользователя Shader
Не в сети
Студент
Зарегистрирован: 15.10.2005
Сообщения: 706
Баллы: 729
Передача активности окну

Проблема такова:
Нажатие на кнопку выполняет следующие операции в данной последовательности :
1. Сворачивает окно(1), являющееся владелецем кнопки (то окно на котором стоит кнопка), через WindowsState := wsMiniMized
2. Открывает уже созданное другое окно(2) через ShowModal

Как я понял операция сворачивания переводит активность на то окно(Innocent, которое имело фокус до открытия окна(1), а мне нужно чтобы активность получило окно(2).

Помогите это реализовать (наверное придётся перехватить WindowsMessage)!

AMD
Не в сети
Студент
Зарегистрирован: 15.07.2006
Сообщения: 149
Баллы: 149
Передача активности окну

Api Guider (allapi.net вроде) Раздел Window есть пример такой лажи
Правда декларации на VB, а тебе на дельфях походу надо, но какая разница этож апи

Аватар пользователя Shader
Не в сети
Студент
Зарегистрирован: 15.10.2005
Сообщения: 706
Баллы: 729
Передача активности окну

А можешь выложить на форум этот пример, если не сложно?

AMD
Не в сети
Студент
Зарегистрирован: 15.07.2006
Сообщения: 149
Баллы: 149
Передача активности окну

инета нет, так бы скачал самому нужен, рульный справочник, свыше 1500 АПИ и примеры на каждый случай
около 4 метров весит всего

Аватар пользователя Shader
Не в сети
Студент
Зарегистрирован: 15.10.2005
Сообщения: 706
Баллы: 729
Передача активности окну

ftp://biker.centr.lan/UPLOAD/ agsetup.rar
качай!
Помоги найти мне что надо!

AMD
Не в сети
Студент
Зарегистрирован: 15.07.2006
Сообщения: 149
Баллы: 149
Передача активности окну

спасибо за ссылочку

если я правильно конечно понял суть твоей проблемы, то тебе наверно надо это

'This program needs two forms, two buttons and a module
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail:
Private Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Command1_Click()
'in form1
'Set Form2 on top
BringWindowToTop Form2.hwnd
End Sub
Private Sub Form_Load()
'in form1
Form2.Visible = True
End Sub
Private Sub Command1_Click()
'in form2
'Set Form1 on top
BringWindowToTop Form1.hwnd
End Sub

применять на событие онминиминизед

Аватар пользователя Shader
Не в сети
Студент
Зарегистрирован: 15.10.2005
Сообщения: 706
Баллы: 729
Передача активности окну

BringWindowToTop уже пользовался - не помогает... Sad

Как я вижу проблему:
Сворачивание происходит дольше и поэтому активность передаётся ранее активному окну, поэтому мне кажется что надо перехватить функцию сворачивания и там уже вставить BringWindowToTop - может получиться ?

AMD
Не в сети
Студент
Зарегистрирован: 15.07.2006
Сообщения: 149
Баллы: 149
Передача активности окну

вроде нашлось решение попроще
апи функция SetParent
должна установить переходящий после закрытия(сворачивания) активного окна фокус на нужное.

если не получится попробуй CallWindowProc (function passes message information to the specified window procedure). Как ты и говорил вобщем

Аватар пользователя Shader
Не в сети
Студент
Зарегистрирован: 15.10.2005
Сообщения: 706
Баллы: 729
Передача активности окну

Извини меня конечно, но я только только начал разбираться в этом Delph'е, поэтому можешь привети конретные примеры:
1. SetParent вместо параметров

HWND SetParent
(
HWND hWndChild, // handle of window whose parent is changing
HWND hWndNewParent // handle of new parent window
);

просит TWinControl

2. А насчёт CallWindowProc вообще не понял ничего....

AMD
Не в сети
Студент
Зарегистрирован: 15.07.2006
Сообщения: 149
Баллы: 149
Передача активности окну

я за делфи ваще не сидел никогда ( далеко не на аисе учусь)
ща помоюсь и разберемся.

Аватар пользователя Aven
Не в сети
Гражданин
Зарегистрирован: 08.05.2007
Сообщения: 1318
Баллы: 1375
Передача активности окну

когда научимся пользоваться поиском в SDK ?

The SetActiveWindow function activates a window. </p>
<p>HWND SetActiveWindow(</p>
<p>    HWND hWnd     // handle of window to activate<br />
   );

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".