![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Cохранение StringGrid [D7, WinXP]
tamagavk © (2004-06-21 15:57:00)У меня такая проблема: У меня есть таблица с какими-то данными, как мне сделать так, чтобы при выходе из программы все табличные данные сохранялись (наверно сохранялись в файл, а может я и не прав) и чтобы при следующем запуске программы все мои данные былы в таблице.Конечно сформулировал по-тупому, но думаю вы меня поняли. Желательно привести пример.Заранне спасибо.
zep (2004-06-25 00:51:00) [1]ExtractFilePath(ParamStr(0))
показывает путь к папке в какой экзешник твоей проги там пусть и лежит твой фаил
Amoeba (2004-06-22 17:31:00) [2]
> нету книжки
Если нужны книжки в эл. виде - то на сайте А.Подгорецкого их куча.
begin...end (2004-06-22 17:12:00) [3]ИМХО, хреновая это затея с поиском файла по всему диску.
Digitman (2004-06-22 17:06:00) [4]
> tamagavk (22.06.04 16:58) [30]
ну до чего ж ты упрямый !
пример использования FindFirst/FindNext есть в стандартной справке, привыкай ей пользоваться в первую очередь
tamagavk (2004-06-22 16:58:00) [5]нету книжки - наощуп. А если бы привели пример использования поиска или нужную ссылку - был бы очень благодарен.
Digitman (2004-06-22 16:56:00) [6]
> если я дам файлу такое имя, которого точно не будет на чужом
> компьютере? Ну можно же поиск файла применить?Нет?
да можно все ! но, уверяю тебя, не стоит этим заниматься ... что это за программа такая, рабочие файлы которой разбросаны где ни попадя ? все, что касается непосредственно программы (речь не идет о системных библиотеках/модулях), должно лежать либо в предопределенном каталоге либо там, куда укажет сам юзер .. задача программы - "помнить" путь к этому каталогу и имя файла в нем
> Если LoadFromFile использовать окно при запуске программы
> не будет выводиться?
этот метод не имеет никакого отношения к "окну при запуске программы" - диалог этот выводится при исполнении метода OpenDialog1.Execute , а не LoadFromFile
> пишет ошибку fmRead - неизвестный идентификатор.
писал навскидку .. это так сложно посмотреть в справке к методу TFilestream.Create() корректное имя идентификатора ? fmOpenRead этот параметр должен быть
> поподробнее насчет StringList. Где его вставлять и как его
> использовать?
да не нужно тебе это ... я ж показал тебе, как выгрузить и загрузить колонки с пом. файлового потока TFileStream
BFG9k (2004-06-22 16:47:00) [7]FindFirst , FindNext - поиск файла по маске. Почитал бы чтоли книжку по дельфям сначала...
tamagavk (2004-06-22 16:34:00) [8]>да мало ли на дисках может оказаться файлов с именем 1.txt !
А если я дам файлу такое имя, которого точно не будет на чужом компьютере? Ну можно же поиск файла применить?Нет?
В примере, который вы мне предлагаете пишет ошибку fmRead - неизвестный идентификатор.
Если LoadFromFile использовать окно при запуске программы не будет выводиться? Если не будет, то можно поподробнее насчет StringList. Где его вставлять и как его использовать?
Digitman (2004-06-22 15:57:00) [9]
> tamagavk (22.06.04 15:20) [25]
> Ну же!!!
не нукай ... не запряг ..
> LoadFromFile(OpenDialog1.FileName);
>
> пишет неизвестный идентификатор
конечно неизвестный ! LoadFromFile у тебя это что ? метод ! раз метод, то какого объекта ? ты же не указал конкретный объект, чей метод LoadFromFile ты пытаешься вызвать ... в дан.случае, наверно, это должен быть объект класса-наследника TStrings, например, TStringList
> Как, напрмер, написать чтобы не выводилось окно, где указывать
> путь, а программа сама искала текстовой файл и загружала
> его
да мало ли на дисках может оказаться файлов с именем 1.txt ! Что ж программе прикажешь делать, если таких файлов более одного найдется ? Какой прикажешь файл использовать ?
думаю, ты не делом занялся ..
при старте программы она должна попытаться открыть, например, в текущем каталоге файл 1.txt для чтения/записи ... если файл отсутствует, он тут же будет создан
var
fs: TFilestream;
..
при завершении программы запишем в файл содержимое грида
fs := TFilestream.Create('1.txt', fmCreate);
try
for i:= 0 to Grid.ColCount - 1 do
Grid.Cols[i].SaveToStream(fs);
finally
fs.Free;
end;
при старте программы прочитаем из файла созраненное ранее содержимое грида
try
//пытаемся открыть файл для чтения
fs := TFilestream.Create('1.txt', fmRead);
//успешно открыли
try
// пытаемся прочитать из файла содержимое колонок грида
try
for i:= 0 to Grid.ColCount - 1 do
Grid.Cols[i].LoadFromStream(fs);
finally
fs.Free;
end;
except
//в файле черт-те что, но только не то что ожидалось
end;
except
//файла нет - ничего страшного, грид будет пустой
end;
tamagavk (2004-06-22 15:20:00) [10]Удалено модератором
tamagavk (2004-06-22 14:56:00) [11]Почему не получается когда пишу это:
If OpenDialog1.Execute then begin
...
LoadFromFile(OpenDialog1.FileName);
пишет неизвестный идентификатор. Как, напрмер, написать чтобы не выводилось окно, где указывать путь, а программа сама искала текстовой файл и загружала его
tamagavk (2004-06-22 14:41:00) [12]ЭТО КТО ЕЩЕ НЕ ПОЙМЕТ!!! . Вот по-человечески объяснили и все получилось. РАБОТАЕТ. Всем спасибо.
BFG9k (2004-06-22 14:38:00) [13]Думаю , начинающий не поймет , но кажется это тот самый момент ,когда можно использовать DBGrid вместе со стандартной базой данных.
P.S.: "...сохранялись (наверно сохранялись в файл, а может я и не прав)" - а куда ж еще ?:))
Andy BitOff (2004-06-22 14:25:00) [14]Закладка Dialogs компонент OpenDialog кидаешь на форму, настраиваешь (я думаю с фильтрами разберешься) на кнопку вешаешь;
If OpenDialog1.Execute then begin
...
OpenDialog1.FileName; // имя выбранного файла
end;
evvcom (2004-06-22 14:23:00) [15]Ну ладно вам над ребенком издеваться. :-)
На закладке Dialogs компонент OpenDialog.
tamagavk (2004-06-22 14:20:00) [16]Ну я же начинающий . Вы думаете, можно все знать?
Andy BitOff (2004-06-22 14:02:00) [17]Че за диалог выбора файла? Можете привести код.
НУ ЗНАЕШЬ !!!...
tamagavk (2004-06-22 13:58:00) [18]Че за диалог выбора файла? Можете привести код.
Я написал вот это:
Procedure
SaveGrid;
var f:textfile;
x,y:integer;
begin
assignfile (f, 'С:\1.txt' );
rewrite (f);
writeln (f,stringgrid.colcount);
writeln (f,stringgrid.rowcount);
For X:= 0 to stringgrid.colcount- 1 do
For y:= 0 to stringgrid.rowcount- 1 do
writeln (F, stringgrid.cells[x,y]);
closefile (f);
end ;
Procedure LoadGrid;
var f:textfile;
temp,x,y:integer;
tempstr: string ;
begin
assignfile (f, 'С:\1.txt' );
reset (f);
readln (f,temp);
stringgrid.colcount:=temp;
readln (f,temp);
stringgrid.rowcount:=temp;
For X:= 0 to stringgrid.colcount- 1 do
For y:= 0 to stringgrid.rowcount- 1 do begin
readln (F, tempstr);
stringgrid.cells[x,y]:=tempstr;
end ;
closefile (f);
end;
Куда и чего нужно вставлять?
Anatoly Podgoretsky (2004-06-22 13:57:00) [19]Не царское это дело таскать файл, программа должна его создать при первом использовании.
Andy BitOff (2004-06-22 13:47:00) [20]А ты сделай так, чтобы программа запустилась, но StringGrid при этом остался пустым (раз нет файла) или при переносе программы захвати с собой и текстовой файл.
Неужели это так сложно?
Пользователи наверно будут класть файл в нужную для себя дирректорию. КАК БЫТЬ?
Добавить диалог выбора файла.