powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять про форму!
23 сообщений из 23, страница 1 из 1
Опять про форму!
    #35003438
Larkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В программе запускается форма поиска, из неё запускается форма с гридом, из этой формы с гридом для поиска по кнопке или горячим клавишам снова вызывается форма поиска, которая опять же находит нужное значение и после этого на форме с гридом кнопка поиска не производит никаких действий, как впрочем и кнопка выхода из формы, работает только кнопка вызывающая другую процедуру. Что может теряться в данном случае?
...
Рейтинг: 0 / 0
Опять про форму!
    #35003485
Сейчас мы помедитируем, наш ведущий программист впадет в транс и попробует угадать текст ошибки и когда она у вас происходит." (с) www.bash.org
...
Рейтинг: 0 / 0
Опять про форму!
    #35003823
Larkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ, буду медитировать сама!!!
...
Рейтинг: 0 / 0
Опять про форму!
    #35003850
Надо не медитировать, а давать информацию в виде кусков кода, сообщений об ошибках и т.п. Телепатов, которые могли бы заглянуть в ваш монитор, тут нет.
...
Рейтинг: 0 / 0
Опять про форму!
    #35004104
Рома Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В самом деле, формулировка вопроса, достойная монологов Михаила Задорнова.
...
Рейтинг: 0 / 0
Опять про форму!
    #35006472
Larkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Медитация не удается.
инит формы поиска

parameters toBaseForm,pl

Thisform.baseform=toBaseForm
thisform.combo1.value='По фамилии'
priz_q=.t.
public pl1
pl1 = 0
pl1=pl

кнопка поиска на ней

IF vartype(Thisform.baseform) != 'O'
DO form pl_ruch noshow
thisform.baseform = pl_ruch
ENDIF
SELECT uchet
SET index to _fam
SEEK (alltrim(m.fam))
SET near on
IF found()

ELSE
go top

ENDIF
thisform.Release()
thisform.hide()
thisform.baseform.show

кнопка поиска на форме с гридом

do form find with thisform,pl1

на форме с гридом рефреш

thisform.grid1.setfocus
...
Рейтинг: 0 / 0
Опять про форму!
    #35006805
да поможет вам thisform.baseform.show(2), если модальность этой формы не так важна, но только установите её свойство AllwaysOnTop в .Т.
...
Рейтинг: 0 / 0
Опять про форму!
    #35006814
Рома Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пропиши в методе Click кнопки поиска на форме с гридом первой командой что-то вроде:
MessageBox ('Событие Click возбудилось.')
Если этого сообщения не увидишь при повторном нажатии, значит, это глюк FoxPro. Я его встречал, так и не обошёл.
...
Рейтинг: 0 / 0
Опять про форму!
    #35006883
Larkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рома Б.Пропиши в методе Click кнопки поиска на форме с гридом первой командой что-то вроде:
MessageBox ('Событие Click возбудилось.')
Если этого сообщения не увидишь при повторном нажатии, значит, это глюк FoxPro. Я его встречал, так и не обошёл.
Так вот именно что эта кнопка просто нажимается и ничего не делает как будто там ничего нет, как впрочем и кнопка выхода где стоит просто thisform.release, а работает только одна кнопка из 3-х, где вызывается одна процедура.
...
Рейтинг: 0 / 0
Опять про форму!
    #35007291
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А формы модальные наверно? У форм WindowType что стоит?

Похожие проблемы могут быть при передаче фокуса между модальными формами.
Попробовать убрать это:
Larkin
на форме с гридом рефреш

thisform.grid1.setfocus

У немодальных форм такая проблема может быть (форма не закрывается и не на что не реагирует) если
где-то сохранена ссылка на любой контрол формы (кнопку, текстбокс и т.п.) Но в приведенном коде ничего похожего нет.
...
Рейтинг: 0 / 0
Опять про форму!
    #35007301
Larkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Формы модальные, по другому вообще не получается.
...
Рейтинг: 0 / 0
Опять про форму!
    #35007336
Larkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рефреш убрала, реакция не изменилась, даже после того как сделала чтобы форма с гридом убиралась при запуске формы поиска - реакция нисколько не изменилась.
...
Рейтинг: 0 / 0
Опять про форму!
    #35007574
Рома Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дима Т правильно указал возможные причины.

Дело в том, что в Visual FoxPro особый подход для работы с переменными объектами. В таких языках, например, как C++ или Паскаль, различают переменные типа объект и переменные типа ссылка-на-объект. Переменная типа объект - это по сути участок памяти под экземпляр класса, возможно, огромный, если класс сложный. Ссылка на объект - это всегда 4 байта (или немного больше в новых системах), в которых хранится лишь АДРЕС экземпляра-объекта. В Visual FoxPro существуют только ссылки на объект. Например, переменная объектного типа loForm - это 4 байта с адресом. Когда в C++ или Паскале уничтожается объект с помощью одной из ссылок на него командами delete Object1 или Dispose (Object1) в C++ и Паскале соответственно, то он (объект, т.е. участок памяти под экземпляр класса) СРАЗУ ЖЕ высвобождается. Если на этот объект существовали ещё ссылки, то они становятся некорректными (что ведёт часто к ошибкам обращения к памяти), и их желательно принудительно устанавливать в nil или null (C++ и Паскаль) или не использовать больше. В Visual FoxPro всё проще и одновременно опаснее. Команды типа RELEASE вовсе не обязательно высвободят участок памяти под объект, они лишь уничтожат очередную ссылку на него. До тех пор, пока на объект существует хотя бы одна ссылка, объект физически уничтожен не будет. Возможно, здесь мы имеем косвенный эффект такой организации работы с переменными объектами в Visual FoxPro. Надо почаще вызывать команды вида:

RELEASE goФорма
RELEASE goЕщёОднаСсылкаНаФорму
ThisForm.ОчереднаяСсылкаНаФорму = NULL
ThisForm.RemoveProperty ('СамаяПоследняяСсылкаНаЭтуЖеФорму')

То же можно делать с членами формы. (Логика такая: как можно уничтожить форму, если на её член есть ссылка?)

В-общем, надо экспериментировать, если есть желание и время. Но это всё домыслы. Возможно, это просто откровенный глюк FoxPro.
...
Рейтинг: 0 / 0
Опять про форму!
    #35007611
Larkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю, что вся загвоздка в baseform. Я его создавала из меню form->newproperty, дала название и все. Он присутствует в свойствах формы, но его значение none. Это правильно или нет? Тем более что если на него лишний раз сослаться, то на него ругается программа.
...
Рейтинг: 0 / 0
Опять про форму!
    #35007660
Рома Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LarkinЭто правильно или нет?
Да чёрт его знает :)
Разумеется, это типовое использование свойств формы. Ну, попробуй выдать команду:
ThisForm.RemoveProperty ('baseform') перед тем, как её (форму) release'ить.
Тут можно денька 3 просидеть.
...
Рейтинг: 0 / 0
Опять про форму!
    #35007724
Larkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все попробовала!!! Что можно и не можно. Не думаю что это может быть глюк 6-го фокса, но выход из проблемы не вижу.
...
Рейтинг: 0 / 0
Опять про форму!
    #35007828
Рома Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LarkinНе думаю что это может быть глюк 6-го фокса
Не Боги горшки обжигают.
...
Рейтинг: 0 / 0
Опять про форму!
    #35007895
Larkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, сделала. Не так как хотелось бы, но тем не менее то что нужно
...
Рейтинг: 0 / 0
Опять про форму!
    #35008161
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рома Б.... До тех пор, пока на объект существует хотя бы одна ссылка, объект физически уничтожен не будет. Возможно, здесь мы имеем косвенный эффект такой организации работы с переменными объектами в Visual FoxPro. ... Ну ты и развернул теорию :)

Я про ссылки на контролы формы писал. Просто недавно сам сталкивался. Ссылки на форму фокс сам корректно очищает когда форма закрывается и проблем не возникает, а вот если куда передали thisform.text1 например, а там ее приняли и сохранили, то форма будет висеть и не закроется пока там ее не очистят.

LarkinФормы модальные, по другому вообще не получается.
Используемый подход взаимодействия между формами рассчитан на немодальные формы. Все побочные явления вылезли сразу.
С модальными все гораздо проще. Но подругому. Модальная форма может еще ответ возвращать (как функция), этим и надо пользоваться. И сам поиск в форму с гридом а форма поиска только ввод значения для поиска.
Примерно так
Код: 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.
proc pl_ruch.КнопкаПоиск.Click()
thisform.Grid.SetFocus()
do form find with pl to lcFind
if !empty(lcFind)
   thisform.Poisk(lcFind)
endif

proc pl_ruch.Poisk()
lpara tcFind
* тут поиск по своим правилам
SET index to _fam in uchet
SET near on && это лучше вынести ко всем SETам, а не размазывать SETы по всему коду
IF !indexseek(tcFind, .T., 'uchet', '_fam')
    go top in uchet
ENDIF


proc find.Init()
lpara tcVal
thisform.textbox.value = tcVal
thisform.AddProperty('cRet', '')

proc find.КнопкаИскать.Click()
thisform.cRet = thisform.textbox.value

proc find.КнопкаИскать.Unload()
return thisform.cRet
*return thisform.textbox.value нельзя т.к. thisform.textbox уже не существует
...
Рейтинг: 0 / 0
Опять про форму!
    #35008176
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опечатка:
Код: plaintext
proc find.КнопкаИскать.Unload()
подразумевалось
Код: plaintext
proc find.Unload()
...
Рейтинг: 0 / 0
Опять про форму!
    #35008186
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и тут:
Код: plaintext
1.
2.
proc find.КнопкаИскать.Click()
thisform.cRet = thisform.textbox.value
добавить
Код: plaintext
thisform.Release()
...
Рейтинг: 0 / 0
Опять про форму!
    #35008346
Рома Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дима ТНу ты и развернул теорию :)
Ничё, полезно всё равно. Выясняется, что многие этого не знают.

Насчёт возвращаемого значения:
Лично я всегда использую свойство Tag формы и возвращаю не собственно данные (коих может быть много, вообще-то), а лишь результат отработки формы, свидетельствующий о том, передумал ли пользователь (нажал отмену), или всё в штатном порядке, или ещё какие-то варианты. А для возвращаемых значений использую глобальные переменные с особым префиксом par_, которые сразу же уничтожаю по получении их родительской формой. Не Вижу в таком подходе использования глобальных переменных ничего постыдного за неимением более элегантного. (Более элегантный - это возврат переменных по ссылкам, но по каким?)
...
Рейтинг: 0 / 0
Опять про форму!
    #35012028
Bl@ze¶ox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моему проще из модальной формы возвращать значение её свойства напрмер так:
Нам нужно запросить значение формой frmFindDlg
для нее добавляем свойство FindPar и его привязываем к controlsource'у textbox,combo или чего нибудь еще

в unload приписываем:
return this.FindPar
вызов выглятит где-то так:
do form frmFindDlg with <список параметров> to <имя переменной для хранения данных из формы frmFindDlg>
if vartype(<имя этой же переменной>)!='L'
<команды обработки поиска>
endif
При этом если пользователь в форме frmFindDlg нажимает отмена, то в метод click кнопки отмена пишем:
thisform.FindPar=.F.
thisform.release()
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять про форму!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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