powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос, который не дает мне покоя!
16 сообщений из 16, страница 1 из 1
Вопрос, который не дает мне покоя!
    #33401534
nova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем участникам форума!
И все-таки что лучше использовать, создать форму дизайнером, накрутить все что мне надо, сохранить ее как класс и уже подобные формы в программе на лету создавать на базе этой дргугие формы, или создавать каждый раз новые формы включать их в проект и обращаться к ним через оператор DO.
В первом случае, проявляется вся сила и мощь объектно-ориентированного программирования. Во втором, как-то более привычное и понятное использование, но тогда проект будет расти как снежный ком. Вот где та золотая середина, на чем остновиться?.
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33401595
Varread()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ya dumayu chto class mojno ispolzovat na konkretnix situatsiyax .Napirimer Report-e kotoriy ti sozdaesh class-form dlya prosmotra svoix report.A druqom situatsii ya rekomendoval sozdat new form.
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33401796
Aries
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я всегда создаю классы. Формы вообще не использую.
Хорошо это или плохо - незнаю.
Но мне удобно

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

Как ты раньше создавала новый файл, для новой формы, так и будешь создавать. Но теперь уже новый класс для новой формы. Ну, разве что они будут включены в общую библиотеку классов. Т.е. физически, будет меньше файлов на диске, но объектов проекта меньше не станет.

Насчет "всей мощи ООП"... Хм... Вот лозунгами нас уже не проймешь Форма, ведь это тоже своеобразный класс. Т.е. он может быть создан на базе другого класса и "вся мощь ООП" никуда не девается. Только форма, это все-таки своеобразный класс. Такой, от которого не может быть создан класс наследник. Вот только в этом смысле он и ограничивает "всю мощь ООП".

Ну, и насколько часто в Вашей программе возникала задача сделать класс-наследник от существующей формы? И неужели так трудно было переделать существующую форму в класс (Save As Class, затем создать новую форму на базе этого класса и довесить DataEnvironment. После чего удалить старую форму)

Собственно, это и есть единственное принципиальное отличие формы от класса. А в остальном, по большому счету, разницы никакой.
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33402002
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nova... Вот где та золотая середина, на чем остновиться?.
Для меня это вопрос привычки или религии... Обычно создаю базовый класс для всех будущих форм (с общими свойствами и методами) и затем на его основе делаю остальный формы, но не как классы, а как формы... На мой взгляд так проще, но сколько людей - столько и мнений...

Хотя идея все создавать на лету тоже мне нравится
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33402438
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может тогда кто-нибудь мне ответит из поклонников запуска формы не через DO FORM ..., а через MyForm = NEWOBJECT(), как вернуть из модальной формы значение, возвращаемое в событии UnLoad?
Для формы я делаю так:
DO FORM MyModalForm WITH ..., ... TO m.llResponse
IF m.llResponse
...
...
ENDIF
Как мне аналогичную задачу решить при создании экземпляра модальной формы из класса ? Если в классе формы я в событии UnLoad пишу RETURN MyRetFlag, то куда это попадает при запуске этой класса формы через NEWOBJECT ?

С уважением, Алексей
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33402455
Код: plaintext
1.
2.
myForm = newobject("myClassForm")
lnResult = myForm.Show( 1 )
?lnResult
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33402460
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Маликов
Код: plaintext
1.
2.
myForm = newobject("myClassForm")
lnResult = myForm.Show( 1 )
?lnResult

А это точно? В документации не нашел ничего об этом способе.
С уважением, Алексей
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33402465
Aleksey-KА это точно? В документации не нашел ничего об этом способе.
С уважением, Алексей
проверь эмпирическим путем ;)
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33402469
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Маликовпроверь эмпирическим путем ;)
Так проверил, все ОК, но не понятно почему нет в документации ?!
С уважением, Алексей
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33404681
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Aleksey-K!

1) При создании экземпляра передать туда ссылку на объект (так называемый
шаблон Parameter Object) - т.к. объект всегда передаётся по ссылке, то в
Init формы мы запоминаем его в свойство формы, и когда надо меняем его.
Заодно решается и другая проблема - как вернуть из формы >1 значения (и даже
более сложное - как вернуть ПРОИЗВОЛЬНОЕ число значений).
2) Вариант от Mike Korneev - переаём по ссылке переменную при
CreateObject() - а в Init самой формы вызываем This.Show(1) - соответственно
при скрытии/закрытии формы мы возвращаемся в тот-же Init, там можем поменять
переменную (параметр полученный по ссылки - и даже не один!) и
соответственно в точке вызова получим это значение. Извини, примера под
рукой нету, но найти это точно можно в Google Groups, и скорее всего в
форумах тут и на foxclub тоже дублировалась эта идея. Конечно она не очень
"правильна" с точки зрения ООП - мы явно меняем порядок следования событий,
но вполне работоспособна.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33404682
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Владимир!

> Собственно, это и есть единственное принципиальное отличие формы от
> класса. А в остальном, по большому счету, разницы никакой.

Не совсем так. Всё-же scx форма это и "не совсем" класс. Например если в
базовом классе формы описать Protected объект - то из vcx "наследника" мы
сможем "достучаться" к этому объекту (по правилу Protected), а из scx-формы
уже нет.
Также имеет место некоторое отличие в порядке загрузки (инстанциации)
собственно экземпляра объекта в память - об этом можно почитать на
fox.wikis.com - например порядок считывания значений переопределённых
свойств из vcx и из scx (последние считываются заметно позднее первых) может
вызывать нехорошие побочные эффекты.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33405556
Edbo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал рекомендованный способ
и получаю в результате всегда .T. ?

CLOSE ALL
CLEAR ALL

o=createOBJECT([f])
?[ret=],o.show(1)

DEFINE CLASS f as Form
WindowType= 1
FUNCTION unload
RETURN 55
ENDFUNC
ENDDEFINE
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33407265
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Edbo!

Так и должно быть - не возвращается ничего из Unload - возвращается из Show
(если там конечно есть код - ну а если нету, то по умолчанию .T. и
возвращается).

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33408053
Edbo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня получается, что show отрабатывает в начале и возвращает то, что было практически в момент инициализации, как все таки что то вычислить и вернуть, приведите пример пожалуйста, а то любопытство разбирает.

Код: 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.
clea
CLOSE ALL
CLEAR ALL

oo=createOBJECT([ff])
?[ret=],oo.show( 1 )

DEFINE CLASS ff AS form

	WindowType =  1 
	wrez =  1234 

	ADD OBJECT command1 AS commandbutton WITH ;
		Top =  192 , ;
		Left =  264 , ;
		Height =  27 , ;
		Width =  84 , ;
		Caption = "Command1", ;
		Name = "Command1"

	ADD OBJECT text1 AS textbox WITH ;
		Height =  23 , ;
		Left =  60 , ;
		Top =  108 , ;
		Width =  100 , ;
		Name = "Text1"

	PROCEDURE show
    LPARAMETERS nStyle
    DODEFAULT()
    WAIT WINDOW [show]
		RETURN thisform.wrez
	ENDPROC

	PROCEDURE unload
     WAIT WINDOW [unload]
	ENDPROC

	PROCEDURE command1.Click
		thisform.wrez=thisform.text1.Value
		thisform.release
	ENDPROC


ENDDEFINE
...
Рейтинг: 0 / 0
Вопрос, который не дает мне покоя!
    #33409940
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Edbo!

Читай выше - там же всё написано.
И не надо зацикливаться на том что именно Show(1) должно чего-то там
вернуть - вот тебе ещё вариант:
В QueryUnload пишем NODEFAULT + This.Hide() - также по коду все Release()
заменяем на Hide() - соответственно после "закрытия" формы она всё ещё в
памяти и ссылка на неё действует - через oo.SomeProperty или oo.Text1.Value
можно оттуда получить всё что надо - ну а потом конечно сделать oo.Release()

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос, который не дает мне покоя!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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