Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
1-92962
Comp
2002-11-14 19:01
2002.11.28
Цвет шрифта...


3-92896
sky3d
2002-11-10 13:26
2002.11.28
Как получить внешниие данные в SP (2000)


1-93043
stone
2002-11-19 13:46
2002.11.28
FreeLibrary


14-93253
RV
2002-11-10 10:03
2002.11.28
Дайте ссылки на Ваши фото.


1-93083
Назаров Евгений
2002-11-16 14:37
2002.11.28
Вывод на печать в дельфи7.0





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский