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

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

lcFrmName=WONTOP()

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

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

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

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

_screen.activeform.release

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

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

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



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

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



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

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

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

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

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

Неужели, зная имя через wontop() нужно лопатить-перебирать все-все формы, что бы активировать верхнюю?
...
Рейтинг: 0 / 0
27.08.2015, 13:11
    #39037428
Дед Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова окна - как активизировать запущенное ранее окно
А так и обращаешься к форме через переменную. При открытии формы, опцией NAME ты назначешь имя переменной
(Например DO FORM Form1 NAME MyForm)
И тогда можно обращаться к ней:
MyForm.Release - Закрыть форму
FyMorm.Init() - выполнить в этой фрме функцию Init
... и так далее, через переменную можно выпонить на форме что угодно. Но что бы эта переменная была всегда доступна в любом месте программы, можешьт ее описать в начале программы и назначить Public (Например в файле Main.prg написать PUBLIC MyForm)
...
Рейтинг: 0 / 0
27.08.2015, 13:29
    #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
27.08.2015, 13:41
    #39037467
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова окна - как активизировать запущенное ранее окно
Dima T,

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

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

lcFrmName=wontop()


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


в моей конкретной ситуации _screen.activeform становится форма верхнего уровня, но при этом одна из открытых форм - все равно наверху, и ее-то я и хочу активировать, что бы потом закрыть.
...
Рейтинг: 0 / 0
27.08.2015, 14:14
    #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
27.08.2015, 14:22
    #39037520
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова окна - как активизировать запущенное ранее окно
А если бы вы еще мне подсказали, как организовать в меню такой пункт, например, "Окно", как в приложениях обычно делается, то вообще был бы день замечательный сегодня )))

Допустим, как активировать окно - уже разберемся, а вот как их в список в разделе меню в столбик аккуратно вывести?
...
Рейтинг: 0 / 0
27.08.2015, 14:30
    #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
27.08.2015, 16:26
    #39037670
DmitryKn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова окна - как активизировать запущенное ранее окно
Dima T,

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

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

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

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

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

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

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


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