Главная страница
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.084 c
15-1159162625
Ega23
2006-09-25 09:37
2006.10.15
С Днём рождения! 25 сентября


15-1158684060
GanibalLector
2006-09-19 20:41
2006.10.15
Джеф Раскин "Интерфейс"


1-1155619531
el-eXtremo
2006-08-15 09:25
2006.10.15
есть ли модули по редактированию xml


15-1157982846
Desdechado
2006-09-11 17:54
2006.10.15
Смайлики в Миранде


2-1159157891
vodvorezlaya
2006-09-25 08:18
2006.10.15
Как видимые компоненты на проге перемещать?