Текущий архив: 2008.05.11;
Скачать: CL | DM;
Вниз
удаление ранее созданных динамических объектов Найти похожие ветки
← →
Zloi_Funtik (2008-04-09 17:54) [40]С панелькой всё работает как надо :)
Спасибо!
← →
Gydvin © (2008-04-09 18:01) [41]
> Kolan © (09.04.08 17:44) [38]
> > а я говорил создай массив tmemo"в…Вот кто извращенец!
даа это ЙА. :)
а массив для того чтоб отделить наших тараканов от статистических тараканов
> {RASkov} © (09.04.08 17:44) [39]
> > [37] Gydvin © (09.04.08 17:41)> а затем> panel1.controls[x].
> free;Просто panel1.free; А у мемо"sов владелец и родитель
> эта самая панель...
а может ненужно ему убивать панель )
← →
{RASkov} © (2008-04-09 18:08) [42]> [41] Gydvin © (09.04.08 18:01)
> а может ненужно ему убивать панель )
А что с ней с пустой делать-то? :)
Сейчас попробую угадать - создать на ней очередных Мемосов...
Это типа Клир такой
:о)
← →
Gydvin © (2008-04-09 18:10) [43]возможно и так :0)
← →
Kolan © (2008-04-09 18:19) [44]> С панелькой всё работает как надо :)
> Спасибо!
RASkov, Gydvin — молодцы, наставили Фунтика на путь истинный.
ЗЫ
она заставляла его обманывать детей, выпрашивая у них деньги на домики для бездомных поросят.
← →
Gydvin © (2008-04-09 18:30) [45]
> RASkov, Gydvin — молодцы, наставили Фунтика на путь истинный
да не переживай ты так - одумается... когда нибуть. ;0)
И встретит своего доброго клоуна
← →
{RASkov} © (2008-04-09 18:53) [46]> [44] Kolan © (09.04.08 18:19)
Я никого никуда не наставлял.... Если человек выбрал не верный, хотя ему всю дорогу про верный путь говорили, и я в том числе, то это его право...
Упрямый, настырный... но иногда и это полезно.... а чаще становится привычкой.... так что если твой Фунтик не одумается, то всю дорогу будет все по два раза делать :о)
← →
{RASkov} © (2008-04-09 18:56) [47]> хотя ему всю дорогу про верный путь говорили
Может не совсем так, но альтернатива была... т.е. два пути на выбор... Фунтик упрямо шел точно не по тому пути...
← →
Zloi_Funtik (2008-04-09 19:15) [48]Ребят, спасибо большое! Респект и от Фунтика и от Клоуна и злой тётушки :))))
← →
Kolan © (2008-04-09 19:21) [49]> твой Фунтик не одумается
Сам ты Белодонна. :)
← →
Zloi_Funtik (2008-04-09 20:02) [50]ХА, а ведь с панелью точно такие же проблемы начались, если её делать статической, то после первого удаления её при обращении к этой форме возникает ошибка. А если делать её динамически, то так же как и с мемо удалить её не получается никак...:(
← →
Gydvin © (2008-04-09 20:17) [51]перепроверяй код где-то у тя ошибка
← →
Zloi_Funtik (2008-04-09 20:27) [52]делал так же как и с мемо,
for i:=0 to E2 do
with tmemo.Create(Self)
do begin
OnDblClick := YourOnChangeHandler;
Parent := Self;
НО мне нужно, чтобы удаление происходило на событие закрытия окна. С мемо одному из событий присваивалась своя функция в которой и будет происходить обработка события для каждого мемо поля. А как сделать для панели, если событие закрытия окна не относится к событиям связанным с панелью?
← →
Zloi_Funtik (2008-04-09 20:32) [53]вот процедура закрытия формы:
procedure TSostoyaniya.FormClose(Sender: TObject;
var Action: TCloseAction);
var
i:integer;
begin
with Sender as Tpanel
do
Tpanel(Sender).free;
end;
Когда закрываешь форму, то вылетает ошибка :(
← →
Amoeba © (2008-04-10 00:12) [54]
> Tpanel(Sender).free;
Ну и что здесь выступает в роли Sender? Какие основания для такого приведения типов?
Попробуй заменить это на
(Sender as TPanel).Free
и посмотри, что получится.
← →
Loginov Dmitry © (2008-04-10 07:51) [55]> Когда закрываешь форму, то вылетает ошибка :(
А должно что вылетать? "Убийся аб стену"? Нет ведь! Так что радуйся! Дельфя седня цензурная! :)
← →
Loginov Dmitry © (2008-04-10 07:56) [56]1. Для вызова Free не нужно делать приведение к классу!
2. Уничтожение формы в ее обработчиках зачастую чревато
3. Для того, чтобы после вызова FormClose форма уничтожилась, следует воспользоваться аргументом Action
4. Откуда вообще здесь TPanel взялся?
← →
{RASkov} © (2008-04-10 09:14) [57]> [55] Loginov Dmitry © (10.04.08 07:51)
> А должно что вылетать? "Убийся аб стену"?
В его случае именно это и должно "вылетать" :(
:)
← →
Kolan © (2008-04-10 10:33) [58]> Попробуй заменить это на
> (Sender as TPanel).Free
> и посмотри, что получится.
Ничего не измениться Free — статический метод TObject. Как не приводи вызовется одно и тоже.
← →
Плохиш © (2008-04-10 10:59) [59]
> Kolan © (10.04.08 10:33) [58]
> > Попробуй заменить это на
> > (Sender as TPanel).Free
> > и посмотри, что получится.
>
> Ничего не измениться Free — статический метод TObject. Как
> не приводи вызовется одно и тоже.
А оператор as тут для прикола вставили?
← →
Kolan © (2008-04-10 11:07) [60]> А оператор as тут для прикола вставили?
А типа для проверки… Лучше уж ShowMessage(Sender.ClassName) вставить…
← →
Семеныч (2008-04-10 11:26) [61]Я офигеваю, дорогая редакция. Полсотни постов о чем угодно, но только не о том, о чем вопрос.
> Zloi_Funtik
Для того, чтобы удалить объект, нужно вызвать его метод Free. Чтобы вызвать метод Free, нужно иметь ссылку на объект. А чтобы иметь эту ссылку, ее надо получить при создании объекта и запомнить в переменной.
Пример:var
M: TMemo;
begin
M := TMemo.Create(Self);
with M do
begin
// Здесь то же, что у Вас
end;
После этого ссылка на объект хранится в переменной M и если теперь написать M.Free, то объект будет уничтожен. А в Вашем коде эта ссылка нигде не запоминалась, поэтому и было непонятно, а что же нужно удалять.
Если нужно создавать и удалять несколько оъектов, то надо запоминать ссылку на каждый из них. Для этого можно использовать массив или любой другой список, но в Вашем случае удобно использовать уже готовый список под названием TComponentList.
type
TForm1 = class(TForm)
...
private
List: TComponentList;
...
end;
1. В OnCreate надо список создать: List := TComponentList.Create(True);
2. В OnDestroy список надо уничтожить вместе со всеми Memo: List.Free;
3. При создании Memo его надо добавить в список:
var
M: TMemo;
begin
M := TMemo.Create(nil);
List.Add(M);
with M do
begin
// Здесь то же, что у Вас
end;
end;
4. После этого в любом месте, где Вам надо уничтожить сразу все Memo, Вы просто пишете List.Clear. Список очистится и сам уничтожит все Memo.
← →
{RASkov} © (2008-04-10 11:49) [62]Можно этот List: TComponentList; из [61] "развить" до того что он сам будет создавать эти мемы, например так:
List.CreateGridTo(AParent: TWinControl; ColCount, RowCount: Integer);
и еще много чего рутинного можно с помощью менеджера делать... нечто об этом я и говорил в [32]...
Но.... опять же. Помоему слихвой автору достаточно стандартного СтрингГрида... и ни к чему все эти извращения с мемами, листами...менеджерами...
И по ресурсоемкости +, да много еще плюсов.... а на каждый + к стринггриду идет минус к мемам.... Автор одумайся, Колян переживает :)
← →
Zloy_Funtik (2008-04-14 13:24) [63]Делаю по аналогии примера :
> var
> M: TMemo;
> begin
> M := TMemo.Create(Self);
> with M do
> begin
> // Здесь то же, что у Вас
> end;
при создании панели, на которой находятся все мемо такой способ работает :)
Но при создании мемо полей, создается одно мемо поле :(
Выглядит вот так:
m:=Tmemo.Create(Self);
for k:=0 to E1 do
begin
nach_left:=nach_left+87 ;
for i:=0 to E2 do
with m
do begin
OnDblClick := YourOnChangeHandler;
Parent := z;
Left := nach_left;
Top := nach_top;
Width:=86;
height:=45;
BorderStyle:=bsNone;
nach_top:=nach_top+46;
if i=E2 then nach_top:=0;
end;
end;
В этом случае создается одно мемо поле с последними координатами, т.е. последний проход цикла :(
← →
{RASkov} © (2008-04-14 13:34) [64]> [63] Zloy_Funtik (14.04.08 13:24)
> В этом случае создается одно мемо поле с последними координатами,
> т.е. последний проход цикла :(
Дык тыж сам один его(Мемо) создал, а потом издеваешься над ним в циклах...
Что-то до тебя вообще ничего не доходит :(
:)
← →
MsGuns © (2008-04-14 16:33) [65]А почему нельзя создать одну-единственную панель (причем в дизайне, ессно), которую показывать точно в прямоугольнике активной ячейки стрингрида (если уж так непременно хочется стрингрид), а на ней расположить три эдита, куда записывать перед показом значения трех переменных, соответствующих строке-ячейке ? Переменные можно завернуть в рекорды. Рекорды (точнее, указатели на них) в свою очередь засунуть в список (списки), "привязанный" к источнику данных, из которого заполняется сетка.
Визуально можно сделать так, что эта панелька будет смотреться точно как ячейка стрингрида
← →
Gydvin © (2008-04-14 17:17) [66]
> Семеныч (10.04.08 11:26) [61]
ну и чем этот пример лучше использования массива компонентов или уже встроенного массива наследников?
Автор сам чего-то намутил в своем коде.
> А оператор as тут для прикола вставили?
вообщето is нужен :)
← →
Семеныч (2008-04-14 20:14) [67]> Gydvin © (14.04.08 17:17) [66]
> ну и чем этот пример лучше использования массива компонентов или уже
> встроенного массива наследников?
С удовольствием отвечу на Ваш вопрос, если Вы поясните, что Вы имеете в виду под:
а). массивом компонентов;
б). встроенным массивом наследников.
← →
Zloy_Funtik (2008-04-14 20:18) [68]Всё, сделал, работает :))) Всем спасибо!
← →
Gydvin © (2008-04-15 07:14) [69]
> Семеныч (14.04.08 20:14) [67]
a) MemoArray: array of TMemo
b) Panel1.Controls[], Panel1.ControlCount
Ну это так в качестве общего развития (моего есно)
← →
Семеныч (2008-04-15 08:05) [70]> Gydvin © (15.04.08 07:14) [69]
а). Динамический массив в данном случае просто менее удобен, с ним будет больше ручной писанины. Со списком TComponentList в код нужно добавить ровно 5 коротеньких строчек (объявление в классе, создание в конструкторе, уничтожение в деструкторе, добавление в список, очистка списка. Попробуйте уложиться в те же 5 строк с массивом - сами все увидите.
б). Какие же это наследники? Это дочерние контролы. И ограничение - все должно лежать на одной панели. И очищать не так удобно (особенно, если на этой панели лежит еще что-то). Да и к чему здесь вообще какие-то панели? не нужны они здесь вовсе. Использование визуального контейнера вместо невизуального - очень дурная практика.
← →
Gydvin © (2008-04-15 08:44) [71]а) Понятно. Впринципе согласен.
Б)
> Какие же это наследники? Это дочерние контролы.
Да дочерние.
> И ограничение - все должно лежать на одной панели. И очищать
> не так удобно (особенно, если на этой панели лежит еще что-
> то). Да и к чему здесь вообще какие-то панели? не нужны
> они здесь вовсе. Использование визуального контейнера вместо
> невизуального - очень дурная практика.
Возможно. Зависит от поставленной задачи. Имхо
Страницы: 1 2 вся ветка
Текущий архив: 2008.05.11;
Скачать: CL | DM;
Память: 0.62 MB
Время: 0.024 c