|
|
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
Было сказано-пиши без макроподстановок. Как заменить DO FORM &lcName..scx на оператор без макроподстановки ? И то же со свойствами, например, формы: THISFORM.znach&lcNomer=1 ? Если так: with eval("THISFORM.znach"+lcNomer), то как продолжить .<что?>=1 endwith ? По поводу первого оператора глупый вопрос: лучше писать как написано, но с CONFIG.FPW, или DO FORM forms\&lcName..scx, но без CONFIG.FPW, точнее, строки PATH в нем ? Можно ли ждать конфузов в дальнейшем в том и другом случае ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 11:41 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Method oApp.runForm Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. если есть желание поговорить об ООП в фокспро, то продолжим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 12:21 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
Вы пропустили ключевую фразу "если это возможно". Далеко не всегда можно отказаться от макроподстановки. Но если есть альтернатива, то лучше их не использовать. Пример, приведенный Александром, макроподстановку все-таки использует. Только другим способом. Через выражение имени. Т.е. груглые скобки. Однако во многих случаях существует альтернатива макроподстановки. Только не в рамках отдельно взятой команды, а в рамках идеологии построения приложения. Возьмем первый пример: Код: plaintext Ключевой вопрос: как именно Вы сформировали значение переменной lcName? Откуда оно взялось? Ну, вероятно, у Вас был некий код вида Код: plaintext 1. 2. 3. 4. 5. Тогда возникает вопрос: а зачем Вы записали имя формы в переменную? Почему нельзя было написать сразу: Код: plaintext 1. 2. 3. 4. 5. Ну, или передать некий идентификатор формы, который потом "расшифровать" через тот же IF или CASE. Если же Вы пишите некий класс обертку для вызова форм, то можно использовать то, что привел Александр. Выражение имени Код: plaintext Пути доступа в самой команде лучше не использовать. Лучше делать настройку путей доступа в файле конфигурации или напрямую через команду SET PATH. Проблема здесь в том, где именно, в каком порядке, ищет файл FoxPro. 1. Внутри скомпилированного файла EXE 2. Если не нашли, то по пути, явно указанному в команде 3. Если не нашли, то в текущей директории 4. Если не нашли, то по путям, указанным в SET PATH Т.е., если файл включен внутрь EXE, то без разницы, указан у него путь доступа или нет. Все равно в первую очередь будет осуществляться поиск внутри файла EXE. А вот если файл не включен внутрь EXE, то возможен конфликт, если у клиента есть папка с тем же путем доступа. AMorkovkaИ то же со свойствами, например, формы: THISFORM.znach&lcNomer=1 ? Если возникает необходимость обращаться к свойствам по номерам, то создают свойство типа массив. Признаком того, что свойство является массивом является указание размерности такого свойства. Например: Код: plaintext Работать с таким свойством можно как с обычным массивом. Также можно изменять его размерность Код: plaintext 1. 2. Проблема при использовании макроподстановки заключается в ее не очевидности. Трудно понять что же происходит. Трудно как писать (отлаживать), так и модифицировать код с использованием макроподстановок. Т.е. проблема макроподстановок не в использованнии в коде, а в сложности написания и сопровождения такого кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 13:10 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
К ВладимирМ. Да, у меня обертки, и первое решение по первому оператору хорошо. По второму у меня, например, в цикле: FOR EACH cntrl IN thisform.Controls lcName=SUBSTR(cntrl.Name,4) thisform.frm_parent.m_&lcName=... endfor, не массив. Ну и подобные диспозиции. Наверное, без макро не обойтись. Спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:10 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
деточка, не слушай дядю. дядя - враг. если захочешь - я тебе покажу принципы постр-я классов и приложений, взаимосвязи классов, объясню правила операций над классами. не пиши ду форм. вначале прочитай и проанализируй, если начнут возникать вопросы - задавай - обсудим автор Цель серии статей, посвященных Visual Foxpro 9 ... обучить разработчиков оптимальным и прогрессивным способам и приемам программирования в среде разработки Visual Foxpro 9.0. Цель данной статьи объяснить некотором образом причины и необходимость использования новейшей версии Visual Foxpro, причины стремления к изменению способов и приемов разработки .... и использования новых инструментов, созданных с применением объектно-ориентированного программирования на Visual FoxPro. автор Visual FoxPro поддерживает как стандартное процедурное программирование, так и мощное и гибкое объектно-ориентированное программирование. Объектно-ориентированный разработка и объектно-ориентированное программирование являются более современными и прогрессивными по сравнению со стандартным процедурным программированием. Вместо того, чтобы думать о программе как о процессе последовательного выполнения строк кода, теперь надо думать о создании объектов. В Visual FoxPro можно создавать объекты и манипулировать ими как самостоятельными компонентами. К преимуществам ООП можно отнести большую надежность кода, более легкое понимание разработчиками процессов, более простое сопровождение визуальных классов ( поиск ошибок и доработка). В результате этого: - повышается производительность труда программистов и снижаются трудозатраты; - повышается надежность программ. ООП в Visual FoxPro предусматривает создание библиотек визуальных классов, на основании которой ведется разработка клиентской части ПО. Все участники процесса разработки ПО мыслят одними категориями. Термины класс и объект лежат в основе всех этапов. Трансляция понятий не нужна, потери отсутствуют. автор Объект (object)- это конкретная реализация, экземпляр класса. В программировании отношения объекта и класса можно сравнить с описанием переменной, где сама переменная(объект) является экземпляром какого-либо типа данных(класса). Обычно, если объекты соответствуют конкретным сущностям реального мира, то классы являются некими абстракциями, выступающими в роли понятий. Понятие класса и что он в себя включает мы рассмотрим отдельно. А на данном этапе воспринимайте класс как шаблон объекта. Для формирования какого-либо реального объекта необходимо иметь шаблон, на основании которого и строится создаваемый объект. При рассмотрении основ ООП мы часто смешиваем понятие объекта и класса. Дело в том, что класс - это некоторое абстрактное понятие. Для проведения аналогий или приведения примеров оно не очень подходит. На много проще приводить примеры, основываясь на объектах из реального мира, а не на абстрактных понятиях. Поэтому, говоря, к примеру, про наследование мы прежде всего имеем ввиду наследование классов(шаблонов), а не объектов, хотя часто и применяем слово объект. Скажем так: объект - это физическая реализация класса(шаблона). ну и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:14 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
2 AMorkovka макроподстановка - зло и не в макроподстановке дело проблема у Вас в том, что Вы не понимаете, что такое объект, как на него сослаться необходимо вначале понять правила создания классов, наследования классов, создания объектов, правила объединнения каких-то сущностей, правила ограничения и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:20 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
прошелмимомакроподстановка - зло и не в макроподстановке дело Эх, какая непоследовательность в действиях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:29 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
AMorkovkaПо второму у меня, например, в цикле: Код: plaintext 1. 2. 3. не массив. Ну и подобные диспозиции. Наверное, без макро не обойтись. Спасибо за ответы. Я же говорю, часто макроподстановка - это следствия идеологии построения приложения. Исправление "кривизны" идеологии, за счет программных "наворотов". Если свойство это не массив (что как раз и закладывается в идеологии), то без макроподстановки не обойтись. Другое дело, как эту макроподстановку написать (оформить). Символ "&" уж слишком не заметен. Его легко пропустить. Поэтому, лучше использовать выражения имени или Evaluate(). В данном случае можно так: Код: plaintext 1. 2. 3. 4. Результат тот же, но код значительно "читабельнее". Да и промежуточную переменную lcName можно убрать. Написать SubStr() прямо в выражении имени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:31 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
отдай - убьются биндить события ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:34 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
К прошелмимо. Пожалуй, перепишу как Вы советуете в первом отклике. Вот у меня есть иерархия классов форм в файле vcx. Их я делал по известной последовательности в дизайнере форм: Tools+Options+Forms+Form(шаблон). Теперь в дизайнере же создаю реальную форму на основании такой иерархии и присваиваю ей имя Rabota.scx. Затем работаю с ней по DO FORM. Ежели бы не создавать файл Rabota.scx, а пробовать СreateObject, то как быстро добавить в нужные точки формы нужные контролы с функционалом? Или же у Вас создается еще один уровень иерархии, который окончательно формирует нужный нам интерфейс и функционал, тождественный Rabota.scx? Так сказать окончетельное решение, которое можно использовать только для конкретного случая, и больше, увы, нигде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:34 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
авторЭх, какая непоследовательность в действиях все последовательно с 94-го автор то как быстро добавить в нужные точки формы нужные контролы с функционалом? много слов - я не понял особо конечно правильно пронаследовать и наделить доп-мы св-ми и добавить доп-е объекты Вы можете не создавать scx если у Вас сложная стр-ра ПО - формы в нескольких апп, то у Вас будут проблемы с запуском этих форм из различн-х апп с классами наиболее правильно и просто строится арх-ра, нет проблем с подъемом объектов, правильное созд-е классов-шаблонов позволяет просто и логично масштабировать прилож-я ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:40 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
К ВладимирМ. Ну надо же, спасибо и за второе решение. Оно же и первое, не додумал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:41 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
авторИли же у Вас создается еще один уровень иерархии, который окончательно формирует нужный нам интерфейс да, вот дочитал да осуществляется наследование и у наследника добавляюся какие-то св-ва и объекты при этом осуществляется объединение в различные группы по каким-то существенным признакам при этом постоянно анализируется то и куда в родителя или наследника, производится постоянный анализ существенных и несущ-х признаков и различий кто и кому что должен сообщить, кто и о чем должен ведать ... и т.д. ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:44 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
авторТак сказать окончетельное решение, которое можно использовать только для конкретного случая, и больше, увы, нигде. Вы ошибаетесь была форма счет-фактура с 1.01 что-то изм-ся... наследуем, добавляем изм-ем у наследника ... получаем возм-ть в ПО иметь и старую форму и новую ... с минимальными затратами при этом максимально понимаем, что если у старой формы что-то изменить, то испр-я автом-ки пронаследуются у наследника, что можем каим-то образом не допустить (все в наших руках) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:49 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
AMorkovkaК прошелмимо. Пожалуй, перепишу как Вы советуете в первом отклике. Вот у меня есть иерархия классов форм в файле vcx. Их я делал по известной последовательности в дизайнере форм: Tools+Options+Forms+Form(шаблон). Теперь в дизайнере же создаю реальную форму на основании такой иерархии и присваиваю ей имя Rabota.scx. Затем работаю с ней по DO FORM. Ежели бы не создавать файл Rabota.scx, а пробовать СreateObject, то как быстро добавить в нужные точки формы нужные контролы с функционалом? Или же у Вас создается еще один уровень иерархии, который окончательно формирует нужный нам интерфейс и функционал, тождественный Rabota.scx? Так сказать окончетельное решение, которое можно использовать только для конкретного случая, и больше, увы, нигде. Поскольку от Александра добиться внятного ответа сложно, то опишу общую логику действий в таких случаях. 1) Да. Вы вынуждены будете создать еще один уровень иерархии. Именно что "окончательное решение, которое можно использовать только для конкретного случая, и больше, увы, нигде" 2) Вы вынуждены будете озаботиться программной привязкой данных к объектам этого "окончательного решения". По самой своей сути, класс (VCX) не допускает привязку объектов к данным. Точнее, физически это сделать можно, но тогда это уже не вполне класс, поскольку он теряет "универсальность". Впрочем, если это "окончательное решение", то это уже не принципиально. 3) Изменяется сама технология работы. Т.е. придется много чего и много где "подмазать и подклеить". Например, чтобы вернуть значение из модальной формы надо будет по особому оформить вызов такой формы. PS: Если Вы собираетесь перписать приложение без SCX, то, может быть, имеет смысл и свойства формы оформить как массивы? Эта переделка будет сущей мелочью, по сравнению с переписыванием все на VCX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:52 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
от ВладимирМ можно добиться только процедурное программирование. если Вы желаете развиваться и разрабатывать масштабные приложения, с минимальными трудозатратами сопровождать свои разработки, то Вы должны обратить внимание на возможности ООП в фокспро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 14:57 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
авторПо самой своей сути, класс (VCX) не допускает привязку объектов к данным это почему это ? из личных убеждений? Вы не понимаете, что такое абстракция и не желаете понять - в этом проблема. И для чего это нужно Вы не желаете понимать. можно написать Код: plaintext 1. а можно Код: plaintext 1. 2. такая вот ерунда ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 15:02 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
прошелмимоот ВладимирМ можно добиться только процедурное программирование. если Вы желаете развиваться и разрабатывать масштабные приложения, с минимальными трудозатратами сопровождать свои разработки, то Вы должны обратить внимание на возможности ООП в фокспро. Александр, Вы, как обычно, не последовательны и не логичны. 1. Где Вы видите противоречие использования SCX как "окончательного решения" иерархии VCX и "возможностей ООП в фокспро"? 2. Где Вы видите противоречия в том, что я описал в данной теме с Вашими словами? Ну, или хотя бы возражения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 15:08 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
К счастью, проект еще не на той стадии, когда было бы трудно его подработать. Спасибо за ответы. Рассмотрел в указанном направлении очертания новых многообещающих горизонтов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 15:12 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
нет возражений - не путайся под ногами дай возможность людей обратить в свою "веру" - меньше шишек набьют и выжмут все прогрессивное, что есть в лисе а не будут с дуформ топтаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 15:16 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
прошелмимо авторПо самой своей сути, класс (VCX) не допускает привязку объектов к данным это почему это ? из личных убеждений? Вы не понимаете, что такое абстракция и не желаете понять - в этом проблема. И для чего это нужно Вы не желаете понимать. можно написать Код: plaintext 1. а можно Код: plaintext 1. 2. такая вот ерунда ... Ну, хоть что-то... Предположим, я разрабатываю форму, которая должна работать с таблицей MyTable. Разумеется, я буду делать форму на основе класса. Но что следует оставить на уровне класса, а что вынести в собственно форму? Здесь под термином "форма" я понимаю "окончательное решение". То, что уже не будет пораждать наследников. Не важно, как это физически оформлено, как VCX или как SCX. Следует ли переносить в класс привязку к данным? Нет! Поскольку в этом случае я не смогу использовать этот класс для работы с другой таблицей источником. Т.е. чтобы создать другую "форму". Надо будет как-то заменять одну таблицу-источник на другую. Какой смысл тогда в классе? Значит, привязка к данным должна осуществляться только в самом конце. Перед собственно отображением формы. В этом самом "окончательном решении". Разумеется, есть ситуации, когда класс-наследник использует те же таблицы, что и класс-родитель. Но, это очень особенные ситуации. Это скорее исключение, чем правило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 15:16 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
класс колонок покажи народу на фоксклабе - убьются шаманить на пустом месте ... шаманы шаманистские ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 15:17 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
прошелмимонет возражений - не путайся под ногами дай возможность людей обратить в свою "веру" - меньше шишек набьют и выжмут все прогрессивное, что есть в лисе а не будут с дуформ топтаться Аргументы и доказательства будут? Или по прежнему один треп, хамство и безапеляционные заявления? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 15:18 |
|
||
|
Отказ от макроподстановок
|
|||
|---|---|---|---|
|
#18+
у класса может сущ-ть астракция на источник и вот свойства этой абстракции возможно изм-ть у этого наследника .., что позволяет упростить разр-ку и сопровождение самый простой пример абстракции, который я приводил Код: plaintext 1. а у класса уже есть интерфейс и методы, который по опред-му (заранее созданному) (стандартному) и редко изменяемому алгоритму, что-то делает ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2007, 15:22 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34860277&tid=1588665]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 191ms |
| total: | 355ms |

| 0 / 0 |
