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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2018, 20:33   #1
6elka
Новичок
Джуниор
 
Регистрация: 20.05.2017
Сообщений: 1
По умолчанию отображение в Stringrid из файла

вопрос у меня есть stringgrid и dbgrid и мне нужно чтобы при нажатии на ячейку dbgrid из нее бралась информация и в зависимости что там написано в stringgrid отрисовывалось либо из 1-го файла либо из 2 файла но не получается отрисовывается только раз если я выберу другую ячейку не отрисовывается а бьет ошибку

Код:
function TForm5.GetMatrix: TMatrix;
var L: TStringList;
    i, j: integer;
begin
 if(s = 'малый зал') then
 begin
 L := TStringList.Create;
 L.LoadFromFile('places2.dat');
 for i := 0 to L.Count - 1 do
  G.Rows[i].CommaText := L.Strings[i];
 L.Free;
 for i := 0 to R do
  for j := 0 to C do
   result[i, j] := StrToInt(G.Cells[j, i]);
   end
   else
   L := TStringList.Create;
 L.LoadFromFile('places.dat');
 for i := 0 to L.Count - 1 do
  G.Rows[i].CommaText := L.Strings[i];
 L.Free;
 for i := 0 to R do
  for j := 0 to C do
   result[i, j] := StrToInt(G.Cells[j, i]);
end;
это отрисовывается

это метод где я беру из ячейки данные 

procedure TForm5.sDBGrid2CellClick(Column: TColumn);
var
i:integer;
begin
i:=sDBGrid2.SelectedIndex;
 s :=sDBGrid2.DataSource.DataSet.Fields.Fields[i].Value;
 GetMatrix;
end;
6elka вне форума Ответить с цитированием
Старый 06.06.2018, 09:02   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
function TForm5.GetMatrix: TMatrix;
var L: TStringList;
    i, j: integer;
begin
 if(s = 'малый зал') then begin
   L := TStringList.Create;
   ...
   L.Free; //У вас больше НЕТ ОБЪЕКТА(переменная осталась, и в ней теперь какой-то "мусор")
//P.S. в таких случаях (если переменная допускает малейшую возможность дальнейшего использования хотя бы теретически) рекомендуется 
FreeandNil(L);  { смотри} https://www.gunsmoker.ru/2009/04/freeandnil-free.html
   ....
 end
 else
   L := TStringList.Create;//и в таком случае(см. первое замечание) это не работает (else как никак)
   
 L.LoadFromFile('places.dat'); // а теперь читаем из файла, НО КУДА?.. (см. туда же)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.06.2018 в 09:08.
evg_m вне форума Ответить с цитированием
Старый 06.06.2018, 09:14   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
i:=sDBGrid2.SelectedIndex;
 s :=sDBGrid2.DataSource.DataSet.Fields.Fields[i].Value;
чревато (не всегда конечно и этим опасно).
НИКТО не гарантирует, что колонки Grid и поля НД будут иметь СОГЛАСОВАННЫЕ индексы.
банальное перетаскивание колонок Grid-a.
Код:
s:=sDBGrid2.Columns.Item{column?}[i].Field.As...
Цитата:
Код:
   result[i, j] := StrToInt(G.Cells[j, i]);
какой такой result ?
вы его создали? result:=TMatrix.Create....
вы его присвоили из параметров? result:=xxx; Но в этом случае разумнее просто использовать оный объект. xxx[i,j]:=...
вы его присвоили из глобальных переменных? тоже самое замечание о разумности.
да и использование глобальных переменных смотри https://www.gunsmoker.ru/2011/04/blog-post.html
Цитата:
Код:
function TForm5.GetMatrix: TMatrix;
var L: TStringList;
    i, j: integer;
begin
 if(s = 'малый зал') then // смотри замечание(и ссылку!!!) о глобальных переменных
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.06.2018 в 09:29.
evg_m вне форума Ответить с цитированием
Старый 06.06.2018, 09:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
  else
  begin
   L := TStringList.Create;
 L.LoadFromFile('places.dat');
 for i := 0 to L.Count - 1 do
  G.Rows[i].CommaText := L.Strings[i];
 L.Free;
 for i := 0 to R do
  for j := 0 to C do
   result[i, j] := StrToInt(G.Cells[j, i]);
  end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отображение файла в память fog_ Общие вопросы Delphi 5 09.09.2016 14:37
Отображение файла по битам. ruslansh Помощь студентам 1 28.02.2013 08:24
Занести информацию из текстового файла в StrinGrid Аркадик Общие вопросы Delphi 2 12.06.2011 14:37