Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос, который не дает мне покоя! / 16 сообщений из 16, страница 1 из 1
26.11.2005, 13:52
    #33401534
nova
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, который не дает мне покоя!
Добрый день всем участникам форума!
И все-таки что лучше использовать, создать форму дизайнером, накрутить все что мне надо, сохранить ее как класс и уже подобные формы в программе на лету создавать на базе этой дргугие формы, или создавать каждый раз новые формы включать их в проект и обращаться к ним через оператор DO.
В первом случае, проявляется вся сила и мощь объектно-ориентированного программирования. Во втором, как-то более привычное и понятное использование, но тогда проект будет расти как снежный ком. Вот где та золотая середина, на чем остновиться?.
...
Рейтинг: 0 / 0
26.11.2005, 15:42
    #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
26.11.2005, 22:17
    #33401796
Aries
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, который не дает мне покоя!
Я всегда создаю классы. Формы вообще не использую.
Хорошо это или плохо - незнаю.
Но мне удобно

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

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

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

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

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

Хотя идея все создавать на лету тоже мне нравится
...
Рейтинг: 0 / 0
28.11.2005, 08:18
    #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
28.11.2005, 08:39
    #33402455
Вопрос, который не дает мне покоя!
Код: plaintext
1.
2.
myForm = newobject("myClassForm")
lnResult = myForm.Show( 1 )
?lnResult
...
Рейтинг: 0 / 0
28.11.2005, 08:45
    #33402460
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, который не дает мне покоя!
Дмитрий Маликов
Код: plaintext
1.
2.
myForm = newobject("myClassForm")
lnResult = myForm.Show( 1 )
?lnResult

А это точно? В документации не нашел ничего об этом способе.
С уважением, Алексей
...
Рейтинг: 0 / 0
28.11.2005, 08:50
    #33402465
Вопрос, который не дает мне покоя!
Aleksey-KА это точно? В документации не нашел ничего об этом способе.
С уважением, Алексей
проверь эмпирическим путем ;)
...
Рейтинг: 0 / 0
28.11.2005, 08:53
    #33402469
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, который не дает мне покоя!
Дмитрий Маликовпроверь эмпирическим путем ;)
Так проверил, все ОК, но не понятно почему нет в документации ?!
С уважением, Алексей
...
Рейтинг: 0 / 0
29.11.2005, 01:14
    #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
29.11.2005, 01:15
    #33404682
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, который не дает мне покоя!
Hi Владимир!

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

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

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
29.11.2005, 12:45
    #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
30.11.2005, 03:10
    #33407265
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, который не дает мне покоя!
Hi Edbo!

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

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
30.11.2005, 12:15
    #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
01.12.2005, 01:19
    #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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос, который не дает мне покоя! / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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