PRG классы в SCX/VCX пожелание | |
---|---|
Андрей Давыдов Сообщений: 1411 Дата регистрации: 08.02.2003 |
ERROR 1965 One of the members of this class is based on a nonvisual class. Cannot write .VCX file. Так же не работает:
и спокойно вставлять в формы / классы без потери функциональности и без эффекта переопределения свойств (выставленных в PRG) при вставке контролв в scx/vcx в конструкторе (описано несколькими топиками ниже, посмотрите на свойство Visible в окне свойств для кнопки) Мой пост адресован прежде всего к Aleksey Tsingauz (боюсь исковеркать фамилию на русском) Хотя ваш профиль в fox team, если не ошибаюсь, не связан с контролами. Пожелание: Дать разработчикам возможность писать визуальные классы в PRG и вставлять их в Scx/Vcx в конструкторе, хотя такая (недокументированная) возможность есть и сейчас, но есть при этом неприятный эффект описанный выше, который (эффект) лечится имменно субклассированием PRG классов в Vcx, а только затем их использование в формах/классах. В идеале - возможность визуального редактирования PRG классов. И инструкции типа DEFINE FORM ... Пожелание минимум: Понимаю что в этой (vfp9) версии - реализоновно не будет. Хотя бы не убирайте в релизе VFP9 возможность сохранения (пусть и извращенным способом) и функциональность PRG классов в VCX, которая (возможность) есть vfp9public beta (09.00.0000.1720) ------------------ |
Re: PRG классы в SCX/VCX пожелание | |
---|---|
Aleksey Tsingauz [MSFT] |
Здравствуйте, Андрей!
Цитата:Фамилия моя на русском пишется Цингауз и произносится с ударением на 'а'. А по поводу профиля вы не ошиблись, в основном я занимаюсь вещами, которые не связаны с UI напрямую. Но бывают и исключения. Цитата:Не очень понял, что это за "эффект переопределения свойств", о котором вы говорите? А вот заключение о том, что полученный класс можно спокойно вставлять в формы / классы без потери функциональности, немного преждевременно. SaveAsClass недаром возвращает ошибку, VCX не поддерживает базовые классы из PRG. Класс, который вы сохранили только кажется в порядке, на самом деле VCX содержит только имя класса (CMD), а имя библиотеки, в данном случае PRG, пусто. Когда придет время создать объект, VFP не будет знать где определен класс. Простой тест в 09.00.0000.1720: 1) Сохраняем кнопку через File/Save As Class. 2) Создаем новую форму и добавляем новоиспеченную кнопку. 3) Сохраняем и запускаем новую форму - работает. 4) Закрываем VFP. 5) Запускаем VFP. 6) Запускаем новую форму - не работает, класс CMD не найден. 7) SET PROCEDURE TO MyPrgClass 8) Запускаем новую форму - не работает, класс CMD не найден. 9) dummy=createobject("CMD") 10) Запускаем новую форму - работает. Дальше - хуже, таким образом можно подстелить любой другой суб-класс CommandButton с именем CMD. Какой класс будет первым найден в памяти, тот и будет испрользован. Это больше похоже на хождение по минному полю, не знаешь когда и где рванет. А теперь еще хуже или лучше, в зависимости как посмотреть, в 09.00.0000.1913 никак не работает. Ни SET PROCEDURE TO, ни createobject("CMD") не помогают. Как не крути, а класс не найден. Я считаю, что, с точки зрения языка, это лучше. Потому что язык программирования не должен позволять подмену базового класса, а какой класс правильный неизвестно. Цитата: Очень хорошее пожелание и оно имеет больше шансов быть принято, если исходит непосредстаенно от пользователей. Так что, пожалуйста, найдите время и пошлите его на VFPFEED. Цитата: Сохранение-то пока работает, но, как я уже сказал, дальше уже не работает. Да и в VFP8 не работало, форма наглухо виснет если класс не загружен в память. Aleksey Tsingauz Visual FoxPro Dev Team |
Re: PRG классы в SCX/VCX пожелание | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Я так понял что убрали старую баго-фичу когда можно было "якобы
субклассировать" базовый класс? Ну т.е. Имеем prg c описанием такого хитрого класса:
снять его можно так:
Пожалуйста проверьте не эту ли полезную (не возражаю против того чтб её называть опасной и малопонятной новичку возможность убрали Ибо без этого жизнь станет значительно тяжелее - субклассировать DE так чтобы иметь только 1 свой базовый класс, и чтоб все имеющиеся в формы свои DE наследовали от него - IMHO невозможно. Описывать все возможные DE как отдельные классы (с курсорами и реляциями), а потом их уже прицеплять в формам через DEClass и DEClassLibrary крайне утомительно (да и удвоение числа классов несёт мало приятного) - а для отчётов там и вовсе невозможно Конечно если бы можно было как-то BINDEVENTS() на это событие - но оно то раньше всех других для форм отрабатывает (ну из тех что можно сукбклассировать - т.е. событий самой формы) и негде делать привязку ------------------ WBR, Igor |
Re: PRG классы в SCX/VCX пожелание | |
---|---|
Aleksey Tsingauz [MSFT] |
Здравствуйте, Игорь!
Цитата: Это не что иное как часный случай одного и того же бага, пофиксили. Этот hook тоже где-то в документации упомянут? Aleksey Tsingauz Visual FoxPro Dev Team |
Re: PRG классы в SCX/VCX пожелание | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Цитата:Очень жаль Даже не представляю как же теперь это переписать Ручками то делать для каждой формы и отчёта совершенно не хочется Цитата:Нет. ------------------ WBR, Igor |
Re: PRG классы в SCX/VCX пожелание | |
---|---|
Aleksey Tsingauz [MSFT] |
Цитата: Игорь, что конкретно вы хотите сделать? Какая конечная цель, перехватить BeforeOpenTables или что-то еще? |
Re: PRG классы в SCX/VCX пожелание | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Цитата:Да, именно его родимого и перехватить. Дабы установить мои SET-ы для PDS и поменять пути к табличкам/базам - как в принципе и рекомендует MSKB статья "How to generically assign path in dataenvironment", только сделать это без утомительного прописывания чего-либо в DE форм и отчётов. Даже смена AutoOpenTables (с последующим переносом нужного кода в Load формы) может утомить, если форм за сотню ------------------ WBR, Igor |
Re: PRG классы в SCX/VCX пожелание | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Кстати вот ещё какая идея возникла. Если в фоксе была недокументированная
возможность "субклассировать" базовый класс - т.е. создать свой класс-хук, который "втёрся" бы перед любым другим определением класса (т.е. стал родительским для тех классов, которые были производными от базовых VFP классов), то возможно стоит это упорядочить и сделать штатной фишкой? Ну например командой SET BASECLASSLIB TO MyBase.VCX/MyBase.prg (а там по одному классу на те базовые что нужно субклассировать) ну и соответственно RELEASE BASECLASSLIB или SET BASECLASSLIB TO без параметра. Я понимаю что применимость (т.е. реальная полезность) этого будет ограниченной, но уверен что она всё-же будет (полезность), и наверняка не меньшая чем от того-же BINDEVENTS() - иного средства реализации (реально - замещения ибо они вскоре перестали работать ) хуков. ------------------ WBR, Igor |
Re: PRG классы в SCX/VCX пожелание | |
---|---|
Aleksey Tsingauz [MSFT] |
Здравствуйте, Игорь!
Цитата: Базовый класс определяется в момент определения суб-класса. Разработчик класса, а не пользователь класса должен быть здесь главный. Так что лично я считаю, что возможности подмены базового класса быть не должно ни в каком виде. А вот разрешить использования своих cуб-классов везде и всюду было бы действительно хорошо. Aleksey Tsingauz Visual FoxPro Dev Team |
Re: PRG классы в SCX/VCX пожелание | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Возможно что вы и правы... Только не в таком убогом виде как сделаны DEClass
сейчас... Кстати саму идею хуков это то не отменяет. Тот-же BINDEVENTS() это вмешательство "извне" - разработчик класса то не предполагал что кто-то там станет вмешиваться в работу его методов. Так что возможно всё-же стоит и такой трюк "натурализовать" в фоксе ------------------ WBR, Igor |
Re: PRG классы в SCX/VCX пожелание | |
---|---|
Mitchman Автор Сообщений: 9978 Откуда: Николаев Дата регистрации: 24.05.2002 |
Присоединяюсь к просьбе функции для подмены базового класса - нужная штучка - все равно поддерживается, но извините через задний проход.
Однажды даже сам делал. |
© 2000-2024 Fox Club  |