Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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».

ЗЫ
 Гыыы, угодал&#133


 
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 раз создает, а несколько. И Вот они у него слоями наслаиваются и наслаиваются, вот он и хочет их поудалять&#133


 
{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"в&#133

Вот кто извращенец!


 
{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 тут для прикола вставили?

А типа для проверки&#133 Лучше уж ShowMessage(Sender.ClassName) вставить&#133


 
Семеныч   (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
15-1206604337
operator
2008-03-27 10:52
2008.05.11
Автоматическая генерация диаграммы классов и типов.


15-1206673504
borisich
2008-03-28 06:05
2008.05.11
нужно ли идти в армию...


2-1208170266
AndrewG
2008-04-14 14:51
2008.05.11
memo


15-1206945625
TUser
2008-03-31 10:40
2008.05.11
Чтение файлов


15-1206894166
garik
2008-03-30 20:22
2008.05.11
Зацените?