powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / экземпляры формы
25 сообщений из 30, страница 1 из 2
экземпляры формы
    #33401645
sunteem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рылась-рылась, не нашла, как сделать, чтоб был единственный экземпляр формы.
=(
...
Рейтинг: 0 / 0
экземпляры формы
    #33401795
Aries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то я не вьеду в вопрос, а можна поподробнее

Истина где-то там...
...
Рейтинг: 0 / 0
экземпляры формы
    #33401828
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вопрос стоит в том, чтобы запретить повторный запуск одной и той же формы, то простейший вариант:

ПЕРЕД запуском формы примерно такой код

Код: plaintext
1.
2.
3.
IF TYPE("_VFP.Forms('MyForm')")="U"  
	* Формы со свойством name = MyForm не существует (не открыта)  
ENDIF

Подробнее здесь

Как проверить факт существования переменной памяти, поля таблицы, метода формы
...
Рейтинг: 0 / 0
экземпляры формы
    #33402271
sunteem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пасиба!!
...
Рейтинг: 0 / 0
экземпляры формы
    #33474361
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему то данный код не срабатывает. Форма загружается повторно. Name формы = 'myform'. В чем ошибка %(

PROCEDURE IconClickEvent
IF TYPE("_VFP.Forms('myform')")="U"
DO FORM form_hi
ENDIF

ENDPROC
...
Рейтинг: 0 / 0
экземпляры формы
    #33474396
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
#DEFINE TB_FORMDESIGNER_LOC  "Form Designer"
#DEFINE TB_STANDARD_LOC      "Standard"
#DEFINE TB_LAYOUT_LOC        "Layout"
#DEFINE TB_QUERY_LOC  	     "Query Designer"
#DEFINE TB_VIEWDESIGNER_LOC  "View Designer"
#DEFINE TB_COLORPALETTE_LOC  "Color Palette"
#DEFINE TB_FORMCONTROLS_LOC  "Form Controls"
#DEFINE TB_DATADESIGNER_LOC  "Database Designer"
#DEFINE TB_REPODESIGNER_LOC  "Report Designer"
#DEFINE TB_REPOCONTROLS_LOC  "Report Controls"
#DEFINE TB_PRINTPREVIEW_LOC  "Print Preview"
#DEFINE WIN_COMMAND_LOC      "Command"

if WEXIST(TB_FORMDESIGNER_LOC)
	hide window TB_FORMDESIGNER_LOC  &&"Form Designer"
endif
if WEXIST(TB_STANDARD_LOC)
	hide window TB_STANDARD_LOC      &&"Standard"
endif
if WEXIST(TB_LAYOUT_LOC)
	hide window TB_LAYOUT_LOC        &&"Layout"
endif
if WEXIST(TB_QUERY_LOC)
	hide window TB_QUERY_LOC  	     &&"Query Designer"
endif
if WEXIST(TB_VIEWDESIGNER_LOC)
	hide window TB_VIEWDESIGNER_LOC  &&"View Designer"
endif
if WEXIST(TB_COLORPALETTE_LOC)
	hide window TB_COLORPALETTE_LOC  &&"Color Palette"
endif
if WEXIST(TB_FORMCONTROLS_LOC)
	hide window TB_FORMCONTROLS_LOC  &&"Form Controls"
endif
if WEXIST(TB_DATADESIGNER_LOC)
	hide window TB_DATADESIGNER_LOC  &&"Database Designer"
endif
if WEXIST(TB_REPODESIGNER_LOC)
	hide window TB_REPODESIGNER_LOC  &&"Report Designer"
endif
if WEXIST(TB_REPOCONTROLS_LOC)
	hide window TB_REPOCONTROLS_LOC  &&"Report Controls"
endif
if WEXIST(TB_PRINTPREVIEW_LOC)
	hide window TB_PRINTPREVIEW_LOC  &&"Print Preview"
endif
if WEXIST(WIN_COMMAND_LOC)
	hide window WIN_COMMAND_LOC      &&"Command"
endif

авторство не мое но непомню где брал. (наверно на foxclub)
...
Рейтинг: 0 / 0
экземпляры формы
    #33474406
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а еще и вот так попробовать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
for j= 1  to _screen.formcount
if alltrim(upper(_screen.forms(j).name))='APPEND621K'
   &&форма такая запущена
else
  && формы такой незапущено
  do form APPEND621K
endif
endfor
 
...
Рейтинг: 0 / 0
экземпляры формы
    #33474498
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S866а еще и вот так попробовать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
for j= 1  to _screen.formcount
if alltrim(upper(_screen.forms(j).name))='APPEND621K'
   &&форма такая запущена
else
  && формы такой незапущено
  do form APPEND621K
endif
endfor
 

таким образом вообще не запускается. А что же делать..
...
Рейтинг: 0 / 0
экземпляры формы
    #33474753
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь - там логически неправильно сделано
НАДО ТАК:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
flag= 1 
for j= 1  to _screen.formcount
if alltrim(upper(_screen.forms(j).name))='APPEND621K'
  FLAG= 0  && СБРОСИТЬ ЕСЛИ ФОРМА ЗАПУЩЕНА
endif
endfor
IF FLAG= 1  
   DO FORM APPEND621K
ENDIF
если форма запущена то она обязательно должна быть в массиве _screen.forms
а вот если не срабатывает условие
if alltrim(upper(_screen.forms(j).name))='APPEND621K'
то надо глядеть почему оно не срабатывает - поэтому там и alltrim и upper
стоит.
...
Рейтинг: 0 / 0
экземпляры формы
    #33474772
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно, а почему
IF TYPE("_VFP.Forms('MyForm')")="U"
do form MyForm
ENDIF
не срабатывает.
У меня TYPE("_VFP.Forms('MyForm')") всегда со значением "U"
...
Рейтинг: 0 / 0
экземпляры формы
    #33474809
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надеюсь, понимаешь разницу между значением свойства Name формы и именем файла SCX?

То, что надо подставлять в выражение

IF TYPE("_VFP.Forms('MyForm')")="U"

это НЕ имя файла SCX. Это значение одного из реквизитов (свойств) формы. В данном случае реквизита Name.
...
Рейтинг: 0 / 0
экземпляры формы
    #33474824
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S866Извиняюсь - там логически неправильно сделано
НАДО ТАК:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
flag= 1 
for j= 1  to _screen.formcount
if alltrim(upper(_screen.forms(j).name))='APPEND621K'
  FLAG= 0  && СБРОСИТЬ ЕСЛИ ФОРМА ЗАПУЩЕНА
endif
endfor
IF FLAG= 1  
   DO FORM APPEND621K
ENDIF
если форма запущена то она обязательно должна быть в массиве _screen.forms
а вот если не срабатывает условие
if alltrim(upper(_screen.forms(j).name))='APPEND621K'
то надо глядеть почему оно не срабатывает - поэтому там и alltrim и upper
стоит.
ХОТЯ ВАШ КОд сработал. Странно, вроде существенной разницы с предыдущим вашим примером не было, только else использовалось, за место флага
...
Рейтинг: 0 / 0
экземпляры формы
    #33474851
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМНадеюсь, понимаешь разницу между значением свойства Name формы и именем файла SCX?

То, что надо подставлять в выражение

IF TYPE("_VFP.Forms('MyForm')")="U"

это НЕ имя файла SCX. Это значение одного из реквизитов (свойств) формы. В данном случае реквизита Name.

Да конечно, я это понимаю.
...
Рейтинг: 0 / 0
экземпляры формы
    #33474926
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай тестовую формочку, запусти ее и в командном окне дай команду

Код: plaintext
?TYPE("_VFP.Forms([Form1])")

Кстати, о какой версии FoxPro идет речь?

А вот такая команда что вернет:

Код: plaintext
?_VFP.Forms([Form1]).name
...
Рейтинг: 0 / 0
экземпляры формы
    #33475491
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМСделай тестовую формочку, запусти ее и в командном окне дай команду

Код: plaintext
?TYPE("_VFP.Forms([Form1])")

Кстати, о какой версии FoxPro идет речь?

А вот такая команда что вернет:

Код: plaintext
?_VFP.Forms([Form1]).name


вы знаете, тестовая формочка работает правильно. Возвращается 0 и Form1. Но я нашла в чем проблема. В моей форме form.showwindow=2. Как только я меняю это свойство в тестовой форме, тогда при ее запуске ?TYPE("_VFP.Forms([Form1])") возвращает U.
...
Рейтинг: 0 / 0
экземпляры формы
    #33475501
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Krushinskaya Olga
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
for j= 1  to _screen.formcount
if alltrim(upper(_screen.forms(j).name))='APPEND621K'
   &&форма такая запущена
else
  && формы такой незапущено
  do form APPEND621K
endif
endfor

тут elase do form выполнится _screen.formcount-1 раз (где formcount - кол-во откр. форм в момент начала цикла. т.к. он будет увеличиваться при каждом следующем do form).

Для ВладимираМ - у меня правило одинаково обзывать name - формы и имя файла scx - во избежании путаницы.
...
Рейтинг: 0 / 0
экземпляры формы
    #33475737
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а у нас в квартире газ

на взлете присваиваем форме уникальный дескриптор
и делов - та
...
Рейтинг: 0 / 0
экземпляры формы
    #33475985
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to alex11100
а как вы по дискриптору к форме обращаться будете?
а по имени просто
Код: plaintext
APPEND621K.text1.value='fdfhd'
из любой другой формы.
...
Рейтинг: 0 / 0
экземпляры формы
    #33476074
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это примерчик, но он не в тему
а если вообчета оч.интересно, то могу заселить смуту в головы людские

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
* защита на случай, если форма станет неактивной
if !pemstatus(_screen.ActiveForm,"setfilter", 5 )
    local loForm, lcFormNameOld
    for each loForm in _screen.Forms
        if pemstatus(loForm,"cDescript", 5 ) and this.cFormDescript=loForm.cDescript
             lcFormNameOld = loForm.name
             loForm.name = "Form"+this.cFormDescript
             activate window ("Form"+this.cFormDescript)
             loForm.name   = lcFormNameOld
        endif
    endfor
endif 
...
Рейтинг: 0 / 0
экземпляры формы
    #33476317
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я использую такой код для проверки повторного запуска формы.
Код: plaintext
1.
2.
3.
4.
5.
6.
IF !WEXIST('f_spr_predpr')
	PUBLIC f_spr_predpr
	DO FORM f_spr_predpr NAME f_spr_predpr LINKED
ELSE 
	f_spr_predpr.show
ENDIF 
...
Рейтинг: 0 / 0
экземпляры формы
    #33476565
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть ссылка на объект - форму, то можно узнать имя ее .SCX - файла
SYS(1271, oObjectFormName)
Можно пройтись циклом по всей коллекции _SCREEN.Forms(), то можно легко найти требуемую форму и активизировать ее.
Код: plaintext
1.
2.
3.
4.
5.
IF UPPER(SUBSTR(SYS( 1271 , m.loForm), RAT("\", SYS( 1271 , m.loForm))+  1 )) ==   UPPER(m.tcForm - ".scx")
*-- Нашли форму в списке активных форм треб.форму
*-- Надо активизировать форму
m.lcNameForm = m.loForm.Name
ACTIVATE Window &lcNameForm
ENDIF
С уважением, Алексей
...
Рейтинг: 0 / 0
экземпляры формы
    #33476637
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему TYPE("_VFP.Forms([Form1])") все время равно U при Form1.showWindow=2?
...
Рейтинг: 0 / 0
экземпляры формы
    #33477506
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Krushinskaya OlgaА почему TYPE("_VFP.Forms([Form1])") все время равно U при Form1.showWindow=2?
Дело в том, что указание в качестве параметра символьной строки - это НЕ документированная возможность. Т.е. в описании ясно указано, что параметром коллекции Forms() может быть только число.

Как следствие, такое использование не всегда предсказуемо.

"Правильным" является именно полный перебор вообще всей коллекции форм и поиск нужной формы по какому-либо уникальному реквизиту.

Хотя, "еще более правильным" является создание собственного стэка запущенных форм. Т.е. где-то отдельно вести список тех форм, которые уже запущены.
...
Рейтинг: 0 / 0
экземпляры формы
    #33478069
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, оказалось, что TYPE("_VFP.Forms([Form1])") равно "U" при Form1.showWindow=2 не все время, а только в том случае, если искомая форма не является активной на момент проверки. Т.е. в качестве _Screen.ActiveForm указана другая форма (или ничего не указано)
...
Рейтинг: 0 / 0
экземпляры формы
    #33478125
Krushinskaya Olga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да точно так и получается.
Значит придется перебирать весь стэк
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / экземпляры формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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