:: Архив конференции по VFP до 2005 года
Запуск нескольких окон
JellFish

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Есть программа. В ней все формы модальные. Начальник хочет чтобы можно было запускать несколько форм одновременно. Как это сделать с минимальными потерями времени и сохранить безглючность ;) проекта
Ratings: 0 negative/0 positive
Re: Запуск нескольких окон
Старый Новый год
2 варианта:
1) сделать их немодальными (тогда не будет глюков), этот вариант предпочтителен, если модальность была необходима только для ограничения доступа к другим окнам.
2) если Вы сумеете запустить одновременно несколько модальных форм, то помятуя о том, что что форма является модальной только для юзера с мышью, самому организовать переход между "модальными" окнами с помощью кнопок выбора окна на каждой форме типа: FormName.Activate или FormName.Object.SetFocus - глюки неизбежны - грубое вмешательство в оконный стек.
Ratings: 0 negative/0 positive
Re: Запуск нескольких окон
JellFish

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Давно бы так и сделал но есть осложнения. Вот фрагмент одного из приложений (ака форма)

PARAMETERS id_engine
IF PARAMETERS()<1
m.id_engine=0
ENDIF
PRIVATE f_new,d_name,c_name,c_ip,name,model,manufacturer,pnpid,sn,commnt,id_computer,id_type,id_hardware,status,date_scan,ip
STORE .f. to f_new
STORE '' TO d_name,c_name,c_ip,name,model,manufacturer,pnpid,sn,comment,status,ip
STORE 0 TO id_computer,id_type,id_hardware
STORE {} TO date_scan
DO FORM engine.scx NAME w_engine LINKED
IF USED('q_domain')
SELECT q_domain
USE
ENDIF
IF USED('q_comp')
SELECT q_comp
USE
ENDIF
IF USED('q_type')
SELECT q_type
USE
ENDIF

И поэтому просто поставив Modaless не остановишь программу после Do Form ...
Ratings: 0 negative/0 positive
Re: Запуск нескольких окон
На самом деле все проще
Уберите код закрытия таблиц в метод формы, например Release
Ratings: 0 negative/0 positive
Re: Запуск нескольких окон
JellFish

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Не охота Это ж сколько переделывать... Ну если другого пути нету.
Ratings: 0 negative/0 positive
Re: Запуск нескольких окон
Проблема не в отображении
Вывести одновременно несколько форм конечно не проблема ...
Другое дело контролировать их работу если проект был задуман как последовательный (в стиле DOS) интерфейс - переделывать не придется если убедить начальника в том, что это необходимо для сохранения целостности данных ;)
Ratings: 0 negative/0 positive
Re: Запуск нескольких окон
AlexK
Автор

Сообщений: 2114
Откуда: Королев,Москва
Дата регистрации: 11.12.2000
Я думаю, что перейти просто так не удастся - нужно изначально писать под не модальный интерфейс.
Ratings: 0 negative/0 positive
Re: Запуск нескольких окон
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Твой подход (из того что видно по куску кода) явно не соответствует идее
независимости форм (они у тебя ещё и в одной датасесии живут наверняка ),
потому без существенных переделок не обойтись - а переделывать лучше не на
голом месте, а сначала создав некотоый набор классов (Framework), или начав
использовать один из общедоступных - ибо писать каждую форму на базовых
классах, копировать код по Crrl+C Ctrl+V и т.п. - это явно тупиковый путь -
масса геморра при минимуме удобств. имея же хороший FrameWork простые формы
пишутся вообще с пол-пинка (пару минут и готово ), сложные же как правило
можно привести к нескольким простым, увязать их и см. выше




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Запуск нескольких окон
JellFish

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Цитата:
они у тебя ещё и в одной датасесии живут наверняка

Я так понимаю что DataEnviroinment формы - отдельная сессия?! У меня все таблицы в DataEnviroinment лежат а что насчет if used()... - это для курсоров. ;)

Цитата:
а сначала создав некотоый набор классов
Насчет классов - их есть у меня. Еще и поделиться могу ;)

А вообще ты предлагаешь переписать заново. Я бы согласился будь у меня больше времени (и денег бы побольше платили).

А что насчет самого подхода? Какие осложнения могут быть? Я так понял что нельзя использовать SetFocus при запущеных 2 одинаковых формах...
Ratings: 0 negative/0 positive
Re: Запуск нескольких окон
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Цитата:
Я так понимаю что DataEnviroinment формы - отдельная сессия
Нет. DE формы это способ задания набора инструкций для открытия источников данных и установки всяких свойств этих источников.
Сессия создаётся если Form.DataSesssion = 2 - тогда все те инструкции что описаны в DE формы будут работать в этой вновь созданной сессии. Иначе они будут работать в той сессии, которая была активна на момент создания формы (грубо говоря в той сессии, в которой создавалась форма) - если запуск из prg - то в Default-ной, если из другой формы - то в DS этой ночальной формы.
Цитата:
а что насчет if used()... - это для курсоров
Какие курсоры ты собираешься закрывать в Init формы? Наверняка те, что были созданы в дочерней форме - т.е. явное нарушение принципов ООП - и это один из моментов почему у тебя не получится безболезненный переход... Private переменные - из той же оперы.
Цитата:
А что насчет самого подхода?
Какого именно? Твоего, или с независимыми формами? Второй гораздо более требователен к аккуратности написания программы, всю изоляцию форм нужно очень тщательно продумывать - все передачи инфы между блоками программы (в частности формами) - только явные... В общем тема очень обширная.
Цитата:
Какие осложнения могут быть? Я так понял что нельзя использовать SetFocus при запущеных 2 одинаковых формах
Не понял вопроса. Почему нельзя? Где нельзя? Что значит 2 одинаковые формы? - 2 экземпляра что-ли? Можно конечно, только если у тебя была привычка делать
DO FORM nnn
И потом обращаться к этой форме по nnn.Свойство_или_метод, то тек джелать конечно же нельзя - ибо nnn это неявная ссылка, и после второго
DO FORM nnn
она уже будет указывать на 2-ю форму, а к первой и вовсе не будет ни одной явной ссылки - только через _SCREEN.Forms и можно будет её достать...



------------------
WBR, Igor
Ratings: 0 negative/0 positive


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

On-line: 4 (Гостей: 4)

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