powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как вернуть значение из модальной формы ?
65 сообщений из 65, показаны все 3 страниц
Как вернуть значение из модальной формы ?
    #33498644
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я работаю с Visual FoxPro 8 SP1

у меня есть модальная форма диалога входа (ну там имя, пароль, все такое).
во время работы этой формы мне не нужно главное окно ФоксПро, поетому я пишу SCREEN=OFF в файле CONFIG.FPW.
мне нужно вернуть некоторое значение из этой формы (например, вошел человек или нет) я не хочу использовать глобальные переменные для подобных случаев, поскольку считаю такой подход примером плохого тона (ну вы меня понимаете - область видимости переменных и все такое...), поэтому я пользуюсь оператором DO FORM MyForm TO MyVar.

вот. мы подошли к сути.
поскольку у меня нет ни главного окна ФоксПро (SCREEN=OFF) ни своего главного окна (я его еще не инициализировал, поскольку человек еще не вошел. а мало ли, может, он ваще не войдет) из за того, что главного окна нет, сразу после срабатывания Инита моей модальной формы она сразу выгружается (не знаю почему, видимо это очередной баг фокса, мать его).
вот. я могу, конечно, делать и так:
DO MyForm
READ EVENTS
а в Unload-е формы писать CLEAR EVENTS, но тогда как я верну значение вызывающей форму программе ?
я додумался только до следующего идиотического способа:
определяю класс на основе Custom, добавив в него всего одно PUBLIC свойство vRetVal.
создаю объект этого класса перед тем, как вызываю форму.
вызываю форму, передавая этот объект в ее Init, а там сохраняю его в заранее определенном для этого свойстве формы.
использкую READ EVENTS / CLEAR EVENTS для того, чтобы форма работала нормально.
при завершении работы формы назначаю свойству vRetVal того объекта необходимое значение.
форма отрабатывает, релизится, а объект остается. теперь я могу узнать значение !

люди, но это же бред, делать такие вещи ради того, что должно работать само, а не работает, мать его.

подскажите более простой способ, но без использования (глобальных) переменных, пожалста

спасибо заранее
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33498759
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
o = CREATEOBJECT('ReturnValue')
WITH o
	.show( 1 )
	WAIT WINDOW TRANSFORM(.ReturnValue)
	.release()
ENDWITH 	


DEFINE CLASS returnvalue AS form

	Caption = "Form1"
	Name = "Form1"


	ADD OBJECT commandbutton1 AS commandbutton WITH ;
		Top =  204 , ;
		Left =  24 , ;
		Height =  36 , ;
		Width =  288 , ;
		Caption = "thisform.ReturnValue = 100", ;
		Name = "Commandbutton1"


	PROCEDURE Init
		this.AddProperty('ReturnValue') 
	ENDPROC


	PROCEDURE commandbutton1.Click
		thisform.ReturnValue =  100 
	ENDPROC


ENDDEFINE
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33498974
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм, этот способ очень хорош, но только в том случае, если я работаю с классами форм. но как быть, если политика партии такова, что мне приходится иметь дело с SCX файлами ?
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33498995
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем PUBLIC переменные!?. Достаточно PRIVATE, определенные в том методе, который вызывает диалоговую форму.
Глянь мой пример тут: http://www.caws.atnet.ru/vfox/vfox-sql6.html, метод AddNew
С уважением, Алексей
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33499037
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может не в тему.. но как-то надо было с формы передать значения 5-ти текстбоксов.. сделал просто
При выгрузке формы пишется
SELECT Text1 AS Param1, Taxt2 AS Param2... INTO CURSOR MyCursor
и все... при закрытии этой формы курсор остался и делай с его значениями, что угодно....
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33499120
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
do form with par1,par2,par3 (так только в форме будут видны, но не вернутся)

do form with @par1,@par2,@par3 (эти назад вернутся)


в форме в ините
lparam tpar1,tpar2,tpar3

затем им где нить присваивай

tpar1=..
tpar2=...
tpar3=...
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33499195
FM32....
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex11100

do form with @par1,@par2,@par3 (эти назад вернутся)



1 версия?
2 есть в документации (в 5-6-7 не нашел)
или методом проб найдено?
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33499264
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
????
читайте, там все написано
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501117
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi All!

2 --Eugene--

Чтобы "показать" форму в отсутствие главного окна её пришлось сделать
AsTopLevel - так? А теперь почитай хелп про AsTopLevel+Modal - коротко
говоря модальность в этом случае игнорируется. Так что у тебя абсолютно
нормальный случай НЕмодальной формы. При этом ты сделал совершенно верный,
нормальный и IMHO красивый вариант реализации - я например тоже параметры в
форму передаю (и получаю обратно) при помощи паттерна ParameterObject - это
универсально, гибко (хоть 1 возвращай параметр, хоть 1000 - с передачей тоже
самое - никаких дурных ограничений на число параметров при вызове метода).
Вообще я считаю что трюк с "возвратом" значения из формы слеудет давно
перестать использовать - уже хотя-бы потому что он работает ТОЛЬКО с scx
формами, причём ТОЛЬКО с модальными.

Варианты с Private переменной, и тем более с курсором гораздо хуже (начиная
с того что Private объявленная в main по сути ничем не отличается от Public,
а возврат через курсор будет работать исключительно если вызываемая форма
имеет Default DataSession)...

> определяю класс на основе Custom, добавив в него всего одно PUBLIC
> свойство vRetVal.
> создаю объект этого класса перед тем, как вызываю форму.

Свойство можно добавить в рантайме - т.е. можно использовать сразу базовый
класс, не плодя новых.
loParameter = CREATEOBJECT("Custom")
loParameter.AddProperty("vRetVal", .F.)
....

> вызываю форму, передавая этот объект в ее Init, а там сохраняю его в
> заранее определенном для этого свойстве формы.

Кстати такая функциональность у меня прописана сразу в базовом классе
формы - у меня ЛЮБОЕ взаимодействие вызывающего кода с вызываемой формой
происходит при помощи ParameterObject. При этом занимаясь субклассированием
конечно приходится помнить о необходимости вызова из Init подкласса кода
родителя, с передачей ему этого параметра (если он был принят! что вызывает
несколько громоздкую констуркцию). Впрочем это можно обойти, если запретить
в подклассах переопреелять САМ Init формы, создав скажем 2 "своих" метода, и
уже их вызывать из Init базовой формы...

> люди, но это же бред, делать такие вещи ради того, что должно работать
> само, а не работает

С модальныи формами только "это" работает - у тебя же форма немодальная.

2 alex11100

Ага, только ты забыл что для того чтобы это всё работало, нужно ещё и в Init
формы написать This.Show() - а кроме того присваивать "возвращаемые"
значения не "где-нибудь" а в том же само Init формы, но уже ниже
This.Show() - т.е. когда форма уже скрыта/уничтожается.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501160
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KА зачем PUBLIC переменные!?. Достаточно PRIVATE, определенные в том методе, который вызывает диалоговую форму.если речь идет о строке
Код: plaintext
DO FORM Currency_AddEdit WITH THISFORM, "ADD" TO m.llResponse
, то читайте мой первый пост внимательнее. дело в том, что раньше я программировал было на паскале, на си. там область видимости переменных играет немалую роль, и считается дурным тоном делать связку по данным между программными модулями. там это проще, поскольку есть указатели. в фоксе же их нет. вот и приходится выеживаться. мать его. да тут дело даже не в этом, а в том, что бага в фоксе (описанная мной ранее) не дает нормально жить.
и это только одна (1) бага. а их там пруд пруди, если копнуть глубже. чего только PageFrame стоит, мать его
alex11100
Код: plaintext
1.
2.
3.
do form with @par1,@par2,@par3
tpar1=..
tpar2=...
tpar3=...
это в ините проканает. а если мне нужно их присваивать в анлоаде или в дестрое или еще где ?

Igor KorolyovЧтобы "показать" форму в отсутствие главного окна её пришлось сделать
AsTopLevel - так? А теперь почитай хелп про AsTopLevel+Modal - коротко
говоря модальность в этом случае игнорируется. Так что у тебя абсолютно
нормальный случай НЕмодальной формы.
нет, я делаю ее (InTopLevelForm или InScreen) + Desktop=.T.
Form::Desktop - хорошее свойство
Igor Korolyov
я например тоже параметры в форму передаю (и получаю обратно) при помощи паттерна ParameterObjectзначит не один я очередной раз придумал велосипед с квадратными колесами.. это воодушевляет
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501360
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
...
Кстати такая функциональность у меня прописана сразу в базовом классе
формы - у меня ЛЮБОЕ взаимодействие вызывающего кода с вызываемой формой
происходит при помощи ParameterObject
....

Какой смысл создавать специальный объект-посредник для передачи параметров в диалоговую форму. Чем для этого плоха сама вызывающая форма. Кто вам при вызове диалоговой форму мешает передать ссылку на вызывающюю и затем в конструкторе модальной:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
LPARAMETERS loForm
WITH THISFORM
DODEFAULT()
IF PCOUNT() =  1  AND UPPER(VARTYPE(m.loForm)) == "O" ;
   AND UPPER(m.loForm.BaseClass) = "FORM"
      .P_Form = m.loForm
ELSE
   IF TYPE("_SCREEN.ActiveForm") == "O" AND ;
         UPPER(_SCREEN.ACTIVEFORM.BaseClass) = "FORM"
     .P_Form = _Screen.ActiveForm
  ENDIF
ENDIF
IF TYPE("THISFORM.P_FORM") == "O" ;
       AND UPPER(THISFORM.P_FORM.BaseClass) = "FORM"
   SET DATASESSION TO (THISFORM.P_FORM.DataSessionID)
ENDIF
ENDWITH
И теперь в модальной форме вы:
1. Имеете доступ во всем курсорам главной формы (DataSession у них равны)
2. Через ссылку THISFORM.P_Form имеете доступ ко всем свойствам вызывающей формы.
Тем более, как вы сами заметили, свойства можно добавлять (и, кстати, удалять) динамически. В том числе и в вызывающую (не модальную) форму.
С уважением, Алексей
P.S. Кстати, методы вы добавлять в свой Proxy-объект динамически не можете, а я могу через ссылку на вызывающую форму, использовать и ее методы в модальной форме.
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501382
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--
если речь идет о строке
Код: plaintext
DO FORM Currency_AddEdit WITH THISFORM, "ADD" TO m.llResponse
, то читайте мой первый пост внимательнее. дело в том, что раньше я программировал было на паскале, на си. там область видимости переменных играет немалую роль, и считается дурным тоном делать связку по данным между программными модулями. там это проще, поскольку есть указатели. в фоксе же их нет. вот и приходится выеживаться. мать его. да тут дело даже не в этом, а в том, что бага в фоксе (описанная мной ранее) не дает нормально жить.
и это только одна (1) бага. а их там пруд пруди, если копнуть глубже. чего только PageFrame стоит, мать его
Ну, допустим, в VFP тоже етсь область видимости переменных (LOCAL, PRIVATE, PUBLIC) и она тоже имеет огромное значение. Или вы все свои переменные оформляли в виде PUBLIC?
Насчет указателей. Они тоже есть в VFP и активно используются. В моем примере, которые вы привели как раз и используются указатель на вызывающюю форму (THISFORM) для того, чтобы модальная форма могла через этот указатель использовать свойства и методы вызывающей формы (например ее DataSession и положения относительно _SCREEN).
В VFP тоже считается дурным тоном иметь "связку между программными можулями через переменные" (и тем более, через PUBLIC). Но вызов модальной формы из главной - это никак нельзя назвать, как связь между програмными модулями. Вот вместе они составляют программный модуль.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501410
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-K Igor Korolyov
...
у меня ЛЮБОЕ взаимодействие вызывающего кода с вызываемой формой
происходит при помощи ParameterObject
....

Какой смысл создавать специальный объект-посредник для передачи параметров в диалоговую форму. Чем для этого плоха сама вызывающая форма. Кто вам при вызове диалоговой форму мешает передать ссылку на вызывающюю и затем в конструкторе модальной...да ? а если я вызываю форму из PRG файла ? это вам не шубу в трусы заправлять (пардон)
Aleksey-KP.S. Кстати, методы вы добавлять в свой Proxy-объект динамически не можете, а я могу через ссылку на вызывающую форму, использовать и ее методы в модальной форме.странно, а разве вообще можно "добавлять" методы динамически ? а если речь идет об использовании существующих методов формы, переданной по ссылке в вызываемую, то оно, конечно, хорошо, но, опять же, как быть, если "вызывающей" формы нет, а "вызываемая" форма запускается в PRG файле. например, в main.prg происходит DO FORM Login.scx ?
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501423
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--? а если я вызываю форму из PRG файла ? это вам не шубу в трусы заправлять (пардон)

Я бы вам советовал:
1. Отказаться от использования VFP и вернуться назад на PASCAL, DELPTHI и пр. Там у вас, очевидно, получалось лучше и с шубами и с трусами.
2. Сменить тон.
3. Отказаться от вызова формы Login из главного программного модуля. (это уже по существу).
Алексей.
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501451
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу прощения, если вас задела пара слов не по существу
Aleksey-KЯ бы вам советовал отказаться от вызова формы Login из главного программного модуляа как вы себе представляете запуск диалога входа если не в главной программе ?
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501505
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычную форму можно заставить вести себя как класс
local loFrm
Код: plaintext
1.
do form frmMy name loFrm noshow 
loFrm.Show() 
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501539
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--прошу прощения, если вас задела пара слов не по существу
Aleksey-KЯ бы вам советовал отказаться от вызова формы Login из главного программного модуляа как вы себе представляете запуск диалога входа если не в главной программе ?
Ну, например, главная программа тоже реализован как класс, объект которого создается в MAIN.PRG и для входа в систему (после успешного создания экземпляра этого класса), просто вызывается соответствующий метод этого объекта, например Login, а у объекта есть свойства: User_Login, User_Password и еще все, что вашей душе угодно.
Может вам поможет мой пример: http://www.caws.atnet.ru/vfox/vfox-sql.html
С уважением, Алексей.
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501561
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripОбычную форму можно заставить вести себя как класс
local loFrm
Код: plaintext
1.
do form frmMy name loFrm noshow 
loFrm.Show() 
это понятно, но потом ведь все равно придется дописать READ EVENTS, а в методе Unload этой формы написать CLEAR EVENTS, поскольку диалог входа является модальной формой. но как мне получить результат ? я не могу использовать DO FORM TO, потому, как не имею главного окна.

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

жаль, что нет нормального способа
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501598
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KНу, например, главная программа тоже реализован как класс, объект которого создается в MAIN.PRGспасибо за пример. а можно ли как-то перегрузить класс приложения и сделать свой, из которого будет получаться объект Application ?
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33501629
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
я не стараюсь разжевывать, я просто намекнул как это делается

вот еще способ

this.runform(nameform,@par1,@par2,@par3)

method runform
lpara tnameform,tpar1,tpar2,tpar3
local oForm
do form tnameform name oForm
if type(oForm)=="O" and oForm.lResult = .t.
tpar1 = ??
tpar2 = ??
tpar3 = ??
endif


а это вообще вот рабочий кусок
*:Remarks:
Активация формы выбора товаров.

*:Example:
oDlg.SelectList_Good(this.cObjCl, this.cExpr, this.tcExprConst, @lcXML)

lparameters tcCursor, tcExpr, tcExprConst, tnPriID, tData, tcTrasfer
* Создаем курсорадаптер для справочника
if type("tcCursor")="C" and !used(tcCursor)
if oApp.loadObject(tcCursor)<>0
oDlg.MsgErr("Невозможно инициализировать объект "+tcCursor,1,1,1,1, cj_getReturn())
return -1
endif
endif
* Активируем форму выбора из справочника
local lnResult, oDlgSelectList
lnResult = 0
oDlgSelectList = createobject("frm_selectlist_good", tcCursor, tcExpr, tcExprConst, tnPriID, tData)
if vartype(oDlgSelectList)=="O" and !isnull(oDlgSelectList)
oDlgSelectList.show()
if vartype(oDlgSelectList)=="O" and !isnull(oDlgSelectList)
lnResult = oDlgSelectList.nModalResult
tcTrasfer = oDlgSelectList.cTrasfer
else
lnResult = 0
tcTrasfer = 0
endif
endif
release oDlgSelectList

return lnResult
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33502065
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100
Код: plaintext
1.
2.
3.
if vartype(oDlgSelectList)=="O" and !isnull(oDlgSelectList)
...
endif
Код: plaintext
1.
2.
3.
?vartype(THISFORM)
O
?vartype(.NULL.)
X
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33502100
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и чта дальша???

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

Форма ввода логина и пароля ЧТО должна сделать?

Я всегда считал, что эта форма дает пользователю ввести 2 значения и по нажатию кнопки Ok делает вывод о допустимости или не допустимости дальнейшей работы этого пользователя.

Т.е. эта проверка делается ВНУТРИ формы, а вовсе не в основной программе. Ну, или как минимум, из этой формы организуется вызов внешней процедуры проверки.

Другими словами, ЧТО предполагается возвращать из этой формы? Какой смысл в этом самом возвращаемом значении?

Значит, логика работы совершенно другая. Эта форма вообще ничего не возвращает, а только САМА принимает решение: продолжить дальнейшую работу с программой или завершить.

Следовательно код главной программы будет примерно таким:

Код: plaintext
1.
2.
3.
4.
_SCREEN.Visible = .F.	&& обычно дается в Config.fpw
DO MainMenu.mpr		&& Основное управляющее меню приложения
DO FORM Login.scx
READ EVENTS

В событии UNLOAD формы Login.scx дается примерно такой код:

Код: plaintext
1.
2.
3.
4.
5.
IF (разрешить работу с программой)
	_SCREEN.Visible = .T.
ELSE
	CLEAR EVENTS
ENDIF

ВСЕ! Какие еще возвращаемые значения?

Если в этой форме делаются какие-то глобальные настройки, то они именно глобальные. Т.е. присваиваются глобальным переменным или глобальному объекту. Опять нет смысла в возвращаемых значениях.

К сведению :

Если в модальной форме дать команду ThisForm.Hide(), то форма скроется и выполнение программы продолжится со следующей после команды DO FORM команды. Т.е. с модальными формами можно работать так:

Код: plaintext
1.
2.
3.
4.
5.
DO FORM MyModalForm.scx NAME MyForm
IF TYPE("m.MyForm") = "O" AND IsNull(m.MyForm) = .F.
	?MyForm.Caption
	MyForm.Release()
ENDIF

В данном случае, заголовок окна формы будет прочитан если форма будет закрыта командой ThisForm.Hide().
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33502437
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Eugene--
там что про изнул то было
типа нашел у меня глюк???

нехорошо - дяденьку обидел
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33502515
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 alex11100 :)

ВладимирМВообще-то, я не понял самой постановки задачи.
Форма ввода логина и пароля ЧТО должна сделать?
Я всегда считал, что эта форма дает пользователю ввести 2 значения и по нажатию кнопки Ok делает вывод о допустимости или не допустимости дальнейшей работы этого пользователя... Другими словами, ЧТО предполагается возвращать из этой формы? Какой смысл в этом самом возвращаемом значении?не вдавайтесь в подробности, да Бог знает, что там на форме делается. разве только логин может там быть ? ВладимирМ К сведению :
Если в модальной форме дать команду ThisForm.Hide(), то форма скроется и выполнение программы продолжится со следующей после команды DO FORM команды. Т.е. с модальными формами можно работать так:
Код: plaintext
1.
2.
3.
4.
5.
DO FORM MyModalForm.scx NAME MyForm
IF TYPE("m.MyForm") = "O" AND IsNull(m.MyForm) = .F.
	?MyForm.Caption
	MyForm.Release()
ENDIF
В данном случае, заголовок окна формы будет прочитан если форма будет закрыта командой ThisForm.Hide().а вот это действительно то, что мне нужно! спасибо, дружище!
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33502568
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ВладимирМ:

нет. не работает. главного окна-то нет, черт бы его побрал

придется далать DO FORM, а затем READ EVENTS

а тут уже ниче не поделать - форма релизится.. :(
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33502645
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМВообще-то, я не понял самой постановки задачи.
Форма ввода логина и пароля ЧТО должна сделать?
Я всегда считал, что эта форма дает пользователю ввести 2 значения и по нажатию кнопки Ok делает вывод о допустимости или не допустимости дальнейшей работы этого пользователя.

Т.е. эта проверка делается ВНУТРИ формы, а вовсе не в основной программе. Ну, или как минимум, из этой формы организуется вызов внешней процедуры проверки.

Другими словами, ЧТО предполагается возвращать из этой формы? Какой смысл в этом самом возвращаемом значении?

Значит, логика работы совершенно другая. Эта форма вообще ничего не возвращает, а только САМА принимает решение: продолжить дальнейшую работу с программой или завершить.

Уважаемый --Eugene-- обратите внимание на эту цитату ВладимираМ!
Именно так и надо делать (только я делаю проверку в событии QueryUnload формы Login, а не в событии Click кнопки OK, но это суть не меняет).
Подключение к серверу и проверка пароля производится в форме Login и только там! А способ вызова этой формы, это дело вкуса.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33503660
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Специально проверил.

Если _SCREEN не видимо, то модальность InTop-Level формы игнорируется. Что логично.

Если контейнер (_SCREE) в котором открывается объект скрыт, то элемент контейнера (форма) по логике тоже должен быть скрыт. А скрытая (невидимая) форма не может быть модальной.

Как только я делаю _SCREEN видимым, тут же "включается" модальность.

Так что, у тебя 2 варианта действий:

Либо оставить _SCREEN видимым (тогда работает модальность), либо "подвешивать" форму логина через READ EVENTS.

При этом, способ создания формы не играет никакой роли. Не важно, будет ли это класс или DO FORM.
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33503786
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KПодключение к серверу и проверка пароля производится в форме Login и только там!я же это отлично понимаю. но при чем тут именно логин ? а если я хочу показать форму ввода даты, например ? или просто свой собственный абстрактный инпутбокс. да мало ли что

вобщем, ясно
всем спасибо, товарищи
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33503869
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--я же это отлично понимаю. но при чем тут именно логин ? а если я хочу показать форму ввода даты, например ? или просто свой собственный абстрактный инпутбокс. да мало ли что

вобщем, ясно
всем спасибо, товарищи
Пожалуйста, но Login является хорошим примером, так как запускается, как правило, в самом начале работы приложения, когда еще приложение полностью не "раскрутилось". А во всех других вариантах, диалоговая форма является "подчиненной" какой то другой формы и я использую передачу параметров в диалоговую форму ссылку на главную (THISFORM) и (или) PRIVATE (не PUBLIC) переменные.
С уваженем, Алексей.
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33506320
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi All!

2 Aleksey
Передавать ThisForm - это жёстко себя привязывать к формам - предпочитаю
(если уж это действительно надо) передать ссылку на Thisform в свойстве
ParameterObject-а, а заодно возможно и ссылку на контрол откуда идёт вызов
подчинённой формы. Подчёркиваю - ЕСЛИ ЭТО НУЖНО - обычно у меня вызываемая
форма не знает ничего о вызывающем её коде, и тем более не делает
предположений насчёт того что будет передана форма, или ссылка на контрол...
Хотя принципиальной разницы в том что форма или контрол сами служат в
качестве ParameterObject (а не отдельный объект) нету.
Как уже замечено это позволяет вызывать форму из prg (там то по любому
придётся создать объект - прочём IMHO Custom для этого лучше подходит чем
Form - а в свежих версиях фокса там в вовсе Empty есть). Также проще
работать с "несохраняемым" ParameterObject - т.е. отработала вторая форма,
мы получили что хотели и объект уничтожился - а так все данные останутся в
свойствах Form... Кстати удалить свойство штатным образом можно стало только
начиная с VFP8. Насчёт добавления методов не понял - зачем это надо, и чем
тут Form выигрывает по сравнению с Custom (ну точнее классы от них
производняе конечно) - если метод есть, его можно вызвать, если же его нету,
то ни о каком "добавлении метода" речи не идёт.
Кстати для уточнения - scx форма - это особого рода подкласс (правда с рядом
ограничений по сравнению с vcx, и с "довеском" в виде "встроенного" DE
Object - который кстати ведёт себя не совсем вменяемо - например его метод
OpenTables зачем-то вызывается до Init - и вообще есть масса нюансов с DE
который в scx форме живёт) - так что некорректно говороить о том, что эта
форма есть нечто "базовое".
Кстати использование goApp в качестве "точки вызова" формы Login по сути
мало отличается от main.prg методы goApp можно рассматривать как
общедоступные процедуры, а его свойства как Public переменные (со всеми
вытекающими из этого нюансами использования).

2 --Eugene--
Неважно где будет "создаваться" значение свойств - т.е. у тебя по закрытию
формы (кнопка, "крестик" и т.п.) нужно лишь установить какие-то свойства
формы и всё. И т.к. у тебя в форме в Init была строка This.Show(1) - то
управление вернётся в Init (это трюк конечно, но он вполне работает) - и
можно будет присвоить значения параметрам переданным по ссылке. Я не
призываю так делать, но это вполне возможно.
Насчёт VarType+Isnull - да, это избыточно, но если заменить это нa
Type+Isnull - то будет в самый раз! Дело в том, что Vartype
(oSomeObject.oSomeProperty) - может вызвать ошибку - если собственно объекта
oSomeObject не существует - тогда как TYPE() ошибки поглощает, что весьма
удобно - НО Type имеет проблему - он возвращает "реальный" тип - т.е. если у
тебя была где-то ссылка на объект, скажем форму, а потом ОБЪЕКТ уничтожили
(ссылка при этом зануляется автоматом) - то ТИП остаётся "O" - несмотря на
то, что "значение" там будет .NULL. Обходят это второй проверкой через
Isnull, или "усложнив" проверку в Type скажем так:
Type("oSomeObject.oSomeProperty.Name") = "C" - ну или проверив иное
гарантированно имеющееся у соответствующего объекта свойство (если оно есть,
значит и объект жив).

2 Владимир&Aleksey
Я считаю что как раз ТАК делать и не стоит - что текое форма - это элемент
UI - сегодня это одна форма, завтра другая, послезавтра третья - а вот
логика авторизации - это отдельная вещь - причём она также может меняться
много раз - НЕЗАВИСИМО от изменения формы ввода (сегодня в DBF храним логин
и пароль - завтра на SQL сервере, или просто способ хэширования пароля
поменяли, или ещё что) - и я бы ни в коем случае не советовал "совмещать"
эти 2 вещи. Форма ввода должна... ввести данные и вернуть их в точку
вызова - т.е. быть не более "навороченной" (не в плане UI конечно - там
можно хоть радугу и фанфары сделать? или чтоб она подпрыгивала и
пританцовывала при наборе) чем Inputbox() - а уже в точке вызова и должен
проходить анализ - при этом конечно это должен быть метод класса goApp, или
отдельный объект... А саму форму можно оставить висеть на время проверки,
выведя туда прогрессбар или анимацию или ещё чего - но всё-же разделить 2
задачи (UI и собственно авторизацию) стоит.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33506550
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
Hi All!

2 Aleksey
Передавать ThisForm - это жёстко себя привязывать к формам
- предпочитаю
(если уж это действительно надо) передать ссылку на Thisform в свойстве
ParameterObject-а, а заодно возможно и ссылку на контрол откуда идёт вызов
подчинённой формы. Подчёркиваю - ЕСЛИ ЭТО НУЖНО - обычно у меня вызываемая
форма не знает ничего о вызывающем её коде, и тем более не делает
предположений насчёт того что будет передана форма, или ссылка на контрол...
Хотя принципиальной разницы в том что форма или контрол сами служат в
качестве ParameterObject (а не отдельный объект) нету.

У меня как раз все наоборот. Как правило (за очень редким исключением), диалоговые формы не универсальные, и "ЗНАЮТ" (в том числе и через передаваемую ссылку), что за форма ее вызывает.

Igor Korolyov
Насчёт добавления методов не понял - зачем это надо, и чем
тут Form выигрывает по сравнению с Custom (ну точнее классы от них
производняе конечно) - если метод есть, его можно вызвать, если же его нету,
то ни о каком "добавлении метода" речи не идёт.

Я имел в виду, что через ссылку на вызывающую форму я могут использовать ее методы в диалоговой, чтобы не дублировать их.
Igor Korolyov
Кстати использование goApp в качестве "точки вызова" формы Login по сути
мало отличается от main.prg методы goApp можно рассматривать как
общедоступные процедуры, а его свойства как Public переменные (со всеми
вытекающими из этого нюансами использования).

А в чем проблема использование PUBLIC переменных с "широко известными" всем объектам программы именами, на которые можно ссылаться из любого места приложения, в том числе и из FRX файлов, меню и пр.
У меня в приложении всего два таких PUCLIC объекта: oApp и oError (обработчик ошибок). И ничего плохого в том, что они PUBLIC я не вижу. Опасность использования таких объектов не том, что они PUBLIC,а в бесконтрольном их создании.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33506857
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я нашел-таки легкий выход из сложившейся ситуации.

в форме диалога делаю следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
PROCEDURE Login.Init
thisform.AddProperty("ReturnValue", "")
ENDPROC

PROCEDURE Login.btnOK.Click
thisform.ReturnValue = "Была нажата кнопка OK"
CLEAR EVENTS
ENDPROC

PROCEDURE Login.btnCancel.Click
thisform.ReturnValue = "Была нажата кнопка Cancel"
CLEAR EVENTS
ENDPROC
а в вызывающем коде пишу:
Код: plaintext
1.
2.
3.
4.
DO FORM login NAME oLogin LINKED
READ EVENTS
m.MyReturnedValue = oLogin.ReturnValue
oLogin.Release()
только теперь встала другая проблема - проблема с закрытием формы крестиком [x] в правом верхнем ее углу.
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33506891
фдуч11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CLEAR EVENTS

написши в дестрой напиши

а из кликов кнопок убери
а в кликах вместо напиши thisform.release()


какое-то шаманство
творишь
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33506938
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точно.. о дестрое я как-то не подумал..
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507063
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
PROCEDURE Login.Init
thisform.AddProperty("ReturnValue", "")
thisform.ReturnValue = "Была нажата кнопка Cancel"
ENDPROC

PROCEDURE Login.btnOK.Click
thisform.ReturnValue = "Была нажата кнопка OK"
CLEAR EVENTS
ENDPROC

PROCEDURE Login.btnCancel.Click
CLEAR EVENTS
ENDPROC
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507096
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Maltsev Max
а если крестиком закрыли ?
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507240
valeryka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет --Eugene--

а если крестиком закрыли ?

form.controlbox=.f.
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507253
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
valeryka

привет,
у тебя метод прям как у хирурга-онколога
шучу
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507261
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://forum.foxclub.ru/read.php?32,177198,177219#msg-177219
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507328
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valeryka
а если крестиком закрыли ?

form.controlbox=.f.ну ты прям как oldschool программер, начавший еще в далеком прошлом с FPW2.6
так нельзя с юзерами обращаться. они тоже люди
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507344
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWisthttp://forum.foxclub.ru/read.php?32,177198,177219#msg-177219я в курсе про QueryUnload(). но она же не вызывается при релизе(). дублировать код подтверждения закрытия формы в релизе() и в QueryUnload() ?
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507453
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene-- PaulWisthttp://forum.foxclub.ru/read.php?32,177198,177219#msg-177219я в курсе про QueryUnload(). но она же не вызывается при релизе(). дублировать код подтверждения закрытия формы в релизе() и в QueryUnload() ?

Код: plaintext
1.
2.
3.
* Событие QueryUnload
NODEFAULT
ThisForm.btnCancel.Click()
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507468
ffffffff____
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Eugene-- valeryka
а если крестиком закрыли ?

form.controlbox=.f.ну ты прям как oldschool программер, начавший еще в далеком прошлом с FPW2.6
так нельзя с юзерами обращаться. они тоже люди

это почему? у меня на каждой форме есть кнопка с дверью и типсом ВЫХОД.. а крестики заблочены..
патамучто я так хочу..
так сказать проверки юзерофф на сообразительность.. заметил странную весчь.. несмотря на наличие двери все норовят в окно.. ой на крест закрывать.. вот оно лекционное = "окна в виндовозе закрываются на крест"
но ниче потыкался на крестне зукрывается - вишь и кнопку с дверями увидел....
не знаю почему - но после такого создается впечатление, что рядовые пользователи - не люди а роботы - сказали на крест - записал в память и везде крест ищет...., а кнопка ВЫход как-то не видна.. странно это все.. думать умеют?
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507477
valeryka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет Алекс!


у тебя метод прям как у хирурга-онколога


А ТО!
Не позволяйте пользователям баловаться, на кнопуньки давить
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507493
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фдуч11100CLEAR EVENTS напиши в дестрой, а из кликов кнопок убери. а в кликах вместо напиши thisform.release()хм, ввел-таки меня в заблуждение. в этом случае получается, что :
Код: plaintext
1.
2.
3.
4.
DO FORM login NAME oLogin
READ EVENTS

?TYPE("oLogin")
U
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507494
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, так их и по кумполу им по-кумполу


а недавно Влад Колосов предложил
формочку бегающую нарисовать

юзер тычит в кнопку, а она от него убегает
во прикольно


"Вдруг из маминой из спальни кривоногий и хромой ... "


шучу
"ну и шутки у Вас ..."
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507496
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас нарисую

по-позже выложу

положите юзерам
интересно прибьют??? или посмеются???
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507500
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм, ввел-таки меня в заблуждение. в этом случае получается, что :

а ты мой золотой костыль юзай
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507540
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ffffffff____а крестики заблочены.. патамучто я так хочу.. думать умеют?твоя должность - программист. человек интелектуального труда. тот, кто облегчает людям жизнь. - это раз.
стандарты пользовательского интерфейса - они для того и сделаны, чтобы юзер всегда на интуитивном уровне знал куда тыкать. а ты обламываешь им всю интуицию (кстати с легкой руки чуваков из Visual FoxPro Team)
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507573
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene-- фдуч11100CLEAR EVENTS напиши в дестрой, а из кликов кнопок убери. а в кликах вместо напиши thisform.release()хм, ввел-таки меня в заблуждение. в этом случае получается, что :
Код: plaintext
1.
2.
3.
4.
DO FORM login NAME oLogin
READ EVENTS

?TYPE("oLogin")
U

И правильно. Просто народ тебя не понял. Ты послал "куда подальше" вообще всю идеологию программирования. А совет тебе давали исходя из того, что ты все-таки этой идеологии придерживаешся.

Хочешь идти "своим путем"? Да пожалуйста! На FoxPro можно еще и не такое "чудо" сотворить. Вот, программку пенсионного фонда, например...
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507626
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а фдуч11100 по-англицки будет alex11100

во как


а я всех перехитрил

шучу

корябки не туда тыкают


так все
БАРДАК
все ПЛОХО


делается все намного проще
зачем вообще там read even если засвечивается модальная форма????

какие ивенты в фоксе могут быть если форма модальная ????
зачем лису мучаете ???

алгоритм такой должен быть


старт прг
код идет
DO FORM login NAME login
if type("login")=="O" and !isnull(login)
if empt(login.islogin)
myquit()
endif
else
myquit()
endif
дальше код
read even
myquit()
***********
proc myquit()
...
quit
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507634
ffffffff____
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Eugene-- ffffffff____а крестики заблочены.. патамучто я так хочу.. думать умеют?твоя должность - программист. человек интелектуального труда. тот, кто облегчает людям жизнь. - это раз.
стандарты пользовательского интерфейса - они для того и сделаны, чтобы юзер всегда на интуитивном уровне знал куда тыкать. а ты обламываешь им всю интуицию (кстати с легкой руки чуваков из Visual FoxPro Team)


не ну я же не говорю, что я ПРАВ меняя стандарты.. но мне почему-то хочется чтобы все чуток думали, а не тупо "вот в школе сказали, что на крест и фсе!!!"
получается человек тупеет что ли???

рассказ такой как-то был Азимова.. тема = в будущем люди не учатся а ложатся на денек в клинику и им в голову вгонятю с пленок знания... класс.. только вот беда - прогресс ушел через пяток лет - знания устарели, а новые получить они не знают как....
название рассказа запамятовал...

quot --Eugene--][
а ты обламываешь им всю интуицию (кстати с легкой руки чуваков из Visual FoxPro Team)[/quot]

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

какие ивенты в фоксе могут быть если форма модальная ????
зачем лису мучаете ???
Вся проблема в том, что --Eugene-- на момент открытия окна логина делает основную форму невидимой (_SCREEN.Visible = .F.). Как следствие, любая модальность игнорируется и форма получается НЕ модальной.

По сути, --Eugene-- хочет использовать процедурный подход программирования в ситуации, когда процедурный подход заведомо не применим. Вот и мучается...
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507704
ffffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
Вся проблема в том, что --Eugene-- на момент открытия окна логина делает основную форму невидимой (_SCREEN.Visible = .F.). Как следствие, любая модальность игнорируется и форма получается НЕ модальной.


я делаю фсе на топ-левел формах.. и 1-я логин.. и никаких проблем... а он мучается.. зачем??? потому что ему основное окно фокса нравится? а мне вот не нравится...
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507722
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100зачем вообще там read even если засвечивается модальная форма????а затем, что если SCREEN=OFF, то у твой код не проканает. форма пролетит и все. поетому надо писать READ EVENTS, чтобы ее "завесить". короче, если главного окна нет, то модальность теряется, мать ее. alex11100зачем лису мучаете ???это я-то оказывается живодер ??? да ёбтеть, эта лиса мне уже по ночам снится, чтоб ее волки съели ! ! !


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

ВладимирМПо сути, --Eugene-- хочет использовать процедурный подход программирования в ситуации, когда процедурный подход заведомо не применим. Вот и мучается...а все почему? а потому, что вижуал фокс является генетическим мутантом досового фокса и виндовозных надстроек на него. нет, сами подумайте, это же не я придумал команду DO FORM
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507786
ffffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Eugene--
ffffffff____вот это не понял... ты хочешь сказать, что заблочить крестик можно тлько в фоксе что ли???нет. я хочу сказать, что из-за того, что фокс мягко говоря баговое средство разработки, многие софтины из-под него можно отличить на первый же взгляд. по их косячности и порой гратескной неинтуитивности интерфейса.

Это твое ИМХО надо сказать Отличить кстати можно исключительно из-за того, что ты работаешь в окне форкса и фсе...
Неинтуитивность - это что???? что это??? если на форме есть кнопка = ВЫХОД какая тут нужна интуитивность-то??? надо думать разве????
(см картинку кстати.. на чем писано?)

--Eugene--
ВладимирМПо сути, --Eugene-- хочет использовать процедурный подход программирования в ситуации, когда процедурный подход заведомо не применим. Вот и мучается...а все почему? а потому, что вижуал фокс является генетическим мутантом досового фокса и виндовозных надстроек на него. нет, сами подумайте, это же не я придумал команду DO FORM

Это не он мутант, это ты просто начал с досовского и не можешьпереучиться... я тоже долго не мог.. а Ду Форм чем плох-то?
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33507810
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой мне нравится

логики никакой
ни тебе многовалютности ни тебе нифига
а тут сидишь как остолоп

Код: 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.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
local lcOldAlias, lcDetailAlias, lcStroreBookAlias, lnTcu, lnAllSum, ltRepl, lnNumRecn, ;
      lnTcuOrder, lDateOrder, lnDirect, lnTraOrder, ;
      lnSum, lnSumShip, lnRound, lnRoundShip, lnOldDirect, lnOldSum, lnOldSumShip

lcOldAlias = select()
lcDetailAlias = thisform.oStoreBookDetail.Alias
lcStroreBookAlias = this.ocuraObj.Alias
* Валюта документа
lnTcuOrder = nvl(evaluate(lcStroreBookAlias+".tcu_id"), 0 )
* Курс валюты документа
lnTraOrder =  1 
* Дата документа
lDateOrder = nvl(evaluate(lcStroreBookAlias+".sbk_date"),{})
* Направление движения документа
lnDirect = nvl(evaluate(lcStroreBookAlias+".sbk_direct"), 0 )
lnAllSum =  0 
select (lcDetailAlias)
* Запоминаем где стоим
lnNumRecn = recno(lcDetailAlias)
scan    
    lnRound     = iif(type("tcu_round")=="N",tcu_round, 2 )
    lnRoundShip = iif(type("tcu_roundShip")=="N",tcu_roundShip, 2 )    
    lnQnt       = nvl(sbd_qnt, 0 )   && Количество
    lnPrice     = nvl(sbd_price, 0 ) && Цена прайса
    lnTcu       = evaluate(lcDetailAlias+".tcu_id")      && Валюта прайса
    lnOldSum    = evaluate(lcDetailAlias+".sbd_sum")     && сумма в валюте прайса
    lnOldSumShip= evaluate(lcDetailAlias+".sbd_sumShip") && сумма отгрузки
    
    * пересчитываем цену в валюту документа
    if  lnTcu#lnTcuOrder
        lnPriceOrder = oRate.GetSum(lDateOrder, lnTraOrder, lnTcu, lnTcuOrder, lnPrice)
        select (lcDetailAlias)
        lnPriceShip  = lnPriceOrder
    else
    	lnPriceOrder = lnPrice
    	lnPriceShip  = lnPrice
    endif
    if sbd_priceOrder#lnPriceOrder
    	replace sbd_priceOrder with lnPriceOrder in (lcDetailAlias)
    	ltRepl = .t.
    endif
    if empty(sbd_priceShip)
    	replace sbd_priceOrder with lnPriceShip in (lcDetailAlias)
    	ltRepl = .t.
    endif

    * Считаем суммы по строке
    lnSum     = round(lnPrice*lnQnt,lnRound)                   && сумма по строке в валюте прайса
    lnSumShip = round(nvl(sbd_priceShip, 0 )*lnQnt,lnRoundShip) && сумма по строке в валюте прайса
    * Реплейсим значения в таблице
    if lnSum#lnOldSum or lnSumShip#lnOldSumShip
    	replace sbd_sum     with lnSum      && Сумма в валюте прайса
    	replace sbd_sumShip with lnSumShip  && Сумма в валюте документа
    endif
    
    lnAllSum = lnAllSum + lnSumShip    && общая сумма
    
    * Смотрим значение направления в строке детализации
    lnOldDirect = nvl(evaluate(lcDetailAlias+".sbd_direct"), 0 )
    if lnDirect#lnOldDirect
       replace sbd_direct with lnDirect
       ltRepl = .t.
    endif
endscan
if lnAllSum#nvl(evaluate(lcStroreBookAlias+".sbk_sum"), 0 )
   replace sbk_sum with lnAllSum in (this.ocuraObj.Alias)
   ltRepl = .t.
endif
* Прыг на старое место
if lnNumRecn> 0 
   locate record lnNumRecn
endif
if ltRepl
   with thisform.pf_db.page_db_object.txt_db_sbk_sum
       .InteractiveChange()
       .Refresh()
   endwith
endif
if !empty(lcOldAlias)
   select (lcOldAlias)
endif


все пойду к руководителю проекта мозги промою
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33509169
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Aleksey!

> У меня как раз все наоборот. Как правило (за очень редким исключением),
> диалоговые формы не универсальные, и "ЗНАЮТ" (в том числе и через
> передаваемую ссылку), что за форма ее вызывает.

Ага, а потом появится форма с PageFrame или просто с 2-мя
контейнерами-гридами откуда нужно вызывать этот диалог... А он то к форме
привязан, её методы дёргает - вот и приплыли... Нет ну можно конечно
победить - нагородить кода в этих методах которые диалог вызывает,
определять а откуда ж он был вызван и т.п. Мне это не кажется удобным.

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

А я имел в виду, что у ParameterObject тоже вполне могут быть свои методы, а
также явно написал, что если уж надо, то в свойства ParameterObject можно
поместить ссылку и на ThisForm (получим всё то-же что и у тебя), и ссылку на
This или This.Parent (получим доступ к тому кто вызвал диалог - или его
контейнеру, вдруг вся логика там)... Так что не убедил - продолжаю читать
что у меня подход гибче и ширше - а твой он включает как "подвид" :)

> А в чем проблема использование PUBLIC переменных с "широко известными"
> всем объектам программы именами, на которые можно ссылаться из любого
> места приложения, в том числе и из FRX файлов, меню и пр.

Никаких проблем! Всё очень хорошо - пока не начинаешь их использовать не по
назначению - напимер для передачи/возврата параметров :)

> У меня в приложении всего два таких PUCLIC объекта

Ну примерно так-же, хотя вполне можно "спрятать" их внутрь системного
_SCREEN например... Т.е. сделать свойством - и тогда DISPLAY MEMORY покажет
кристальную чистоту проекта от всяких PUBLIC переменных хотя они
конечно есть.

> Опасность использования таких объектов не том, что они PUBLIC,а в
> бесконтрольном их создании.

Я бы сказал что в использовании - создавать то вполне можно где угодно и как
угодно - но вот использовать их при этом "правильно" практически невозможно.
Т.е. это вопрос парадигмы программирования - надо чётко понимать что это
такое и когда это приемлемо, а когда нет. Например передавать или принимать
параметры через Public/Private переменные я считаю неприемлемо - за
исключением "якобы передачи" их в SQLEXEC() или в тот-же отчёт - но тут вся
соль в том, что на самом деле это никакая не передача - просто и эта функция
и отчёт исполняются в контексте того кода который их вызвал - даже можно
объявить переменные LOCAL а они тем не менее замечательно будут доступны и
функции и отчёту...

2 --Eugene--

1) Не кипятись - везде есть свои тараканы, фокс не исключение.
2) Гораздо чаще проблемы возникают не из за того что среда кривая, а просто
из-за незнания :)
3) Если ты решил остановится на способе "без убиения формы" - т.е. чтобы
потом обращаться к ней (к её свойствам) по ссылке - то просто напиши в
QueryUnload две строчки как посоветовал Владимир - NODEFAULT предотвратит
уничтожение формы по нажатию "креста", а вторая строка "переведёт" нажатие
"креста" в нажатие твоей кнопки. И не слушай кошмарные советы по блокировке
этого самого "креста" - заблокированный крест при одновременном наличии
кнопки "Выход" - обычно признак того что программист просто не знает как
правильно обрабатывать его нажатия. А рассуждения про "глупых пользователей
привыкших к этому кресту" - скажем так сами по себе не очень умны...
Напоминает чем-то пьяного водителя, который пытается доказать что ПДД
придумали идиоты и для идиотов, а он слишком умный/крутой чтобы их соблюдать
:)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33509758
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ffffffffffffffffffНеинтуитивность - это что???? что это??? если на форме есть кнопка = ВЫХОД какая тут нужна интуитивность-то??? надо думать разве????Неинтуитивность - это как раз то, когда тыкаешь на крест, а он заблочен. и вроде ситуация обычная, а он заблочен. или когда пытаешься сдвинуть форму, а она не двигается. и вроде ситуация обычная, а она не двигается.. ffffffffffffffffff(см картинку кстати.. на чем писано?)а вот это интересно. колись, как нацепил скин. я бы тоже, наверное, попробовал ffffffffffffffffffты просто начал с досовского и не можешьпереучиться... я тоже долго не мог.. а Ду Форм чем плох-то?ду форм - это оператор, вызывающий форму. не увязывается он с ООП, хотя...

вобщем, вопрос решен.
пасиба, товарищи, ваша помощь порой неоценима
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33509994
ffffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--Eugene--
двигается.. ffffffffffffffffff(см картинку кстати.. на чем писано?)а вот это интересно. колись, как нацепил скин. я бы тоже, наверное, попробовал

запросто.. поищи Vfpskin2_En.zip в и-нете... и цепляй там все просто..
кстати, я блокирую крест вовсе не потому, что не знаю как обработать его.. а именно из-за этих скинофф..
приходится во имя красивости жертвовать чем-то
Дело в том, что в форме с нацепленным скином, при ее максимизации, минимизации, (закрытию по кресту - там нет проблем) скин себя несколько некрасиво ведет.. конечно код класса скина-то открытый.. по
1 комменты там написаны на Португальском
2 копать чужой код - увольте.. мне показалось вроще заблочить всю полоску стандартных кнопок в углу формы чем копать-копать-копать...
конечно я не прав.. но мне так показалось проще, а конечному пользователь так или иначе по сути все равно...
кнопку крест в конце концов я могу и разблочить, но при таком скине она и так незаметна посему....
Не серчайте на меня Игорь!!!
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33514809
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi ffffffffffffffffff!

К скинам я отношусь отрицательно - они очень мало где уместны (с WinAmp я
могу смириться, хотя "целится" в его UI элементы - это сущая мука, но если
вдруг Word или собственно среда разработки фокса такими попсовыми будут -
думаю это будет немеряно раздражать). Поэтому принять такую жертву ради
сомнительного удовольствия видеть "впуклые и выпуклые" формы я бы не смог.
Кроме того Closable = .F. отключает вполне стандартную реакцию окна на
Ctrl+F4 - если работаешь с клавиатуры, то надо иметь комбинацию для закрытия
окна - Ctrl+F4 стандартный вариант - для диалогов без большого ввода конечно
и Esc подходит, но если по ESC отменяется "полуввод" в текстбокс - то для
закрытия формы он уже не годится...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33515584
ffffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Hi ffffffffffffffffff!

К скинам я отношусь отрицательно - они очень мало где уместны (с WinAmp я
могу смириться, хотя "целится" в его UI элементы - это сущая мука, но если
вдруг Word или собственно среда разработки фокса такими попсовыми будут -
думаю это будет немеряно раздражать). Поэтому принять такую жертву ради
сомнительного удовольствия видеть "впуклые и выпуклые" формы я бы не смог.
Кроме того Closable = .F. отключает вполне стандартную реакцию окна на
Ctrl+F4 - если работаешь с клавиатуры, то надо иметь комбинацию для закрытия
окна - Ctrl+F4 стандартный вариант - для диалогов без большого ввода конечно
и Esc подходит, но если по ESC отменяется "полуввод" в текстбокс - то для
закрытия формы он уже не годится...

Posted via ActualForum NNTP Server 1.3


я с Вами согласен - но писал учет рекламному агенству - тамошний дизайнер сказал - надо скині - ибо красиво...
ну а потом я втянулся.. мне они не мешают.. с клавиатурі мі умеем работать - простіе юзері - сомневаюсь
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33517721
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi ffffffffffffffffff!

Хехе, если бы ты видел какие пассы вытворяют иногда пользователи с мышой :)
Я бы сказал что это с мышой многие работать не могут (попасть на кнопку даже
порой не могут, уж не говоря про DblClick), а с клавиатурой как-то попроще
(кроме комбинаций клавиш конечно). Хотя чем дальше, тем меньше таких бедолаг
остаётся, но всё ещё встречаются. А если вспомнить про несчастных
обладателей ноутбуков - ведь тачпад это просто песня какая-то :( Ведь это
жутко неудобная вещь - наверное лет пять надо только им и пользоваться чтоб
хоть как-то научится управлять...
Что касается скорости - так в "напряжённых" системах ввода просто невозможно
пользователю быстро работать одновременно и с клавиатуры и мышой - постоянно
дёргать руку между ними.
Т.е. мысль такая, что вообще-то любая хорошо написанная программа должна
обеспечивать работу и в случае "только с клавиатуры" - конечно исключения
есть - например графика (рисование) или игры (но кстати тоже далеко не
все)...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как вернуть значение из модальной формы ?
    #33518410
ffffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Hi ffffffffffffffffff!

Хехе, если бы ты видел какие пассы вытворяют иногда пользователи с мышой :)
Я бы сказал что это с мышой многие работать не могут (попасть на кнопку даже
порой не могут, уж не говоря про DblClick), а с клавиатурой как-то попроще
(кроме комбинаций клавиш конечно). Хотя чем дальше, тем меньше таких бедолаг
остаётся, но всё ещё встречаются. А если вспомнить про несчастных
обладателей ноутбуков - ведь тачпад это просто песня какая-то :( Ведь это
жутко неудобная вещь - наверное лет пять надо только им и пользоваться чтоб
хоть как-то научится управлять...
Что касается скорости - так в "напряжённых" системах ввода просто невозможно
пользователю быстро работать одновременно и с клавиатуры и мышой - постоянно
дёргать руку между ними.
Т.е. мысль такая, что вообще-то любая хорошо написанная программа должна
обеспечивать работу и в случае "только с клавиатуры" - конечно исключения
есть - например графика (рисование) или игры (но кстати тоже далеко не
все)...

Posted via ActualForum NNTP Server 1.3


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


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