Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Как-то Poseidon мне подсказал... для того чтобы сохранить всю таблицу Str 
:(
    Опции темы
Elv
Дата 21.6.2005, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.6.2005

Репутация: нет
Всего: нет



Как-то Poseidon мне подсказал, что для того чтобы сохранить всю таблицу StringGrid, нужно воспользоваться таким кодом (т.е. при нажатии на кнопочку ToolButton1, нужно сохранить таблицу, а при нажатии на другую ToolButton2, нужно открыть таблицу) smile :
Я делаю так:

Код

procedure TForm1.ToolButton1Click(Sender: TObject);
//далее код сохранения
function SaveGrid(StringGrid: TStringGrid; fileName: string):boolean;
var f:textfile;
x,y:integer;
begin
assignfile (f,fileName);
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);

Result:= True;
end;



Для обратной загрузки

Код

procedure TForm1.ToolButton2Click(Sender: TObject);
//далее код для открытия
function LoadGrid(StringGrid: TStringGrid; fileName: string):Boolean;
var f: textfile;
temp,x,y:integer;
tempstr:string;
begin
assignfile (f,fileName);
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);

Result:= True;
end;


Я раньше с функциями не общался, в основном процедуры (я пока новичок в программировании и много не знаю). Не знаю где прописывать функции (в процедуре или нет).

Пример вызова:
Этот код, где его нужно прописывать, не пойму.
SaveGrid(StringGrid1, 'File1.txt')

LoadGrid(StringGrid1, 'File1.txt')


C использованием SaveDialog можно так
SaveGrid(StringGrid1, SaveDialog1.FileName)

Это сообщение отредактировал(а) Alex - 21.6.2005, 09:29
PM MAIL   Вверх
Pakshin A. S.
Дата 21.6.2005, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



1) Простой способ
Пишешь описалово в секции implementation сверху, до основных процедур
Код

...
implementation

{$R *.DFM} // По-моему так

procedure Proc1...;
begin
end;

function Proc2...;
begin
end;

2) Лучший способ
Описываешь в типе формы
Код

 interface
 TForm1 = TForm...
 private
  function Func1;
  function FUnc2;
 end;

Потом в implemeantion
Код

implementation
function TForm1.Func1;
begin
end;

function TForm1.Func2;
begin
end;

Это под твой пример подойдет

3) Создать отдельный модуль
Код

UnitFuncs;

interface
  function F1;
  funciton F2;

implementation

function F1;
begin
end;

function F2;
begin
end;


В первом и последнем случае нужно будет немного изменить код функций, а во второй ничего не нужно...

P. S.
Я правильно понял вопрос?
Добавлено @ 08:51
Это разумеется отдельные описалова... потом создаешь событие Onclick для каждого Button (в Object Inspector в событиях)
и пишешь:
Код

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
 SaveGrid()
end;

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
 LoadGrid()
end;


Соответственно все параметры запишешь самостоятельно...
Добавлено @ 08:52
А вообще в любом учебнике, который толще 100 страниц подробно все рассказывается... smile

И в нете доков куча!!!
Добавлено @ 08:55
Кстати еще вот так можно записать процедуру:
Код

(*сразу пример тупой*)
function ShowSumIncUnoEach(x,y: integer): integer;
 function Sum: integer; // Вложенная функция
 begin
  Reasul:=x+y
 end;
begn
 inc(x);
 inc(y);
 Result:=Sum
end;

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
 ShowMessage(IntToStr(ShowSumIncUnoEach(1, 2)))
end;

PM   Вверх
Elv
Дата 21.6.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.6.2005

Репутация: нет
Всего: нет



Pakshin A. S. , ты прости меня smile но я понять не могу. А молчать думаю не стоит.
В коде:

Код

interface
 TForm1 = TForm... //что за троеточие?
 private
  function Func1;
  function FUnc2;
 end;

А потом:

implementation            
function TForm1.Func1;
begin
// получается здесь нужно порписывать функции?
.
.
.

end;

function TForm1.Func2;
begin
.
.
.

end;

//А после, процедуры для кнопок:

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
LoadGrid(StringGrid1, 'File1.txt')

end;

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
  SaveGrid(StringGrid1, 'File1.txt')
end;

end.

Ага? Или не ага? smile
PM MAIL   Вверх
Poseidon
Дата 21.6.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



А вот и я smile
Не нужно ничего мудрить, делай так:
Код
function SaveGrid(StringGrid: TStringGrid; fileName: string):boolean;
var f:textfile;
x,y:integer;
begin
assignfile (f,fileName);
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);

Result:= True;
end;

function LoadGrid(StringGrid: TStringGrid; fileName: string):Boolean;
var f: textfile;
temp,x,y:integer;
tempstr:string;
begin
assignfile (f,fileName);
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);

Result:= True;
end;


procedure TForm1.ToolButton1Click(Sender: TObject);
begin
 SaveGrid(StringGrid1,'file1.txt')
end;

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
 LoadGrid(StringGrid1,'file1.txt')
end;



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Elv
Дата 21.6.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.6.2005

Репутация: нет
Всего: нет



В Инете нашел такие слова:

"Вообще StringGrid нужен только для отображения данных. Поэтому его нет смысла сохранять. Записывать в файл надо структуру, из которой данные подаются в StringGrid. У Вас есть она?"

Для меня это "темный лес". Как возможно записать в файл структуру, а потом подать их в StringGrid?
Структура я понимаю это столбцы, строки, данные находящиеся в таблице. Так?

PM MAIL   Вверх
Elv
Дата 21.6.2005, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.6.2005

Репутация: нет
Всего: нет



Pakshin A. S., Poseidon, Спасибо smile

Только...

Poseidon, у меня еще один мааааааленький вопросик.
После закрытия формы, обычно сообщение появляется о сохранении документа
здесь можно вот так сделать:

if form1.Close//тут помоему что-то еше нужно написать// then MessageDlg ('Vnimanie',mtWarning,[mbYes, mbNo],1);
PM MAIL   Вверх
Poseidon
Дата 21.6.2005, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Обрабатывай событие OnClose формы:

Код
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //здесь пищи то, что должно произойти при закрытии, например:
  if SaveDialog1.Execute  then SaveGrid(StringGrid1,SaveDialog1.FileName); 
end;


Добавлено @ 12:30
или так

Код
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  MessageDlg ('Сохранить',mtConfirmation,[mbYes, mbNo],0); 
end;


Но при этом нужно обработать нажатие на кнопку Yes. Но это уже другой вопрос, не касающийся этой темы.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 21.6.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



А может стоит обработать CanClose... чтобы в случае отказа не дать программе закрыться?
PM   Вверх
Poseidon
Дата 21.6.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



В случае отказа делаем
Код
Action:= caNone
и все


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Elv
Дата 21.6.2005, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.6.2005

Репутация: нет
Всего: нет



1) Эта код добавляет строку в StringGrid новую строку нажатием Enter

if key=vk_return then StringGrid1.RowCount:=StringGrid1.RowCount+1

Подскажите, что зачит "key=vk_return"?

2)А, какой код на удаление строки, нажатием например, "Delete"? smile
PM MAIL   Вверх
Girder
Дата 21.6.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



М
 
Один топик - один вопрос!
Тема закрыта.



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.