Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

ссылка на объект в строке StringGrid`а   Найти похожие ветки 

 
Creative   (2006-02-28 11:20) [0]

В обработчике StringGrid`а  onDoubleClick заложены две процедуры:
1. если строка, на которой стоит курсор, пустая, то открывается маленькая форма с полями ввода и при их заполнении и нажатии ОК, создается объект класса TThing (например), его поля отображаются с соотв. ячейках таблицы и  еще - в  текущую строку таблицы добавляется ссылка на этот объект:
Form1.MyGrid.Objects[0, row]:=NewThing;

2. если строка уже заполнена, то при Double Click`е тоже открыватся форма, но она уже содержит значения полей объекта, связанного с этой строчкой. Предполагается, что если эти значения изменить и нажать ОК, то они обновятся в таблице. обращение к объекты происходит следующим образом:
with TThing(Form1.MyGrid.Objects[0, row]) do
 begin
  ...
 end;

Но на этой строке программа вылетает.

Уточнение: если написать в чистом виде
Form1.MyGrid.Objects[0, row]
программа даже не скомпилится, написав, что row - ubdeclared identifier

Если изголиться и написать
var
a: integer;
..........
Form1.MyGrid.Objects[0, a]
то компилятор это проглотит, но при повторном обращении к объекту (при редактировании) программа вылетит. Отладчик показывает, что
TThing(Form1.MyGrid.Objects[0, row])  = nil, то есть при создании объекта никакая ссылка на него с строку не добавилась. Объясните почему? Что я делаю неправильно?


 
ЮЮ ©   (2006-02-28 11:47) [1]


> никакая ссылка на него с строку не добавилась


Она могла и добавиться. вопрос в том, чему был равен row в момент присвоения
Form1.MyGrid.Objects[0, row]:=NewThing;

Может тогда уж

MyGrid.Objects[0, MyGrid.Row]:=NewThing;

P/S. Если этот код в методах TForm1, то Form1. - лишнее


 
Creative   (2006-02-28 11:53) [2]

> ЮЮ ©   (28.02.06 11:47) [1]

>  вопрос в том, чему был равен row
> в момент присвоения
> Form1.MyGrid.Objects[0, row]:=NewThing;

function NewThing: TThing;
begin
 result:= TThing.Create;
end;

класс TThing описан по всем правилам

> Может тогда уж
> MyGrid.Objects[0, MyGrid.Row]:=NewThing;

Не помогло


 
ЮЮ ©   (2006-02-28 12:11) [3]

Не помогло
Не верю

procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
 if StringGrid1.Objects[0, StringGrid1.Row] = nil then begin
   Caption := "Создан новый Объект";
    StringGrid1.Objects[0, StringGrid1.Row] := TStringList.Create;
 end
 else begin
   TStringList(StringGrid1.Objects[0, StringGrid1.Row]).Add("");
   Caption :=
     "Объект существует. " +
     IntToStr(TStringList(StringGrid1.Objects[0, StringGrid1.Row]).Count) +
     " DblClick";
 end;

end;



Страницы: 1 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.06 c
10-1124372214
Сергей (аноним)
2005-08-18 17:36
2006.10.15
Свой OLE-объект в Word е


2-1159385485
redlord
2006-09-27 23:31
2006.10.15
объекты в листбоксе


3-1155705179
vodvorezlaya
2006-08-16 09:12
2006.10.15
Использование даты и времени


2-1159263649
Olga_85
2006-09-26 13:40
2006.10.15
преобразование данных


2-1159183904
XTD
2006-09-25 15:31
2006.10.15
Как работать с USB?