Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 05.06.2018, 21:33   #1
6elka
Новичок
 
Регистрация: 20.05.2017
Сообщений: 1
Репутация: 10
По умолчанию отображение в 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, 10:02   #2
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,654
Репутация: 2097
По умолчанию

Код:

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 в 10:08.
evg_m вне форума   Ответить с цитированием
Старый 06.06.2018, 10:14   #3
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,654
Репутация: 2097
По умолчанию

Код:

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 в 10:29.
evg_m вне форума   Ответить с цитированием
Старый 06.06.2018, 10:18   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,882
Репутация: 5228
По умолчанию

Код:

  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 на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


16:43.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru