1

Тема: Зберігання з StringGrid у файл

if (SaveDialog1->Execute())  {

   StringGrid1->Options = StringGrid1->Options >> goEditing; }

ось такий код в мене на кнопку. Раніше все працювало,а зараз чомусь не працює.Точніше,показує вікно щоб назвати файл в який буде зберігатися все з СТрінгГріду ,але коли я ввожу формат та назву, файл не з’являється.
Допоможіть будь ласка вирішити проблему

2

Re: Зберігання з StringGrid у файл

Дайте весь код і розкажіть, що ви змінили між «раніше» і «тепер».

3

Re: Зберігання з StringGrid у файл

в тому то й справа,що я нічого не змінювала. Не знаю
Насправді це весь код для збереження  .Ну ось з кнопкою)

void __fastcall TForm4::Button2Click(TObject *Sender)
{
   if (SaveDialog1->Execute())
   {

   StringGrid1->Options = StringGrid1->Options >> goEditing;
   }

}

4

Re: Зберігання з StringGrid у файл

Подумайте самі, що робить цей код,

    void __fastcall TForm4::Button2Click(TObject *Sender)
    {
    if (SaveDialog1->Execute()) //якщо випав діалог і ви натиснули ок
    {
     
    StringGrid1->Options = StringGrid1->Options >> goEditing; //зробити комірки стрінгріду едітабельними (т.е. які можна редагувати)
    }
     
    }

Все, більше нічого Ваш код не робить

Подякували: quez1

5

Re: Зберігання з StringGrid у файл

ну воно працювало ,ось в чому справа(здається працювало)
Добре,тоді як зберігати з стрінггріду з ділогами цими?
Бо просто так зробити файл і щоб зберігався куди я скажу,я так не хочу

6

Re: Зберігання з StringGrid у файл

на псевдокоді (шутка) це виглядалоб приблизно так

Прихований текст
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, Cells[i, k]);
  end;
  CloseFile(F);
end;

// Load a TStringGrid from a file

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);
        Cells[i, k] := strTemp;
      end;
  end;
  CloseFile(f);
end;

відсіль

Перекладайте.

7

Re: Зберігання з StringGrid у файл

А ось і для білдеру

Прихований текст
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  SaveGridToFile(StringGrid1,"C:\\windows\\desktop\\savegrid.txt");

}
//---------------------------------------------------------------------------

void __fastcall TForm1::SaveGridToFile(TStringGrid *Grid,AnsiString ofilename)

{  TStringList *list= new TStringList;

  for (int rowint=0;rowint<Grid->RowCount;rowint++)
  {
    for (int colint=0;colint<Grid->ColCount ;colint++)
    {
       list->Add(Grid->Cells[rowint][colint]);
    }
  }


 list->SaveToFile(ofilename);
 delete list;

}

void __fastcall TForm1::LoadGridFromFile(TStringGrid *Grid,AnsiString ofilename)
{
  TStringList *list=new TStringList;
  list->LoadFromFile(ofilename);

  for (int listint=0;listint<list->Count;listint++)
  {

    for (int rowint=0;rowint<Grid->RowCount;rowint++)
    {
      for (int colint=0;colint<Grid->ColCount ;colint++)
      {
         AnsiString temp=list->Strings[0].c_str();
         Grid->Cells[rowint][colint]=temp;
         list->Delete(0);
      }
    }
 }
 delete list;
 }
//---------------------------------------------------------------------------------
 void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
  LoadGridFromFile(StringGrid1,"C:\\windows\\desktop\\savegrid.txt");
}
//---------------------------------------------------------------------------

Відсіль

8

Re: Зберігання з StringGrid у файл

Chemist-i написав:

Подумайте самі, що робить цей код,

    StringGrid1->Options = StringGrid1->Options >> goEditing; //зробити комірки стрінгріду едітабельними (т.е. які можна редагувати)

Все, більше нічого Ваш код не робить

Навпаки - зсув праворуч, тобто goEditing видаляється із властивостей.

А вам треба в циклі пройтися по Rows чи Cols і зберегти всі їхні Text в файл. Додати Delimeter за смаком. Можливо зібрати все в один TStringList і зробити йому SaveToFile.

9

Re: Зберігання з StringGrid у файл

а що таке SaveGridToFile ?

10

Re: Зберігання з StringGrid у файл

juliya написав:

а що таке SaveGridToFile ?

https://translate.google.ru/#en/uk/Save … 0To%20File

11

Re: Зберігання з StringGrid у файл

Chemist-i написав:

А ось і для білдеру

Прихований текст
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  SaveGridToFile(StringGrid1,"C:\\windows\\desktop\\savegrid.txt");

}
//---------------------------------------------------------------------------

void __fastcall TForm1::SaveGridToFile(TStringGrid *Grid,AnsiString ofilename)

{  TStringList *list= new TStringList;

  for (int rowint=0;rowint<Grid->RowCount;rowint++)
  {
    for (int colint=0;colint<Grid->ColCount ;colint++)
    {
       list->Add(Grid->Cells[rowint][colint]);
    }
  }


 list->SaveToFile(ofilename);
 delete list;

}

void __fastcall TForm1::LoadGridFromFile(TStringGrid *Grid,AnsiString ofilename)
{
  TStringList *list=new TStringList;
  list->LoadFromFile(ofilename);

  for (int listint=0;listint<list->Count;listint++)
  {

    for (int rowint=0;rowint<Grid->RowCount;rowint++)
    {
      for (int colint=0;colint<Grid->ColCount ;colint++)
      {
         AnsiString temp=list->Strings[0].c_str();
         Grid->Cells[rowint][colint]=temp;
         list->Delete(0);
      }
    }
 }
 delete list;
 }
//---------------------------------------------------------------------------------
 void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
  LoadGridFromFile(StringGrid1,"C:\\windows\\desktop\\savegrid.txt");
}
//---------------------------------------------------------------------------

Відсіль

тут тільки перше значення зберігає

12 Востаннє редагувалося koala (22.02.2015 18:34:34)

Re: Зберігання з StringGrid у файл

Chemist-i написав:
AnsiString temp=list->Strings[0].c_str();
Grid->Cells[rowint][colint]=temp;
list->Delete(0);

Лайнокод detected. temp тут явно не потрібен, а видаляти з тимчасового об'єкту, який буде знищено за 3 рядки - себе не любити.

juliya написав:

тут тільки перше значення зберігає

Будь ласка, надайте скріншот з трьома вікнами: з кодом, із запущеною програмою і з блокнотом.