Текущий архив: 2008.05.11;
Скачать: CL | DM;
Вниз
удаление ранее созданных динамических объектов Найти похожие ветки
← →
Zloi_Funtik (2008-04-09 16:30) [0]скажите, пожалуйста, каким образом удалить некторое, каждый раз различное число динамически созданных мемо полей? Спасибо.
← →
MBo © (2008-04-09 16:35) [1]А как ты их создавал?
← →
Сергей М. © (2008-04-09 16:37) [2]Что есть "удалить" ?
← →
{RASkov} © (2008-04-09 16:38) [3]> [0] Zloi_Funtik (09.04.08 16:30)
Free;
> А как ты их создавал?
Всё равно фри :) Components[i].Free
> Что есть "удалить" ?
Фри :)
← →
Zloi_Funtik (2008-04-09 16:40) [4]вот в этом фрагменте создаю:
for k:=0 to E1 do begin
nach_left:=nach_left+87 ;
for i:=0 to E2 do
with TMemo.Create(Self)
do begin
OnDblClick := YourOnChangeHandler;
Parent := Self;
Left := nach_left;
Top := nach_top;
Width:=86;
height:=45;
BorderStyle:=bsNone;
nach_top:=nach_top+46;
if i=E2 then nach_top:=80;
end;
end;
после закрытия формы нужно, чтобы они все удалились.
← →
Сергей М. © (2008-04-09 16:40) [5]
> {RASkov} © (09.04.08 16:38) [3]
> > Что есть "удалить" ?
>
> Фри :)
>
Фри = Освободить
)
← →
Palladin © (2008-04-09 16:40) [6]фсе чудесатее и чудесатее...
← →
DVM © (2008-04-09 16:41) [7]
> Zloi_Funtik (09.04.08 16:40) [4]
а почему у тебя все переменные такие матерные? Нах сплошной.
nach_left; - это нах влево?
← →
clickmaker © (2008-04-09 16:42) [8]
> OnDblClick := YourOnChangeHandler;
где-то я это уже видел... )
> после закрытия формы нужно, чтобы они все удалились
она сама их порубает (если сделаешь форме Free, а не просто Close)
> Фри = Освободить
Фри = картофель )
← →
Сергей М. © (2008-04-09 16:43) [9]
> после закрытия формы нужно, чтобы они все удалились
Для решения задачи нужно знать, кто такой Self, которого ты упомянул в строчке
> with TMemo.Create(Self)
← →
Kolan © (2008-04-09 16:50) [10]> которого ты упомянул в строчке
Дай угодаю — Форма.
← →
{RASkov} © (2008-04-09 16:51) [11]> [4] Zloi_Funtik (09.04.08 16:40)
Это что за самодеятельность? :)
Мы из Мемо сделам все, что угодно?
А у тебя случаем это все еще к БД не прикручено?
:о)
Я не прикалываюсь, но просто интересно что талкает человека на такие подвиги...
← →
clickmaker © (2008-04-09 16:55) [12]это стринггрид из мемо?
← →
Zloi_Funtik (2008-04-09 16:56) [13]нет, к БД не прикрученно. мне сейчас нужно, чтобы все поля мемо которые создавались динамически, после закрытия формы удалялись. Интерфейс делаю.
← →
Zloi_Funtik (2008-04-09 16:57) [14]
> clickmaker © (09.04.08 16:55) [12]
> это стринггрид из мемо?
Совершенно верно! :)
фри не подходит, удаляет всю форму :(
← →
{RASkov} © (2008-04-09 16:57) [15]> [14] Zloi_Funtik (09.04.08 16:57)
> фри не подходит, удаляет всю форму :(
:) Не так готовишь :)
← →
clickmaker © (2008-04-09 16:58) [16]
> [14] Zloi_Funtik (09.04.08 16:57)
эээ... а почему готовый не подошел?
← →
{RASkov} © (2008-04-09 16:59) [17]> [14] Zloi_Funtik (09.04.08 16:57)
У тебя владелец всех Мем форма? Вот форму и разрушай, а она "убьет" всех твоих мем и еще все - чем владеет...
← →
{RASkov} © (2008-04-09 16:59) [18]+10 к [16]. Автор ответь :)
← →
Zloi_Funtik (2008-04-09 17:01) [19]
> эээ... а почему готовый не подошел?
мне нужно было, чтобы в каждой ячейки было три слова, с которыми можно работать, в стрингриде запись идет в одну БООЛЬШУЮ строку :))
← →
Kolan © (2008-04-09 17:02) [20]> Автор ответь :)
Дай угодаю, там нет многострочности.
← →
Kolan © (2008-04-09 17:03) [21]> было три слова
Гугли «многострочный stringGrid».
ЗЫ
Гыыы, угодал…
← →
Kolan © (2008-04-09 17:03) [22]угадал
← →
clickmaker © (2008-04-09 17:03) [23]
> [20] Kolan © (09.04.08 17:02)
продай телепатор )
← →
Zloi_Funtik (2008-04-09 17:04) [24]
> У тебя владелец всех Мем форма? Вот форму и разрушай, а
> она "убьет" всех твоих мем и еще все - чем владеет...
так мне эта форма ещё нужна :)
если её убиваешь, то всё, хана наступает :)
← →
Kolan © (2008-04-09 17:06) [25]> если её убиваешь, то всё, хана наступает :)
Дайте еще по гадать. Он наверно их не 1 раз создает, а несколько. И Вот они у него слоями наслаиваются и наслаиваются, вот он и хочет их поудалять…
← →
{RASkov} © (2008-04-09 17:06) [26]> [19] Zloi_Funtik (09.04.08 17:01)
> мне нужно было, чтобы в каждой ячейки было три слова, с
> которыми можно работать, в стрингриде запись идет в одну
> БООЛЬШУЮ строку :))
Чушь....
Этим Мемам ох как и далеко еще до примитивного грида, а примитивный Грид в одном шаге к многострочности....
← →
Kolan © (2008-04-09 17:06) [27]Автор, воспользуйся StringGrid"ом.
← →
clickmaker © (2008-04-09 17:07) [28]
> [19] Zloi_Funtik (09.04.08 17:01)
в OnDrawCell можно рисовать их хоть разными цветами и хоть по диагонали
← →
{RASkov} © (2008-04-09 17:09) [29]> [14] Zloi_Funtik (09.04.08 16:57)
> фри не подходит, удаляет всю форму :(
Кому делаешь Free тому и хана. Ты делаешь это форме, и вот поэтому ей кирдык, ...делай своим мемам фри.
А лучше иди искать по многострочным гридам.... и идти далеко не нужно - на этом сайте есть статья.
← →
Zloi_Funtik (2008-04-09 17:10) [30]
> Автор, воспользуйся StringGrid"ом.
А как мне там реализовать многострочность в таком случае? и как мне обращаться к каждой строке и работать с ними?
Из всего что я делаю, мне осталось только сделать удаление мемов и всё будет в принципе готово...может все таки их как-то можно удалить?
← →
Kolan © (2008-04-09 17:14) [31]> А как мне там реализовать многострочность в таком случае?
Еще раз «Гугли „многострочный stringGrid“».
> Из всего что я делаю, мне осталось только сделать удаление
> мемов и всё будет в принципе готово
Вот пример того, про что говорит фаулер. Написав этот кривой и косой код он теперь за него будет горой стоять.
> может все таки их как-то можно удалить?
Считай что нет. Выбрось всю эту хрень и сделай понормальному.
ЗЫ
Заты тперь ты умеешь создавать контролы динамически!
← →
{RASkov} © (2008-04-09 17:15) [32]> [30] Zloi_Funtik (09.04.08 17:10)
> может все таки их как-то можно удалить?
Free;
...
Сделай хоть некий менеджер твоих Мем.... у возложи на него создание и удаление твоего создания
А что значит:
> и как мне обращаться к каждой строке и работать с ними?
?
← →
Плохиш © (2008-04-09 17:17) [33]
> Из всего что я делаю, мне осталось только сделать удаление
> мемов и всё будет в принципе готово...может все таки их
> как-то можно удалить?
Можно, а как написано в книжке "Делфи за 21 секунду для полных ..кхм.. чайников".
← →
Zloi_Funtik (2008-04-09 17:20) [34]{RASkov} ©
> и как мне обращаться к каждой строке и работать с ними?
я спрашивал относительно стринггрида.
← →
clickmaker © (2008-04-09 17:32) [35]
> [34] Zloi_Funtik (09.04.08 17:20)
StringList.Text := Grid.Cells[c,r];
// работаем
Grid.Cells[c,r] := StringList.Text;
редактировать - Ctrl + Enter
Рисовать - OnDrawCell
← →
{RASkov} © (2008-04-09 17:32) [36]> [34] Zloi_Funtik (09.04.08 17:20)
> я спрашивал относительно стринггрида.
т.е. в ячейки грида тебе построчность как таковая не нужна, т.е. только для визуального отображения текста в ячейки в несколько строк?
Если "да", то однозначно бери в инете пример по многострочному гриду.... их полно там...
← →
Gydvin © (2008-04-09 17:41) [37]а я говорил создай массив tmemo"в...
либо в качестве парента твоих динамических мемов указывай какуюнить панельку на которой больше нечего не лежит напремер panel1
....
а затемpanel1.controls[x].free;
> Вот пример того, про что говорит фаулер. Написав этот кривой
> и косой код он теперь за него будет горой стоять.
Зато сам! ;0)
Все учатся....
← →
Kolan © (2008-04-09 17:44) [38]> а я говорил создай массив tmemo"в…
Вот кто извращенец!
← →
{RASkov} © (2008-04-09 17:44) [39]> [37] Gydvin © (09.04.08 17:41)
> а затем
> panel1.controls[x].free;
Просто panel1.free; А у мемо"sов владелец и родитель эта самая панель...
← →
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.66 MB
Время: 0.018 c