:: Visual Foxpro, Foxpro for DOS
Переключить фокус на окно программы
Saratoga
Автор

Сообщений: 494
Дата регистрации: 02.02.2004
Уважаемые форумчане!

Есть ли в VFP функция, позволяющая принудительно переключить фокус с окна другой программы на окно программы VFP?
Пока пользуюсь таким способом.

_screen.alwaysontop=.t.
_screen.alwaysontop=.f.

Окно программы VFP при этом переходит на передний план, но не сам фокус, к сожалению - приходиться дополнительно кликать мышкой...



Исправлено 1 раз(а). Последнее : Saratoga, 23.04.24 05:01
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
sphinx

Сообщений: 31624
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
См. ShowWindow() / ShowWindowAsync()


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/2 positive
Re: Переключить фокус на окно программы
Каратаев

Сообщений: 4013
Откуда: Алматы
Дата регистрации: 04.12.2001
Почему-то так срабатывает не всегда. В моём случае, в одной из программ, перед запуском основного окна программы (а это форма As-Top_Level), запускается окно идентификации пользователя. А перед этим идёт запуск проверки обновления программы.. И вот форму идентификации пользователя никак не получается сделать активной. Только если отключить проверку обновления, тогда всё нормально. Но это не вариант.
Пришлось выкручиваться корявой заплаткой, но она работает.
* идентификация пользователя
DO FORM frmCheckUser
* Вывожу ее на передний план
LOCAL loShell, lcCaption
loShell=CreateObject("WScript.Shell")
lcCaption = frmCheckUser.Caption
IF loShell.AppActivate(lcCaption) = .T.
loShell.SendKeys("% ~")
loShell.SendKeys("{ESC}")
ELSE
MessageBox("Приложение "+m.lcCaption+" не найдено")
ENDIF
READ EVENTS


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/2 positive
Re: Переключить фокус на окно программы
sphinx

Сообщений: 31624
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Нормальное решение. Поместить в метод глобального класса с параметром - и забыть.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
kornienko_ru

Сообщений: 320
Откуда: Владивосток
Дата регистрации: 06.09.2015
Каратаев
...Пришлось выкручиваться корявой заплаткой, но она работает...
Я что-то подобное здесь уже публиковал forum.foxclub.ru. Тоже в свое время немного "поразбирался" с такой проблемой. Там есть такой вариант из 2-х, который закомментирован:
WshS.SendKeys("%+{TAB}");

То что не всегда срабатывает, вероятно результат того, какая из программ последняя активирует окно. Попробуйте в свой код вставить небольшую задержку, чтобы ваша активация фокуса была последней.



Исправлено 1 раз(а). Последнее : kornienko_ru, 29.04.24 13:54
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
Каратаев

Сообщений: 4013
Откуда: Алматы
Дата регистрации: 04.12.2001
Манипуляции с задержкой ни к чему не привели, кроме того, что форма стала появляться позже... Задержку доводил аж до 4-х секунд.
Зато по ходу экспериментов возникло другое решение: манипуляция с WindowState. Работает и форма не дёргается из-за SendKeys...
DO FORM frmCheckUser
* Вывожу ее на передний план
frmCheckUser.WindowState = 1
frmCheckUser.WindowState = 0
LOCAL loShell
loShell=CreateObject("WScript.Shell")
loShell.AppActivate(frmCheckUser.Caption)


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
sphinx

Сообщений: 31624
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Надо воспроизвести на работе. Пока есть время - поковыряю. Обычно приемлемое решение находил.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
AndyNigmatec

Сообщений: 1635
Откуда: Волгоград
Дата регистрации: 28.06.2015
у меня приложуха AsTopLevelForm, и перед открытием главного окна окошко запроса логин-пароля ... счас глянул как делал когда-то что поверх было:

(поскипал лишнее и ненужное в обсуждаемом контексте)

ежели прога уже открыта - то просто показываю главное окно


ежели нет, то вызываю форму логин-пароля (она как класс описана)


логин-пароль норм, запуск главной тож оформленной как класс

почему формы как классы делал - удобно управлять ими было ... кстати такое решение когда-то было взято с нашего форума )))

пара функций запуска/обращения к методам=свойствам



сам класс хранящий список форм, создается в начале запуска проги


все это конечно древнее и не оптимально написанное, но работает более десятка лет уже как )))
Ratings: 0 negative/1 positive
Re: Переключить фокус на окно программы
sphinx

Сообщений: 31624
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
ежели прога уже открыта - то просто показываю главное окно

Запрещаю (код я приводил на мьютексе, еще с Равилем спорили, что в териналке пашет или нет. Володя Максимов все ПОТОМ ответил)
открытие второго экземпляра программы. Не знаю проблем, какое окно показывать, какое - нет. Польтзователь мой не работает как в 1С - где захотел, там и вводит данные. Там можно, там другие идеологии. Открыл окно - или внес, или закрой раз ошибся, бздишь, или потом. Другие режимы ни к чему, от этого блажь и тревога. Спокойно заполнили одну форму - перешли к другой. Все молодцы, разработчики одобряют. Управление окнами мне хватает на уровне фокса. Балуете вы пользователя, они потом сами не знают сколько окон открыли и чего хотят.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
sphinx

Сообщений: 31624
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Код сохраню. Андрей, респект. :hi:🍷


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
of63

Сообщений: 25638
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Каратаев
Манипуляции с задержкой ни к чему не привели, кроме того, что форма стала появляться позже... Задержку доводил аж до 4-х секунд.
Зато по ходу экспериментов возникло другое решение: манипуляция с WindowState. Работает и форма не дёргается из-за SendKeys...
DO FORM frmCheckUser
* Вывожу ее на передний план
frmCheckUser.WindowState = 1
frmCheckUser.WindowState = 0
LOCAL loShell
loShell=CreateObject("WScript.Shell")
loShell.AppActivate(frmCheckUser.Caption)

Пива так предлагал - свернуть, а потом развернуть!
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
sphinx

Сообщений: 31624
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
Пива так предлагал - свернуть, а потом развернуть!

На Фоксе и грид порой надо дернуть типа GO RECNO() - с точки здравого смысла бесполезное телодвижение, остались на той же строке по источнику... но нет же. Объекты GUI отработали корректно.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
of63

Сообщений: 25638
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
.......................



Исправлено 1 раз(а). Последнее : Joys, 08.05.24 07:26
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
sphinx

Сообщений: 31624
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
of63
Саня, я не... мы про Винду, или про фокс?
С днем Радио, кстати! Да здравствует длинно- и коротко- волновая связь людей во всем мире! ...Ну, и операторов с дронами )

Тему я создал в Курилке. Олег, пройди туда. Я к тебе всегда с уважением...


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
of63

Сообщений: 25638
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
sphinx
Цитата:
Пива так предлагал - свернуть, а потом развернуть!

На Фоксе и грид порой надо дернуть типа GO RECNO() - с точки здравого смысла бесполезное телодвижение, остались на той же строке по источнику... но нет же. Объекты GUI отработали корректно.

Да, есть такое, когда меняешь фильтр, RELATION, да, это наша юзероская непониманшка их модели, надо сделаьб телодвижение, чтобы фильтр, релейшен, сработал... ну, надо "понимать" средство, оно написано людьми, а не ИИ
У меня обычно за фильтром и релейшеном следует SCAN? gj'njve yt yfhsdfkcz (lfdyj gjyzk bly. ajrcf) не буду переводить )



Исправлено 1 раз(а). Последнее : of63, 07.05.24 23:02
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
sphinx

Сообщений: 31624
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
У меня обычно за фильтром и релейшеном следует SCAN? gj'njve yt yfhsdfkcz (lfdyj gjyzk bly. ajrcf) не буду переводить )

Задачу упрости и сюда выложи. Коллеги меня поддержат - зачем тебе скан?

Нарисуй задачу, с условными данными. Мы с коллегами тебе ее точно попроще подскажем, ты, я заметил, нередко слишком через терни к звездам.

С тебя репро-код.

P.S. Прошла болезнь, когда норовили писать 0 репо-код. Репро - (репродукция, к примеру) - восстановление, но есть финансовый термин РЕПО - сделка с обязательствами, чтобы потом выкупить... Пусть переврал. А цель не в этом, а скорее обратить внимание. Репо- и репро- - две ОГРОМНЫЕ разницы, с точки зрения словообразования.
Пять было по литературе. Но увы, тоже не все знаю, коллеги. Летом! Решено - иду проверять себя и писать диктант. Страшно. Медалист школы. А теперь я никто... ? Вы так же считаете?


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
of63

Сообщений: 25638
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Конечно, мы тебя считаем как ты сказал, и себя также, но об этом скромно умалчиваем )
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
ssa

Сообщений: 13056
Откуда: Москва
Дата регистрации: 23.03.2005
sphinx
P.S. Прошла болезнь, когда норовили писать 0 репо-код. Репро - (репродукция, к примеру) - восстановление, но есть финансовый термин РЕПО - сделка с обязательствами, чтобы потом выкупить... Пусть переврал. А цель не в этом, а скорее обратить внимание. Репо- и репро- - две ОГРОМНЫЕ разницы, с точки зрения словообразования.
Пять было по литературе. Но увы, тоже не все знаю, коллеги. Летом! Решено - иду проверять себя и писать диктант. Страшно. Медалист школы. А теперь я никто... ? Вы так же считаете?
В современном ИТ-шном сленге РЕПО есть сокращение от слова РЕПОЗИТОРИЙ.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
sphinx

Сообщений: 31624
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Зачем вводить новые термины/аббревиатуры, к тому же имеющие более 1 значения, если есть устоявшийся термин?


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Переключить фокус на окно программы
ssa

Сообщений: 13056
Откуда: Москва
Дата регистрации: 23.03.2005
sphinx
Зачем вводить новые термины/аббревиатуры, к тому же имеющие более 1 значения, если есть устоявшийся термин?
ИТ-шники плохо знают терминологию фиников и изобретают свою не глядя на чьи-то там устоявшиеся термины. Так же как "мать", "мозги", "дрова" и т.д. Ты же не возмущаешься созданием этих терминов, хотя этим терминам не одна сотня лет?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 28 Каратаев  (Гостей: 27)

© 2000-2024 Fox Club 
Яндекс.Метрика