|
Вопрос # 146/ вопрос открыт / |
|
Уважаемые!
Подскажите, как можно скопировать строки целиком из одного StringGrid-a в другой.
Например я в цикле делаю копирование нужных мне строк, всё копируется, но при дестрое формы я получаю Access Violation. Оба грида - TAdvStringGrid (TMS Software), содержат в ячейках объекты (графику, всплывающие подсказки, цветовое оформление). Понятно, что присваивание происходит только указателей на объекты и Грид при вызове деструктора вызывает Free для своих объектов. А так как у меня после вызова Assign два грида ссылаются на один и тот же объект, убить его попытаются они оба, и второй грид за такую пошлость получит AV. Может кто подскажет, как решить проблему? ИС примерчиком, если можно...
Приложение: Переключить в обычный режим-
- for i:= 1 to Grid_1.RowCount -1 do
-
- begin
- Inc(m);
- Grid_2.RowCount:= m;
- Grid_2.Rows[m-1].Assign(Grid_1.Rows[i]);
- end;
 |
Вопрос задал: Discorezzz (статус: Посетитель)
Вопрос отправлен: 27 октября 2006, 19:03
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Новаковский Юрий Аврамович
Здравствуйте, Discorezzz!
Перед вызовом метода Free необходимо ссылкам
на все oбъекты в одном из гридов присвоть nil.
 |
Ответ отправил: Новаковский Юрий Аврамович (статус: 4-ый класс)
Время отправки: 30 октября 2006, 11:58
Оценка за ответ: 5
Комментарий к оценке: Спасибо за помощь! Попробую так. Правда я сделал по другому - текст через Assign, а объекты (благо их немного) через промежуточную переменную. Достаточно быстро получается - 46000 позиций одного грида секунды за 2 перелетают в другой.
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 1 ноября 2006, 23:49; участников в обсуждении: 1.
|
Discorezzz (статус: Посетитель), 1 ноября 2006, 23:49 [#1]:
С небольшой поправкой заработало так -
procedure TForm1.FormDestroy(Sender: TObject);
var
iCol,iRow: Integer;
begin
for iRow:= 0 to Grid_1.RowCount -1 do
for iCol:= 0 to Grid_1.ColCount -1 do
Grid_1.Rows[iRow].Objects[iCol]:=nil;
end;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|