Форум: "Компоненты";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
Внизссылка на объект в строке 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.044 c