Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.28;
Скачать: CL | DM;

Вниз

Активация формы   Найти похожие ветки 

 
sergserg   (2002-10-03 17:17) [0]

Здравствуйте уважаемые.
Вот возник вопрос.Есть работающее приложение.В нем несколько форм. Одна форма sayontop и вот необходимо чтобы при потере фокуса этой формы она опять стала активной (ввод был направлен в нее) Момент потери активации формы я отлавливаю через wm_activatepp а вот как сделать форму снова активной не получается. SetForegroundWindow() не помогает на первом контроле формі появляется ободок (дескать готов к вводу) а весь ввод с клаві по прежнему направлен на другое приложение.
Помогите. Очень надо!!!


 
Игорь Шевченко ©   (2002-10-03 17:24) [1]

В кладовке, в разделе "Готовые программы" есть программа StayOnTop - может, что оттуда пригодится ?


 
Song ©   (2002-10-03 18:13) [2]

SetFocus


 
sergserg   (2002-10-03 18:29) [3]

SetFocus не помогает.
Как писал Юрий Зотов
"Возврат фокуса - Дельфишный SetFocus или SetFocus из API. Ошибка в
том, что Вы не управляете фокусом, а просто ставите TopMost всему
родительскому окну. Но, ведь если при этом фокус имеет одно из его
дочерних окон, то родительское уже и так наверху. Поэтому ничего и
не происходит, хотя функция, конечно, отрабатывает нормально"
так как же активировать форму ?


 
Song ©   (2002-10-03 18:34) [4]

Я не сталкивался с такими случаями когда SetFocus мне не помогал установить фокус ввода (чтобы там находился курсор)


 
sergserg   (2002-10-03 19:07) [5]

Не получается может из за того что форма не главная. Кнопа обводится а при нажатии клавшь действия происходят в др программе.


 
Song ©   (2002-10-03 19:38) [6]

Ну попробуйте SetActiveWindow()


 
sergserg   (2002-10-03 19:47) [7]

Сейчас ради примера взял чистую форму.+ Две кнопки+лайбел. Обрабатываю сообщение WM_ACTIVATEAPP если приложение становится не активным в лейбел пишу сообщение затем setforegroundwindow(form1.handle). Запускаю клацаю мышей на раб стол. На форме появляется знак что она не активна и мигает иконка в таскбаре. М все а курсор как на раб столе был так и остался.
SetActiveWindow() тоже не помог и SEtForus - никаких реакций.


 
diesel   (2002-10-04 12:48) [8]

Абсолютно аналогичная фигня. Пробовал много вариантов, сейчас уже не припомню все:
SetForegroundWindow с использованием SystemParametersInfo (с каким-то там параметром)
SetFocus
SetActiveWindow
какая-то апи-функция с изменением z-индекса
ещё какие-то, не помню
помогло только одно: сначала закрываем активное окно, потом SetFocus и SetForegroundWindow

в остальных случаях приложение просто выводится на передний план и флэшится в таскбаре.
порекомендуйте чаво-нибудь.


 
sergserg   (2002-10-04 15:23) [9]

Попробовал следующее
Wnd := GetForeGroundWindow;
AttachThreadInput(GetWindowThreadProcessID(Wnd,nil),
GetWindowThreadProcessID(form3.handle,nil),true);
form3.setfocus;
AttachThreadInput(GetWindowThreadProcessID(Wnd,nil),
GetWindowThreadProcessID(form3.handle,nil),false);
Для виндозовских приложений работае. А вот для Far не всегда. Люди помогииииите.........


 
diesel   (2002-10-07 05:53) [10]

Что-то подобное тоже пробовал, не помогало. Сегодня попробую ещё раз.

PS. Ни у кого других вариантов нет?


 
diesel   (2002-10-07 11:20) [11]

Попробовал и этот вариант, не помогло.

Что, никто ничего дельного и работающего предложить не может?
PS. Сделать такое точно можно (Winpopup и Heroes of Might and Magic такое делают)


 
_dr   (2002-10-07 15:15) [12]

а как насчет
ShowWindow(Handle, SW_SHOWNORMAL)? - покажет и активирует окно


 
sergserg   (2002-10-07 17:05) [13]

diesel-у да немногоя ошибся обработку
Wnd := GetForeGroundWindow;
AttachThreadInput(GetWindowThreadProcessID(Wnd,nil),
GetWindowThreadProcessID(form3.handle,nil),true);
form3.setfocus;
AttachThreadInput(GetWindowThreadProcessID(Wnd,nil),
GetWindowThreadProcessID(form3.handle,nil),false);
писал в таймере которій запускался через надцать милисекунд после WM_ACTIVATEAPP. и потом оключался.
Иначе фокус уходил неизвестно куда. Нет его ни в приложении ни в форме????.(подозреваю очередь сообщений )


 
diesel   (2002-10-08 05:41) [14]

_dr, в хелпе много такого написано (Activates and displays the window). Однако на заборе тоже написано,.. а там, как известно, дрова. Никакие манипуляции с ShowWindow не помогают.

sergserg, мысли не понял, но последнее аналогично: фокус уходит неизвестно куда, либо остаётся у активного приложения.

вчера отмёл ещё один вариант: отсылку сообщений wm_killfocus и wm_setfocus. Есть ещё идеи?


 
diesel   (2002-10-08 05:55) [15]

блин, совсем плохо. messagedlg и showmessage даже не выводят аппликатион на верх з-ордера, не говоря уже про активацию. Райзить еггог тоже не помогает.

Люди, ну подкиньте работающую идею ;(


 
diesel   (2002-10-08 07:23) [16]

Есть какая-то функция SelectWindow, в help"е не описана. Не могу только понять, какой модуль надо use, чтобы можно было её использовать.


 
sergserg   (2002-10-09 08:45) [17]

diesel-у Вообщем так в приложении ловим сообщение Wm_activateapp
если Wpatam =0 значит активируется другое приложение и тогда мы запускаем таймер допустим на 50 мл сек и в таймере пишем
AttachThreadInput(LPARAm (берем из EM_ACTIVATEAP),
GetWindowThreadProcessID(form3.handle,nil),true);
SETForeGroundWindow(form.handle)
AttachThreadInput(LPARAM,
GetWindowThreadProcessID(form3.handle,nil),false);
Если все делать в общод таймера фокус уходит в некуда. Но єтот способ не помогает для фара не работает и в случае свернутого окна.
Насчет SelectWindows - оч интересно. Надо покопаться.


 
diesel   (2002-10-17 09:52) [18]

странная фигня: скомпиляли в джаве шняжку, вытаскивающую и использующую SetForegroundWindow из user32.dll, работает 100%-но и на 98-ых, и на ХП, и на 2000-ых...
Делфи -- сакс?



Страницы: 1 вся ветка

Текущий архив: 2002.11.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
1-93096
Lony
2002-11-17 01:55
2002.11.28
Копирование в буфер


1-93122
vilfred
2002-11-17 23:33
2002.11.28
inherited в конструкторах че за зверь?


14-93242
lak
2002-11-10 21:45
2002.11.28
форум - движок


1-93090
AVD
2002-11-14 15:25
2002.11.28
Задачка....


1-93089
Adam
2002-11-16 19:14
2002.11.28
Как скопировать файл???