Igel
|
|
« : 20-06-2003 11:58 » |
|
Добрый время суток!!
Проблема у меня. Сразу скажу, новичек в Дельфи, отсюда и непонимание.
В общем, для созданной системы делаю программку настройки параметров. Параметры читаются и сохраняются в INI-файле. Структура параметров: Общие параметры: - Цвет1 - Цвет2 -... - Толщины... Параметры подключенных модулей системы: Модуль ALL - слой 1 -... Модуль Spec - параметр1 - ...
Вопрос, основной, как это реализовать? На данный момент сделал диалог так: Слева Список разделов (Общие, Модуль ALL, Модуль Spec) Справа вверху список параметров выбранного раздела. TStringGrid Справа внизу информация о разделе - Memo-поле
Вопрос, следующий, похожий, как оптимально работать с параметрами? Первая идея, при выборе параметра на изменение, если он должен принимать жесткие значения, то разворачивать список. Как сделать - не знаю, так смутно догадываюсь. А время жмет.
Че-то, еще было... Ладно, по ходу уточним.
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #1 : 20-06-2003 12:02 » |
|
1) Реализовать в смысле дизайна? или как это запрограмировать?
2) Если нужно стисок значений то на свое усмотрение либо ставишь ComboBox(не знаю как он назывется в делфи), при помощи метода Add (незнаю как он называется у компонента делфи) загоняешь туда список значений в конце считываешь что пользователь выбрал, и запрещаешь ввод новых значений(там будет либо свойство либо режим работы компоеннта COMBOLIST). С ListBox(не знаю как он назывется в делфи) один в один толкл он места требует по больше.
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Pokemon
Гость
|
|
« Ответ #2 : 20-06-2003 12:07 » |
|
Не совсем понятно что за систему ты делаешь, поясни пожалуйста. И второе что означает: "должен принимать жесткие параметры"?
|
|
|
Записан
|
|
|
|
Igel
|
|
« Ответ #3 : 20-06-2003 13:53 » |
|
Для PSD: На работу со КомбоБоксом и как загонять туда списки, на это моих знаний хватает. Тут другое немного. Именно принцип программирования.
Для Pokemon-а: Приведу мой пример. Параметр в таблице "Цвет фона" - значение 7. Пользователь хочет изменить цвет. Кликает на значение, ему разворачивается список цветов. Штук 16, например. Ну-у, это я и назвал "жесткими параметрами".
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
Igel
|
|
« Ответ #4 : 20-06-2003 14:00 » |
|
Pokemon, я систему, можно сказать сделал. Но это на АвтоЛИСПе и под АвтоКАД. Средств стандартного ЛИСПа не хватает для создания продвинутых диалогов. И я решил для настройки сделать небольшую программку на Дельфи, которая бы запускалась и создавала файл настроек.
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
Pokemon
Гость
|
|
« Ответ #5 : 20-06-2003 17:49 » |
|
Как я понял у тебя параметры хранятся в таблице: если это ListBox то лучше всего сделать при щелчке выпад контектного меню в котором есть значения цветов. Ну а если это ComboBox то у него есть параметр Style который задает возможность вводить в поле со списоком значение, вроде значение stDropList задает режим только списка. Но этот списак должен быть создан заранее из др. данных. По мне лучше всего сделать ComboBox и задать ему стиль работы ...
|
|
|
Записан
|
|
|
|
Igel
|
|
« Ответ #6 : 21-06-2003 09:21 » |
|
Млин, не удалось объяснить... Вся проблема пока не в конкретной реализации. Не могу понять КАК сделать. Т.е., конечно можно насоздавать кучу переменных, и друг за дружкой значения заносить в "Список". Потом кучу условий и пр... Но это будет ужасно с точки зрения программирования, и реализация с точки зрения дизайна.
Как я делал на ЛИСПе: все данные, с которыми я работал, загонял в список(параметры, значения). В процессе работы в диалоге этот список меняется.И при выходе уже список сохраняю...
Здесь думал смогу аналогично, но язык другой, и я его еще не "чувствую".
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #7 : 21-06-2003 11:43 » |
|
А так те нужна схема управлеия даными?
Тут вариантов куча. Вот один Чтаешь свой ини файл в структуру типа дерева секции(папки) парамертры листья. Можно вообще ограничится стандартным компонентом TREE если сами строки вводить в ручную.
А так по двойному клику извлекаешь стоку из дерева (там она в названии ноды хранится) распаковваешь и грузишь на правую строну в компоненты типа "Имя" "значение".
Вероятно для каждой секции придется подгружать свои компонеты управления.
По кнопке "ок" собираешь строку и запишиваешь ее назад в дерево.
К расиво и элегантно, причем для мастеров можно оставить возможность создавать и редактировать ноды средствами самого дерева.
По завершении или команде сохранить записываешь все из дерева назад в файл.
Алгоритм работы с деревом будет очень простой у тебя там всего два уровня.
Единственое нужно перехватить создание папок и не разрешать создовать папки во втором уровене.
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Igel
|
|
« Ответ #8 : 21-06-2003 13:46 » |
|
Именно так я и думал. Только решил пока с "Деревом" не возиться, а взять ListBox. Ну, не важно. Вот как это реализовать, что-бы были эти самые "компоненты управления"? Тут у меня с понятиями туго... нет детальной картины...
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #9 : 21-06-2003 14:34 » |
|
Я так понимаю й тебя данные в принципе типизированые. в виде
имя = число
так?
Только число нужно по разному отобрадать то это цвет то толщина линии и тп.
Я бы сотворил так
повесил Edit для имени комбо для параметра и возможно дополнительную кнопку [...] для допонительных функций. Ну и разумется блок кнопок изменить добавить сохранить отмена(можно без него но у меня юзеры тупые) Далее к списку нужно привязать както информацию о типе конкретной записи. Почему я говорил про дерево У MS Tree в качестве индотификатора ноды используется параметр key он текстовый и в него можно зашифровать информацию о типе ноды col - секция цвета col_1 -первая настройка col_2 вторая ....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #10 : 21-06-2003 14:35 » |
|
Далее когда юзер кликает на ноду ды смотришь key видишь что там col_xx значит это цвет. и загружаешь в комбо цвета, будут толшины линий значит толшины линий. На кнопку [...] case можно скомутировать вызов диалогов напимер вибора цвета или открытия файла. case опереть на тотже key.
При каждом клике у тебя грузятся соотвествующие предустановленые значения.
Юзер кликнул из строки имя поля и его значение упали на правую сторону. Нажал изменить компоненты стали енабле кликнул сохранить все из считал имя счтал значение собрал строчку и запихнул в дерево на место старой. Все просто нужно толко акуратно запоминать(id или key) счем ты сейчас работаешь и отслеживать его изменения в VB такой диалог пишется за час. В делфи наверное чуть подольше возится.
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Igel
|
|
« Ответ #11 : 21-06-2003 15:07 » |
|
Это ясно. Только зачем дерево городить, если у меня всего 2 уровня: Модуль - Параметры модуля Хотел так: Слева Список модулей. Вызываю(указываю) конкретный - считываю объект, присоединенный (TStringList) в нем содержатся параметры (причем имя=число/строка). По списку параметров формирую справа таблицу. Первый столбец - имена пар-ов, второй значения. Вот на этом месте и встал. Список (TStringList) параметров сформирован, хотя, может есть конкретные предложения по структуре? Потому-что я делал, как привык, может это привнесет сложности!!
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #12 : 21-06-2003 15:18 » |
|
Про дерево писать короче.
Можно и два списка.
А вчем проблемат тогда если ты уже все сделал? Или у тебя в гриду не получилось выпихнить?
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Igel
|
|
« Ответ #13 : 21-06-2003 16:22 » |
|
Не-е, я прогнал. Я не смог все в один список запихнуть, мучаюсь... Хотел так: Список Модулей Каждый элемент(объект класса) - список параметров - каждый параметр - объект со своими пар-ми, такими, как: Имя пар-ра, тип значения,значение, Информация о параметре. Вот такую структуру и не могу создать. Точнее я хотел создать класс. Затем, уже визуализация. Возьмем к примеру дерево: Выбрал я в дереве параметр - ладно-бы мне просто число или текст задать надо, так значение параметра может быть выбрано из жесткого списка. Т.е. не просто для параметра EDitBox приделать, а еще в зависимости от типа Или EDitBox или ComboBox. Ну, это ладно, можно, как ты советовал, кнопку приделать. Главное, как мне этот клас реализовать?
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #14 : 21-06-2003 16:32 » |
|
Ты меня окончательно запутал.
Тыхочешь создать структуру данных(кнотейнер)в который бы считывались данные из ini файла редактировались в программе а затем записывалис при сохранении в ini файл и тебя возникли проблемы именно с реализацией этой структуры?
А скакой частью проблемы? Ты не можешь формализовать структуру данных.
Не получается загнать данные из файла в структуру
или не получается привязать структуру к интерфейсу и элементам управления?
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #15 : 21-06-2003 17:00 » |
|
Опиши всю задачу целиком - пропиши здесь структуру и типы данных, которые ты собираешься использовать - я попробую тебе рассказать. я уже делал нечто подобное с деревом и зависимостью от дерева кучи параметров и использую ini файл...
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Igel
|
|
« Ответ #16 : 21-06-2003 17:03 » |
|
Да нет... Я не могу сделать класс так, что-бы он подошел под поставленную задачу. Знаний не хватает... может поэтому так изъясняюсь? Не знаю что такое контейнер и с чем его едять... Понимаю, что все просто, но не могу сделать... еще хуже, объяснить толком не могу...
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #17 : 21-06-2003 17:21 » |
|
Так вот в моей идее с деревом в этом классе нужды нет вообще так как там строки ini файла храняться не посредственно в дереве в виде названия нод, а структура обеспечивается самим деревом(MS TREE это элемент управления в делфях должнобыть похожее или еееже можно зацепить это ActiveX) ты кабы видишь на экране свой ини но можешь ворачивать и разворачивать секции переносить мышью параметры из секции в секцию и прочие. А класс можно сделать такой например: class meitem | int id; int id_parent; CString Name; int value; // Или VARIANT value int type;// тип записи // Еще раз прошу прощения за С++ " А как тебе их связать вариантов множество можешь просто объявить массив этих элементов и по type выбирать нужные. Можешь их опустить в контейнер типа Tlist(если не ошибаюсь или TTree) Если ты не очень хорошо разбираеся в среде то вопрос как правильно не коректен делай как получится, будут конкретные траблы спросишь, по ходу дела возникнут мысли как это можно облегчить и оптимизировать. Вариантов решения твоей задачи сотни и у каждого свои минусы и плюсы. Я лично думаю что в твоей задаче красивые изыски програмирования не кчему, побыстому слепить, чтоб только работала, а там видно будет что нетак.
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Igel
|
|
« Ответ #18 : 23-06-2003 10:50 » |
|
Спасибо, пробую...
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
Igel
|
|
« Ответ #19 : 23-06-2003 10:51 » |
|
Спасибо всем, пробую... За поддержку, особенно! )
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
Alex
Гость
|
|
« Ответ #20 : 24-06-2003 20:58 » |
|
Есть классный компонент -Virtual Treeview ( http://www.delphi-gems.com/) Он позволяет подвешивать разные эдиты к своим нодам, правда в нем не очень просто разобраться. Удачи!
|
|
|
Записан
|
|
|
|
|