К сожалению, последовательным, в отношении постов быть не получается. Да, и DevExpress, с которым я сейчас плотно работаю, и о котором я в последнее время много рассказываю, постоянно подбрасывает интересные задачи… Поэтому, еще одна подрубрика. Продолжение “Заметок на полях” будет. Но TIPS & TRICKS это, скорее, для того, что бы не забыть как сделать то-то и то-то… Если кто-то столкнется с аналогичными задачами и кому-то это сэкономит время – я буду рад.
Для тех, кого заинтересовала тема Scheduller’а, будут интересна серия постов в блоге Delphi в Internet.
А пока…
В “Заметках” я много рассказывал о настройках View для Grid. Настройки эти, как вы помните, могут производится и в Run Time. Соответственно, уместно будет сохранение и восстановление определенных конфигураций представлений.
Для этой цели можно использовать следующие методы:
- StoreToStream
- StoreToIniFile
- StoreToRegistry
и
- RestoreFromStream
- RestoreFromIniFile
- RestoreFromRegistry
Но, иногда удобно сохранять эти настройки в БД. Хотя бы для того, что бы их могли использовать другие пользователи.
Ниже примеры сохранения:
procedure TFMain.btnPrint_SaveClick(Sender: TObject);
var
sl: TStrings;
bs, Stream: TStream;
ttl: string;
begin
try
Stream:= TMemoryStream.Create;
PivotGrid.StoreToStream(Stream);qryPMC.Insert;
ttl:= ShowNewPMSettingsDlg; // Это функция, которая возвращает имя конфигурации, что бы их как-то идентифицировать
qryPMC.FieldByName(‘Title’).asString:=ttl;
Stream.Position:=0; // Не забывайте об этом, иначе работать не будет
TMemoField(qryPMC.FieldByName(‘Config’)).LoadFromStream(Stream);
if ttl<>” then
qryPMC.Post
else
qryPMC.Cancel;finally
FreeAndNil(Stream);end;
end;
… и восстановления:
procedure TFMain.btnPrintLoadClick(Sender: TObject);
var
sl: TStrings;
Stream: TStream;begin
Stream:= TMemoryStream.Create;
Stream.Position:=0;
TMemoField(qryPMC.FieldByName(‘Config’)).SaveToStream(Stream);
Stream.Position:=0;
PivotGrid.RestoreFromStream(Stream);
end;
Здесь я использую PivotGrid. Это уникальный компонент. О нем я планирую рассказать отдельно. Настройки View сохраняются аналогичным образом. Не забудьте перед обращением к потоку выставить в 0 его позицию.
Другие статьи серии:
DevExpress. TIPS & TRICKS #1
DevExpress. TIPS & TRICKS #2
DevExpress. TIPS & TRICKS #3
DevExpress. TIPS & TRICKS #4
DevExpress. TIPS & TRICKS #5
DevExpress. TIPS & TRICKS #5.5
DevExpress. TIPS & TRICKS #6
DevExpress. TIPS & TRICKS #7
Придумал для своего БД-приложения написать универсальную форму с сеткой cxGrid для сохранения/вызова различных запросов-отчетов.
То есть заводим таблицу, в которой будут сохраняться текст SQL-запроса, описание параметров, рекомендации пользователю по использованию отчета, настройки сетки (имена полей, ширина, тип данных и т.п.) для вменяемого отображения результатов запроса. К сетке добавляю метод “Экспортировать в MS Excel/OOo.Calc”.
Есть целый класс пользовательских хотелок-обращений, которые решаются буквально написанием единственного запроса, который хотелось бы предоставить юзерам в дальнейшее многократное пользование, чтобы лишь параметры подставляли желаемые и меня больше с этим не дергали.
Уперлось все именно в сохранение настроек cxGrid. Честно говоря, начал городить свой велосипед для формирования JSON- или XML-строки с последующим сохранением в поле записи. Спасибо за вашу подсказку с использованием потока и сохранением его содержимого в поле БД, попробую.
Отличный пост, спасибо.
StoreToIniFile, RestoreFromIniFile лучше чем мой “велосипед”