powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова окна - как активизировать запущенное ранее окно
17 сообщений из 17, страница 1 из 1
Снова окна - как активизировать запущенное ранее окно
    #39036712
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

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

lcFrmName=WONTOP()

Как теперь ее активизировать?

Пытался вокруг такого плясать:
_VFP.Forms('FrmName').show в различных вариантах - решения не нашел.

Подскажите, плиз
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037275
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Честно перелопатил весь форум, вроде логика с большего понятна, но синтаксис не получается.

В моем случае вызывается форма в форме верхнего уровня, кнопка Exit на общем тулбаре, в кнопке код

_screen.activeform.release

если пользователь кликнет мимо формы на форму верхнего уровня, то при нажатии ломается.

Я определил, если фокус ушел на форму верхнего уровня

Код: sql
1.
if _screen.activeform.hWnd=form1.hWnd 



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

Код: sql
1.
lcFrmName=wontop()



? lcFrmName - показывает именно то, что нужно.

Так подскажите недалекому, как все-таки обратиться к запущенной ранее форме, если ее имя известно? Как записать?
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037286
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простой контроль на открытую форму:
IF TYPE("ИмяФормы") = "O" .AND. ISNULL(ИмяФормы) = .F.
ИмяФормы.Active
ELSE
DO FORM ИмяФормы NAME ИмяФормы
ENDIF
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037385
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дед Евгений,

логика понятна, но как это записать ?

имя формы - неявно, оно есть в переменной lcFrmName, как обратиться тогда?

форм может быть несколько, нас интересует та, которая хоть и не активна, но сверху. Мы не знаем точного имени, форм может быть запущено несколько. Какая-то из них wontop()

Неужели, зная имя через wontop() нужно лопатить-перебирать все-все формы, что бы активировать верхнюю?
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037428
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так и обращаешься к форме через переменную. При открытии формы, опцией NAME ты назначешь имя переменной
(Например DO FORM Form1 NAME MyForm)
И тогда можно обращаться к ней:
MyForm.Release - Закрыть форму
FyMorm.Init() - выполнить в этой фрме функцию Init
... и так далее, через переменную можно выпонить на форме что угодно. Но что бы эта переменная была всегда доступна в любом месте программы, можешьт ее описать в начале программы и назначить Public (Например в файле Main.prg написать PUBLIC MyForm)
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037451
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnТак подскажите недалекому, как все-таки обратиться к запущенной ранее форме, если ее имя известно? Как записать?
Код: sql
1.
2.
3.
4.
5.
6.
for each loFrm in _screen.Forms
	if loFrm.name = 'имя формы'
		* далее loFrm ссылка на искомую форму
		loFrm.Show()
	endif
endfor


Только учти что может быть несколько форм с одним именем.

Если форма текущая, то через _screen.activeform, например:
Код: sql
1.
_screen.activeform.Show()
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037467
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Приветствую, Дмитрий.

Я думал, может можно не перебирать все формы, поскольку нужная - она вот она:

lcFrmName=wontop()


Нельзя ли как-то сразу через lcFrmName обратиться, не перебирая все формы проекта? Перебирать не хочется, потому что их может быть несколько открыто, а закрыть нужно по условию wontop().


в моей конкретной ситуации _screen.activeform становится форма верхнего уровня, но при этом одна из открытых форм - все равно наверху, и ее-то я и хочу активировать, что бы потом закрыть.
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037515
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Спасибо, все работает, ура ))

Код кнопки exit получился такой:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
LOCAL loFrm

IF _screen.ActiveForm.hWnd=form1.hWnd && Фокус ушел на форму верхнего уровня
	
	for each loFrm in _screen.Forms
		if loFrm.name = WONTOP()
			loFrm.Show()
		endif
	endfor	
	_screen.ActiveForm.release
	oToolbar.refresh()
ELSE
	_screen.ActiveForm.release
	oToolbar.refresh()
ENDIF



Дмитрий, Евгений, спасибо за помощь и что откликнулись и не бросили ))
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037520
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если бы вы еще мне подсказали, как организовать в меню такой пункт, например, "Окно", как в приложениях обычно делается, то вообще был бы день замечательный сегодня )))

Допустим, как активировать окно - уже разберемся, а вот как их в список в разделе меню в столбик аккуратно вывести?
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037533
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnА если бы вы еще мне подсказали, как организовать в меню такой пункт, например, "Окно",
Код: sql
1.
2.
3.
DEFINE PAD _msm_windo OF _MSYSMENU PROMPT "Окно" COLOR SCHEME 3
ON PAD _msm_windo OF _MSYSMENU ACTIVATE POPUP _mwindow
DEFINE POPUP _mwindow MARGIN RELATIVE SHADOW COLOR SCHEME 4



До кучи: чтобы буфер обмена работал (Ctrl+C и т.д.)
Код: sql
1.
2.
3.
4.
DEFINE POPUP _medit MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR _med_cut OF _medit PROMPT "Вырезать" KEY CTRL+X,"Ctrl+X"
DEFINE BAR _med_copy OF _medit PROMPT "Копировать" KEY CTRL+C, "Ctrl+C"
DEFINE BAR _med_paste OF _medit PROMPT "Вставить" KEY CTRL+V, "Ctrl+V"
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037670
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Я меню в конструкторе создавал, так что слегка озадачен, мягко скажем.
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037675
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конструктором не пользуюсь, но в итоге он тоже PRG генерит. *.MPR если не путаю.
Добавь туда руками или посмотри что куда из каких клеток попадает и добавь через конструктор.
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037685
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

попробую обязательно, только не очень понимаю, в том числе в твоем коде, как прога узнает , когда какая форма запущена и какое имя отображать в "Окне".

Т.е. какую-либо форму запустили - "Окно" должно стать активным или непустым, при нажатии должно отобразиться Caption формы или несколько в вертикальном списке, ну как в ворде или ехеле, вот этот механизм - где он вообще должен быть? Он ведь должен как-то исполняться, как-то отслеживать состояние форм, и как-то в меню это передавать, да еще эти имена должны появляться-исчезать при открытии-закрытии.
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037687
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например, при нажатии на "Окно" срабатывает какая-то процедура, которая находит открытые формы и выкладывает в выпадающий список меню "Окно" captions этих форм.

Так где эту процедуру содержат и сможет ли она внести изменения в меню на ходу? Или как вообще?
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037694
DmitryKnНапример, при нажатии на "Окно" срабатывает какая-то процедура, которая находит открытые формы и выкладывает в выпадающий список меню "Окно" captions этих форм.

Так где эту процедуру содержат и сможет ли она внести изменения в меню на ходу? Или как вообще?Сударь, вы может таки догадаетесь создать новое меню, ткнуть пункт Quick menu и посмотреть как это сделано в родном фоксовом меню? Ну дабы меньше заниматься измышлизмами и больше времени посвятить изучению инструмента.
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037759
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
правильный проходящий.,

Да, действительно, есть такое, стыдно признаться , даже не подозревал о его существовании. Спасибо за наводку.
...
Рейтинг: 0 / 0
Снова окна - как активизировать запущенное ранее окно
    #39037830
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну создал в "Окне" "каскад" но понимания нет от слова совсем, книжки не добавили к этому непониманию ничего.
И желаемого нет, каскад сам по себе не плох, конечно, но виделся стандартный перечень открытых форм, что бы можно было потом кликом на них переключаться.

Поскольку это не критично, пока оставлю как есть, однако по мере возникновения траблов и вопросов по меню, видимо буду создавать соответствующую тему.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова окна - как активизировать запущенное ранее окно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]