:: Visual Foxpro, Foxpro for DOS
Re: При запуске форма "проваливается" под Screen
danton1973

Сообщений: 143
Откуда: Пермь
Дата регистрации: 10.08.2020
Сейчас так:
config.fpw, подключённый в проект
MVCOUNT=2048

SCREEN=ON
Если сделать OFF, то программа сворачивается в трей, из которого не знаю как достать. Не видно её среди окон, только в диспетчере задач.

в main.prg

запуск INIT.prg
close all
clear

* Отключаем обработку функциональных клавиш по ON KEY
on key label F1
on key label F2
on key label F3
on key label F4
on key label F5
on key label F6
on key label F7
on key label F8
on key label F9
on key label F10
on key label F11
on key label F12
* Отключаем функции по умолчанию, которые могут использоваться разработчиком
set function F1 to
set function F2 to
set function F3 to
set function F4 to
set function F5 to
set function F6 to
set function F7 to
set function F8 to
set function F9 to
set function F10 to
set function F11 to
set function F12 to
* Отключаем макросы VFP
set mackey to
clear macros
* определяет, будут ли функции CDX( ), DBF( ), MDX( ) и NDX( ) возвращать полное имя файла или только имя файла с именем диска
set fullpath on

*Определяет, используется ли в Visual FoxPro цветовая палитра, принимаемая по умолчанию
set PALETTE ON
*Включает или выключает звуковой сигнал компьютера, а также устанавливает атрибуты сигнала
set BELL OFF
set LOGERRORS OFF &&Определяет, посылает ли Visual FoxPro сообщения об ошибках компиляции в текстовый файл
set DEVELOPMENT OFF &&Предписывает Visual FoxPro сравнивать при запуске программы дату и время создания программы с датой и временем создания соответствующего скомпилированного объектного файла
*Задает интервал, с которым команды, обрабатывающие записи, сообщают значения счетчика записей в переменную _TALLY
set ODOMETER to 100
* Порядок сортировки русский
set COLLATE to "RUSSIAN"
* Показывать век в датах - 31.12.1999, 11.01.2000
set CENTURY ON
* Формат времени 24 часа
set HOUR to 24
* Показывать секунды в формате времени
set SECONDS ON
* Число десятичных знаков для расчетов
set DECIMALS to 2
* Установка возможности блокировки нескольких записей
set MULTILOCKS ON
* Обработка сетевых блокировок
set REPROCESS to AUTOMATIC
* Формат даты - привычный для нас - DD.MM.YYYY
SET DATE GERMAN
* Использование ресурсов
set RESOURCE OFF

set compatible on
SET memowidth to 255

* Быстро и легко решаем проблему 2000
set strictdate to 0
set century to 19 rollover 70
_THROTTLE = 0
*Определяет, будет ли Visual FoxPro отображать результаты команд.
set TALK OFF
*Определяет, должен ли Visual FoxPro переносить данные из текущей записи в новую запись, создаваемую командой INSERT, APPEND или BROWSE
set CARRY OFF
set EXCLUSIVE OFF
set NOTIFY ON && Разрешает или отменяет отображение некоторых системных сообщений.
set SAFETY OFF && запрет на вывод сообщения о перезаписи файла
set EXACT ON &&Задает правила, согласно которым Visual FoxPro сравнивает две строки разной длины
set DELETED ON

*Отображает или удаляет с экрана графическую строку состояния
SET Status OFF &&При выполенении программы отключаем
*Определяет, должен ли Visual FoxPro отображать системные часы, и задает для их позицию в основном окне Visual FoxPro
SET CLOCK OFF &&При выполнении программы отключаем

SET SYSMENU OFF
SET SYSMENU TO

* Выгрузка всех панелек
Local lnIndexForm,lnCountForm

for m.lnIndexForm=1 to _screen.FormCount
m.lnCountForm=_screen.FormCount
_Screen.Forms[m.lnIndexForm].Hide
_Screen.Forms[m.lnIndexForm].Release
If m.lnCountForm=_screen.FormCount
m.lnIndexForm=m.lnIndexForm+1
Endif
next

m.lnIndexForm=adockstate(WindowsArray)
for m.lcWin=1 to m.lnIndexForm
IF UPPER(RIGHT(SYS(16),3))='EXE' OR UPPER(RIGHT(SYS(16),3))='APP'
Release WINDOWS &WindowsArray[m.lcWin,1]
else
if inlist(lower(WindowsArray[m.lcWin,1]),"standard","screen") &&что бы не закрыть окна отладки
Hide WINDOWS &WindowsArray[m.lcWin,1]
endif
ENDIF
next

после DO form Welcome.scx to m.llPassword
AlwaysOnTop=.F.
ShowWindow=0
WidowType=1
DeskTop=.F.

после проверки пароля форма закрывается
do menu.mpr

Если запускаю из ярлыка (путь к программе в поле "Объект" и "Рабочая папка" одинаковы) окно welcome не видно из под экрана
Если запускаю из FAR, то нормально всё...
Ratings: 0 negative/0 positive
Re: При запуске форма "проваливается" под Screen
Каратаев

Сообщений: 3974
Откуда: Алматы
Дата регистрации: 04.12.2001
У меня config для пользователей включён в дистрибутив. В нём всего лишь:
CodePage = 1251
screen = off
PATH=Data, Reports
RESOURCE = OFF
COLLATE = "MACHINE"
Выдаётся форма логина с паролем, после удачного входа, в программе, в глобальном классе приложения уже определяются все настройки SCREEN.


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

Сообщений: 34580
Дата регистрации: 28.05.2002
И зачем все эти 100500 строк совершенно не относящихся к делу

Если задано SCREEN=OFF то главное окно фокса не будет отображаться пока не выполнится команда _SCREEN.Visible = .T.
Естественно, не будет отображаться и форма которая запускается "In Screen".

Если нужно добиться того чтобы Welcome запускалась как отдельная, независимая форма ВНЕ SCREEN, и при том код расположенный за DO FORM Welcome не исполнялся пока она видна, то эту форму следует сделать ShowWindow = 2 (As TopLevel Form) - форма при этом автоматически перестанет быть модальной.
После DO FORM прописать команду READ EVENTS - это организует цикл обработки событий ввода.
Поменять "способ общения" формы с кодом в main.prg - лучше всего создать в main объект (например от класса Custom, добавив к нему нужные свойства через метод .AddProperty() ) и передать его в эту самую форму welcome (там в Init принять, запомнить в пользовательском свойстве формы, и обращаться к нему из кнопок и других методов - где надо "установить возвращаемое значение").
Добавить в методы формы которые выполняют её закрытие команду CLEAR EVENTS - это вызовет выход из цикла обработки событий ввода, и переход к следующей по порядку команде - там уже можно будет проанализировать свойства переданного в форму объекта, и понять что же именно там произошло.
Где-то далее в программе будет ещё один READ EVENTS - уже для запуска "основного" цикла обработки событий ввода - собственно работы с функционалом программы.

Если всё это слишком сложно, то проще НЕ прятать главное окно - форма Welcome просто будет внутри него отображаться всегда - и работать как модальная.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: При запуске форма "проваливается" под Screen
danton1973

Сообщений: 143
Откуда: Пермь
Дата регистрации: 10.08.2020
В общем дело было в "волшебных пузырьках".... в ярлыке программы стояло: "Свёрнутое в значёк" Сделал "обычный размер".
Но всё равно переделал:
config.fpw, включённый в проект
MVCOUNT=2048

SCREEN=OFF

При старте

DO form Welcome.scx
AlwaysOnTop=.T.
DeskTop=.T.
ShowWindow=2
WindowType=1

Welcome.Uload()
CLEAR EVENTS
WITH goUser
.AddProperty("Password")
.Password=thisform.llflag
ENDWITH

в main.prg
read events
_SCREEN.Visible = .T.

m.llPassword=goUser.Password
Ratings: 0 negative/0 positive
Re: При запуске форма "проваливается" под Screen
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
DeskTop=.T. и WindowType=1 не имеют смысла для формы с ShowWindow=2 (т.е. значения этих свойств игнорируются).
Вместо использования goUser лучше передавать объект в форму. т.е.

LOCAL loUser, llPassword
* не стоит плодить глобальные сущности без крайней нужды.
loUser = CREATEOBJECT("Custom")
loUser.AddProperty("lPassword", .F.)
DO FORM Welcome.scx WITH m.loUser
READ EVENTS && только для формы Welcome
llPassword = m.loUser.lPassword
* Можно отдельную переменную и не заводить, принципиальной разницы
* в обращении к m.llPassword и к m.loUser.lPassword нет
...
* где-то там после _SCREEN.Visible = .T. и всяких DO mymenu.mpr
* будет ещё один READ EVENTS
PROC Welcome.Init
LPARAMETERS toParam
IF VARTYPE(m.toParam) = "O"
This.oParam = m.toParam
ELSE
* эта ветка для возможности запускать форму без передачи ей объекта-параметра, например для отладки
* чисто для удобства - чтобы при запусках без передачи параметра не получать ошибки
* что ThisForm.oParam не объект/не имеет свойства lPassword
This.oParam = CREATEOBJECT("Custom")
This.oParam.AddProperty("lPassword", .F.)
ENDIF
* надо создать свойство формы oParam. В принципе можно и динамически это делать:
* This.AddProperty("oParam", m.toParam)
* но лучше всё же в дизайнере форм прописать.
PROC Welcome.Unload
This.oParam.lPassword = This.llflag
* можно просто везде заменить обращения к ThisForm.llflag на обращения к ThisForm.oParam.lPassword
CLEAR EVENTS


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


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

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

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