Баг Lazarus? Сохранение StringGrid в файл.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Баг Lazarus? Сохранение StringGrid в файл.

Сообщение Virt404 » 31.01.2013 01:25:17

Объясню на примере.
На форме имеется StringGrid1, у которого выставлена автоматическая нумерация строк в фиксированном столбце и разрешено редактирование таблицы, т.е.
Options -> goFixedRowNumbering = True, goEditing = True. Также есть 2 кнопки:
первая добавляет строку в таблицу, т.е. увеличивает RowCount на единицу, при помощи второй мы можем сохранить наш StringGrid в файл (StringGrid1.SaveToFile('1.dat'))
Количество строк таблицы заранее не известно, поэтому на этапе дизайна установлено значение = 2 (т.е. 1 фиксированная строка и одна обычная).

Запускаем программу, заполняем таблицу, добавляя в нее строки. Затем сохраняем результат. Все работает...

Теперь нам понадобилось чтобы при запуске программы таблица заполнялась данными из файла. Обрабатываем событие формы OnShow:
Код: Выделить всё
StringGrid1.LoadFromFile('1.dat');

Запускаем программу и видим что добавленные нами строки не отображаются, видно лишь то количество строк, которое указано на этапе дизайна StringGrid'a
StringGrid1.Options -> goAutoAddRows = True не помогает.
Первое, что приходит в голову, изменить свойство SaveOptions, т.е. в обработчике кнопки сохранения в начале поместить код:
Код: Выделить всё
StringGrid1.SaveOptions:= [soDesign, soContent];

(soAttributes и soPosition нам в данном случае не нужны, я проверял ))

Запускаем... Видим то же самое, хотя наш сохраненный файл изменился (в нем появились Options). Далее все эксперименты проводил с этим файлом (т.е. кнопку "Сохранить" не нажимал)

Т.е. задача состоит в том, чтобы заранее определить количесто строк таблицы в файле или что и как нужно подкрутить, чтобы они все отобразились. Предварительно во время дизайна выставить значение 100500 строк не интересно, хотя это сняло бы частично всю проблему.
Ведь в файле сохраняется количество строк, даже если они пустые! (сохраненный файл представляет собой xml-ку, где все понятно написано)

Далее самое интересное. Не помню почему, но решил я задавать StringGrid'у SaveOptions не в обработчике нажатия кнопки, а в FormShow, т.е.:
Код: Выделить всё
procedure TForm1.FormShow(Sender: TObject);
begin
  StringGrid1.SaveOptions:= [soDesign, soContent];
  StringGrid1.LoadFromFile('1.dat');
end;

И, о чудо! Все сохраненные строки показались, НО! Пропала нумерация строк (goFixedRowNumbering. Кстати значение этой опции не сохраняется в файле, ни True, ни False, вообще никак)!
Конечно можно ее добавить в FormShow:
Код: Выделить всё
StringGrid1.SaveOptions:= [soDesign, soContent];
StringGrid1.LoadFromFile('1.dat');
StringGrid1.Options:= StringGrid1.Options + [goFixedRowNumbering];

Так все работает как надо, но я пошел дальше. Стало интересно каким образом SaveOptions влияют на загрузку файла (третью строку, там где StringGrid1.Options, временно закомментировал. Оказалось, если оставить
Код: Выделить всё
StringGrid1.SaveOptions:= [soDesign];

показывается пустая сетка с нужным количеством строк, но без какого-либо контента вообще, а если
Код: Выделить всё
StringGrid1.SaveOptions:= [soContent];

видим нашу сетку без дополнительных строк, но с контентом и нумерацией.

Так вот, почему изменение параметров сохранения влияет на загрузку файла, в то время как файл остается неизменным?

P.S. Lazarus 1.0.4 x86
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Virt404
незнакомец
 
Сообщения: 1
Зарегистрирован: 31.01.2013 01:00:59

Re: Баг Lazarus? Сохранение StringGrid в файл.

Сообщение VirtUX » 31.01.2013 11:29:44

уже обсуждалось! Учимся пользоваться поиском!
Virt404 писал(а):задача состоит в том, чтобы заранее определить количесто строк таблицы в файле

и попробуй добавить в багтрекер...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Баг Lazarus? Сохранение StringGrid в файл.

Сообщение naomika » 09.08.2013 13:19:29

получилось )
Аватара пользователя
naomika
незнакомец
 
Сообщения: 7
Зарегистрирован: 09.08.2013 08:30:41


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 225

Рейтинг@Mail.ru