|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.08.2012, 16:42 | #1 |
Пользователь
Регистрация: 27.08.2009
Сообщений: 40
|
DBGrid и *.ini файл
Доброго времени суток.
Подскажите, пожалуйста, имеется таблица с данными. при выборе строки необходимо менять ее цвет. сделал так: Код:
Думал через FormStorage, но немного не понимаю как настроить его. Спасибо.
Читаю и перевожу со словарем с Фортрана, Алгола, Кобола и др.
Последний раз редактировалось Voldemort93; 15.08.2012 в 16:55. Причина: рано |
15.08.2012, 18:43 | #2 |
Старожил
Регистрация: 16.05.2012
Сообщений: 3,211
|
Непонятно, при чем тут ini-файл... Если сохранять цвета строка - тогда для работы с ini используется тип TIniFiles модуля IniFiles. Объявляете Переменную типа
IFile: TIniFiles; далее создаете экземпляр IFile:=TIniFiles.Create(<имя ini-файла, можно с полным путем>); В этой структуре: <имя ini-файла, можно с полным путем> я обычно делаю так: ExtractFileDir(Application.ExeName) +'\config.ini' - если файл лежит в той же папке, где exe-шник программы. А далее можете читать и писать в файл секциями, например логическое значение: b:=IFile.ReadBool(<ИмяСекции>, <Имя Переменной>, <Значение по дефолту, если переменная неопределена>); IFile.WriteBool(<Имя секции>,<имя переменной>, b); ну и так далее... Там не очень много функций, в этом типе
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
|
15.08.2012, 21:20 | #3 |
Старожил
Регистрация: 16.05.2012
Сообщений: 3,211
|
Сорри, недочитал исходный пост - абзац про FormStorage прошел мимо глаз
Если через FS делать - там есть StoredProps, попробуйте в него вписать свойство DBGrid.Columns. В IniFileName указываете имя ini-файла, а в IniSection - секцию в нем. Чтобы сохранение происходило при закрытии - Active:=true. Да, чуть не забыл - сохранятся только те свойства, которые Published. Ваши Columns от ДБГрида в них как-раз входят. Вот так как-то, если теоретически. Практически я им пользовался в более простых случаях, чем сохранение цветов отдельных строк, поэтому не скажу, сработает или нет - проверяйте.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
|
16.08.2012, 01:07 | #4 | ||
Пользователь
Регистрация: 27.08.2009
Сообщений: 40
|
Цитата:
Цитата:
Код:
Может еще какие-то варианты?
Читаю и перевожу со словарем с Фортрана, Алгола, Кобола и др.
Последний раз редактировалось Voldemort93; 16.08.2012 в 01:29. |
||
16.08.2012, 20:43 | #5 |
Старожил
Регистрация: 16.05.2012
Сообщений: 3,211
|
Для того, чтоб получилось, нужно DBGrid построчно перебирать. В цикле если строка выделена, записывать в ини (как раз как у Вас). А так - она только из первой строчки канвас берет. Чтоб пройти по строкам DBGrid, есть три варианта:
1. Пройти не по ДБГриду, а по DataSource; поскольку Грид с ним связан - строки в нем будут меняться; 2. Написать свой класс - наследник от ДБГрида для доступа к protected-свойству Row; 3. Использовать стороннюю библиотек компонент (например, EhLib), где уже есть доступ к свойству Row (и еще куча нужных фишек). НО! чем больше база, тем дольше будет сохранение ini-файла (пока по всей таблице пройдет и найдет выделенные строки). Поэтому не думаю, что данный вариант приемлем.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
|
16.08.2012, 20:47 | #6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Если база одно пользовательская - прямо в одном из полей записи таблицы можно держать признак для раскраски. Если многопользовательская - сделать отдельную таблицу и хранить в ней идентификаторы нужных записей и пользователей. Оптимальней не придумать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
16.08.2012, 20:50 | #7 |
Старожил
Регистрация: 16.05.2012
Сообщений: 3,211
|
В общем, единственный вариант (имеется в виду исходя из исходной задачи, потому что способ Аватара действительно оптимальней и мне нравится больше), приходящий на ум - это отслеживать процесс выделения строк в реальном времени. Например:
Объявляем переменную sel: string, в ней (через разделитель, например, ';', будем хранить номера выделенных строк). Инициализируем где-нибудь в начале программы sel:=options.ReadString('COLOR','GR EEN',';'); //Секция COLOR, параметр GREEN содержит номера строк зеленого цвета, по умолчанию равен ';' При выделении в процедуру обработки добавляем: if СТРОКА_ВЫДЕЛЕНА then //СТРОКА_ВЫДЕЛЕНА - логическая переменная, определяющая состояние строки sel:=sel+intToStr(номер строки)+';' else begin p:=pos(';'+IntToStr(НомерСтроки)+'; ',sel); //p - целое для определения позиции подстроки в строке if p<>0 then Delete(sel,p,length(IntToStr(НомерС троки))+1); end; При выходе из программы сохраняем строку в ини: options.WriteString('COLOR','GREEN' ,sel);
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Последний раз редактировалось Sciv; 16.08.2012 в 20:55. |
16.08.2012, 20:54 | #8 | |
Пользователь
Регистрация: 27.08.2009
Сообщений: 40
|
Цитата:
Читаю и перевожу со словарем с Фортрана, Алгола, Кобола и др.
|
|
16.08.2012, 20:56 | #9 | |
Пользователь
Регистрация: 27.08.2009
Сообщений: 40
|
Цитата:
Читаю и перевожу со словарем с Фортрана, Алгола, Кобола и др.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ini-файл | Афанасий[vedma] | Общие вопросы Delphi | 2 | 09.07.2012 07:58 |
*.ini файл | foxes | Общие вопросы Delphi | 9 | 24.10.2010 12:02 |
Перевод данных из DBGrid в Listbox через Ini | Val Rubis | БД в Delphi | 3 | 05.01.2010 05:29 |
ini Файл | Volkogriz | Общие вопросы Delphi | 1 | 12.11.2008 13:44 |
ini файл | Simply-Art | Общие вопросы Delphi | 3 | 17.06.2007 14:43 |