Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2011, 00:37   #1
Эммануэль
Пользователь
 
Регистрация: 19.12.2010
Сообщений: 34
По умолчанию Работа со Stringgrid

Добрый вечер, форумчане! Подскажите, пожалуйста, как написать следующие коды (процедуры для кнопок):
1. Запись данных из таблицы Stringgrid в файл ?
2. Запись данных из файла в Stringgrid ?
Эммануэль вне форума Ответить с цитированием
Старый 27.03.2011, 03:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, это неоднократно решалось на данном форуме.
И вариантов решения может быть много.

вот, например, один из вариантов, которыя я уже публиковал здесь на форуме:
Код:
procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
 var
   f:    TextFile;
   i, k: Integer;
 begin
   AssignFile(f, FileName);
   Rewrite(f);
   with StringGrid do
   begin
     // Write number of Columns/Rows
    Writeln(f, ColCount);
     Writeln(f, RowCount);
     // loop through cells
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
         Writeln(F, StringReplace(Cells[i, k], #13#10, '$@$', [rfReplaceAll, rfIgnoreCase]));
   end;
   CloseFile(F);
 end;

 procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
 var
   f:          TextFile;
   iTmp, i, k: Integer;
   strTemp:    String;
 begin
   AssignFile(f, FileName);
   Reset(f);
   with StringGrid do
   begin
     // Get number of columns
    Readln(f, iTmp);
     ColCount := iTmp;
     // Get number of rows
    Readln(f, iTmp);
     RowCount := iTmp;
     // loop through cells & fill in values
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
       begin
         Readln(f, strTemp);
         strTemp := StringReplace(strTemp, '$@$', #13#10, [rfReplaceAll, rfIgnoreCase]);
         Cells[i, k] := strTemp;
       end;
   end;
   CloseFile(f);
 end;

procedure TForm3.BitBtn2Click(Sender: TObject);
begin
  SaveStringGrid(StringGrid1, 'c:\temp.txt');
  ShowMessage('Save done.');
end;


procedure TForm3.BitBtn3Click(Sender: TObject);
begin
  LoadStringGrid(StringGrid1, 'c:\temp.txt');
  ShowMessage('Load done.');
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.03.2011, 14:29   #3
Эммануэль
Пользователь
 
Регистрация: 19.12.2010
Сообщений: 34
По умолчанию

СПАСИБО!
Уважаемый модератор! Позвольте спросить:
1.Что означают эти магические знаки: '$@$', #13#10, [rfReplaceAll, rfIgnoreCase]
,?
2.Вас не затруднит написать комментарии на русском, т.к. я немка?
3. А вместо BitBtn я могу использовать Button?
4. Названия процедур SaveStringGrid и LoadStringGrid нужно прописывать вручную в «type» вместе с остальными процедурами (в начале кода программы)?
Эммануэль вне форума Ответить с цитированием
Старый 18.05.2011, 08:49   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Ещё вариантик
Сохранение
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
    sl:TStringList;
    str:string;
begin
 sl:=TStringList.Create;
 sl .Add(IntToStr(StringGrid1.RowCount)+#9+ IntToStr(StringGrid1.ColCount));
 for i:=0 to StringGrid1.RowCount-1 do
 begin
  str:='';
  for j:=0 to StringGrid1.ColCount-1 do
  str:=str+StringGrid1.Cells[j,i]+#9;
  sl.Add(Str);
 end;
// Сохраняем содержимое списка строк в файле
sl.SaveToFile('d:\1.txt');
sl .Free;
end;
Загрузка
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
sl:TStringList;
i,j:Integer;
Str, CellText:String;
begin
 sl:=TStringList.Create;
 sl.LoadFromFile('d:\1.txt');
 Str:=sl[0];
 i:=StrToInt(copy(Str,1,pos(#9,Str)-1));
 StringGrid1.RowCount:=i;
 Delete(Str,1,pos(#9,Str));
 StringGrid1.ColCount:= StrToInt(Str);
 for i:=1 to sl.Count-1 do
 begin
  Str:=sl[i];
  j:=0;
  while Length(Str)>0 do
  begin
   CellText:=copy(Str,1,pos(#9,Str)-1);
   StringGrid1.Cells[j,i-1]:=CellText;
   Delete(Str,1,pos(#9,Str));
   inc(j);
  end;
 end;
sl.Free;
end;
SERG1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с StringGrid Unique Общие вопросы Delphi 4 13.09.2010 03:24
Работа со StringGrid Neroaz Помощь студентам 3 29.03.2010 13:31
работа со stringgrid Johny91 Помощь студентам 0 27.12.2009 14:28
работа со StringGrid student_63 Помощь студентам 1 11.11.2007 16:09
Работа с StringGrid aleks_grey Компоненты Delphi 2 28.10.2007 07:08