Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Вниз

Шаблоны или что-то в этом духе   Найти похожие ветки 

 
Walrus   (2003-12-02 21:59) [0]

Возникла тут у нас в системе проблема: есть класс А, там содержится поле field_a, прочая инфа и некоторые методы для работы. Надо при старте приложения создать несколько объектов класса А, заполнить им поле field_a и (!!!) дать потом возможность выбирать объект из числа созданных, создавать свой с тем же значением field_a, но там уже заполнять иначе остальные все поля. Т.е. на основе класса А создать несколько "шаблонов", на основании которых потом создавать полноценные объекты. Что есть в Делфи для реализации такой штуки( шаблонов )?


 
Stilgar   (2003-12-02 22:08) [1]

Если я правильно понял, нужно переопределить метод Assign и потом в "полноценных объектах" его вызывать.


 
Zacho   (2003-12-02 22:24) [2]


> Walrus (02.12.03 21:59)

Не понимаю, в чем именно проблема. И что значит "выбирать объект " ? И чем "полноценные объекты" отличаются от неполноценных ?
В общем, RTFM любой учебник по Object Pascal


 
Zacho   (2003-12-02 22:25) [3]


> Walrus (02.12.03 21:59)

Не понимаю, в чем именно проблема. И что значит "выбирать объект " ? И чем "полноценные объекты" отличаются от неполноценных ?
В общем, RTFM любой учебник по Object Pascal


 
Walrus   (2003-12-02 22:35) [4]

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


 
Walrus   (2003-12-02 22:40) [5]

Stilgar, а какому классу принадлежит этот метод? ( sorry, что ламерский вопрос :) )


 
Юрий Зотов   (2003-12-02 23:01) [6]

> Walrus

Не спешите бросаться на Assign. Сформулируйте вопрос, так, чтобы он был понятен - тогда и путь решения найдется. Например, вот Вы говорите "шаблон" - а что вы под ним подразумеваете? Как и когда эти шаблоны создаются? Где и в каком виде хранятся (и хранятся ли вообще)? Как конкретно пользователь выбирает себе тарифный план? И т.д.


 
Walrus   (2003-12-02 23:12) [7]

Да, в том и проблема, что чётко понять не можем, что нужно. Я честно не понимаю, что в Делфи может быть аналогом шаблона. Это нечто промежуточное между классом и объектом. Т.е. есть нечто, типа объекта класса, но потом на его основе надо создать другой объект, где будут переопределены значения некоторых полей.
Шаблон такой дожен быть создан на этапе исполнения. Хранится он в коллекции( TCollection ), коллекция лежит в классе, унаследованном от TComponent. Пользователь видит форму с CheckBoxList и выбирает там тарифный план по названию. Потом вылезает другая форма, где он устанавливает его цену и некоторые другие параметры. Подскажите что-нибудь, пожалуйста.


 
Stilgar   (2003-12-02 23:14) [8]

TPersistent.
Полагаю класс А наследован от TObject или вообще от object. Что абсолютно несущественно, просто определяешь метод без использования override и inherited. Содержание примерно такое:
procedure A.Assign(Sourse: A);
begin
field_a:=Source.field_a;
end;
Тут идет присваивание "полноценному объекту" свойства из шаблона Source. Вызывать метод естественно из "полноценного объекта".


 
Stilgar   (2003-12-02 23:24) [9]

Когда вы объяснили подробнее, могу предложить создавать класс, который выбрал пользователь. Зачем тогда вообще шаблоны? А еще лучше будет создавать один и тот же класс и ненужные поля просто не использовать. А лично я бы использовал для таких целей запись - всего-то и надо, что хранить небольшое количество информации.


 
Walrus   (2003-12-02 23:27) [10]

Замечательно, класс А - наследник TCollectionItem, из-за того, что это потомок TPersistent мне этот метод, стало быть, с директивой override писать? Внутри inherited вызывать?


 
Walrus   (2003-12-02 23:37) [11]

Количество информации не такое уж и маленькое, да и методов для работы с ней... Я просто не пишу тут все поля, которые предусмотрены, потому что это мешает понять суть проблемы. Ненужных полей нет. Просто несколько разных объектов одного класса могут иметь много общих значений полей. Шаблоны нам нужны для удобства пользователя. Там огромный wizard, где надо много чего ввести для регистрации, и как часть работы - создать себе несколько тарифных планов. Возникла мысль: дать возможность их выбрать из какой-то уже существующей базы, что ускорит процесс регистрации. Но нельзя же всем под планом "эконом" понимать одну и ту же цену, кому-то 3$ - эконом, а кому-то 0,001$ :) Поэтому некоторые поля должны быть разными.


 
Stilgar   (2003-12-02 23:45) [12]

Посмотрел исходники. Inherited писать не стоит, он там ошибку специально вызывает.
Кажется у меня появилась идея. Но объясните про разные "эконом", чтобы я ее сформулировал.


 
Petr V. Abramov   (2003-12-02 23:48) [13]

> [6] :)
> [7]

Ну пользователь каким-то образом выбрал тарифный план. Ну и где его выбор ( в виде " набора полей") сохранился?
Есть одно хорошее решение :)


 
Stilgar   (2003-12-02 23:59) [14]

Ладно, net заканчивается, объясню так. Надо делать конструктор с параметром, и в зависимости от параметра настраивать свойства. Если нужны пользовательские шаблоны, тогда сохраняешь в ini.


 
Walrus   (2003-12-03 00:14) [15]

Petr V. Abramov , ничего особенного, как обычно сохраняется информация о галках в CheckBoxList.
Stilgar, да жаль нет кончается, но всё же
1. что именно объяснить?
2. нельзя нам перекрывать базовый конструктор TCollectionItem, у нас потом всё сериализуется в текстовый файл. Ситуация: когда подгружаемся и при этом используются конструкторы с параметрами, отличными от параметров базового, лезут исключения.
3. что за пользовательские шаблоны?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.014 c
3-36518
Patrick
2003-11-21 14:31
2003.12.12
Интеграция


3-36576
AV
2003-11-20 13:51
2003.12.12
Размер .NTX созданных под Delphi, отличается от CLIPPERовских.


3-36522
MaxwellZ
2003-11-23 17:51
2003.12.12
Индекс текущей записи


1-36640
Viper-Omsk
2003-11-22 17:51
2003.12.12
Перемещение файла


1-36683
lena19
2003-12-02 23:57
2003.12.12
создание обекта и его собития





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский