Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];

Вниз

Как программно уничтожать программно созданные компоненты?   Найти похожие ветки 

 
Jony   (2002-06-25 15:22) [0]

Программно создаю кнопки (SpeedButton). В определенный момент их нужно уничтожить. Создаваться то они создаются. А вот как их разрушить? Любая ссылка на них (кроме самого процесса создания) вызывает ошибку "Идентификатор не определен".


 
sdram   (2002-06-25 15:27) [1]

присвой
SpeedButton.parent := Form1
Form1 - имя формы, а удалить вызови SpeedButton.Free


 
VAleksey   (2002-06-25 15:36) [2]

а nil не нужен ?
> sdram © (25.06.02 15:27)



 
MBo   (2002-06-25 15:38) [3]

>Jony
при создании вноси объекты, например, в список

but:=tspeedbutton.create(self);
...
ButList.Add(but);
...
TSpeedButton(ButList[i]).Free;


 
Jony   (2002-06-25 16:23) [4]

>MBo
Спасибо большое, вроде работает. Но сразу возникает вопрос. Список постояннго в динамике. Как отловить именно тот итем, который мне нужно уничтожить? Я что-то не нашел свойства в TList, по которому можно было бы определить нужный объект.


 
MBo   (2002-06-25 16:29) [5]

имена им уникальные присваивай
тогда можно и без списка, FindComponent


 
Jony   (2002-06-25 16:51) [6]

Я и присваиваю им уникальные имена, но если без списка, то любая ссылка на эти имена и выдает ошибку. Если FindComponent позволяет делать что-то другое, то опять же ни в хелре, н в книгах я об єтой функции ничего не нашел.


 
Jony   (2002-06-25 16:51) [7]

Я и присваиваю им уникальные имена, но если без списка, то любая ссылка на эти имена и выдает ошибку. Если FindComponent позволяет делать что-то другое, то опять же ни в хелпе, ни в книгах я об этой функции ничего не нашел.


 
MBo   (2002-06-25 17:07) [8]

плохо искал, в хелпе есть
var c:tcomponent;
c:=FindComponent("SPButton1");
if c<>nil then c.free;


 
Jony   (2002-06-25 17:40) [9]

Что-то не получается. Я пытаюсь создать в проекте что-то вроде TaskBar. Кнопки я создаю в главной форме при открытии формы, а уничтожать их нужно при закрытии формы, т.е. в самой форме, для которой создается кнопка. FindComponent не находит кнопку ни саму, ни с формой. А создать кнопку в FormCreate самой формы тоже не получается не находит программа ее определения, даже если сунешь его в саму процедуру.


 
MBo   (2002-06-25 17:47) [10]

как создаешь? как ищешь?


 
Игорь Шевченко   (2002-06-25 17:54) [11]

Jony © (25.06.02 17:40)

Код бы не помешал


 
Anatoly Podgoretsky   (2002-06-25 18:02) [12]

MBo © (25.06.02 17:07)

Это можно сократить до FindComponent("SPButton1").free;


 
Fiend   (2002-06-25 18:06) [13]

а зачем их ручками уничтожать.
Я так понял, что ты их динамикчески создаёшь. А раз так то в Create(Owner) укажи свою форму, которая когда закроется, грохнит всех кем владеет.


 
Jony   (2002-06-25 18:07) [14]

В главной форме при открытии нужной формы
try
frmMain.btnReestr := TSpeedButton.Create(frmMain.tbTask);
with frmMain do begin
// задание свойств
end;
except
end;


Сама btnReestr определена в var главной формы.
здесь все нормально.
А вот при закрытии в frmReestr.destroy
var
c: TComponent;
begin
c := FindComponent("btnFPrxRstr");

не находит она этот компонент (с = nil). Вариант
c := FindComponent("frmWWMMain.btnFPrxRstr");
тоже не проходит.

Извините, нужно убегать. Продолжим завтра.


 
Fiend   (2002-06-25 18:12) [15]

а это потому, что у тебя новый батон не форме принадлежит а frmMain.tbTask, следовательно если ты реально хочешь его найти, то вызывать FindComponent нада у frmMain.tbTask а не у формы


 
Jony   (2002-06-26 09:58) [16]

to Fiend:
Не проходит и такая детализация, пробовал.


 
Fiend   (2002-06-26 10:44) [17]

а шо ты за имя такое интересное пишешь "frmWWMMain.btnFPrxRstr".
и ваще, я тебе уже сказал, шо уничтожать их не надо, укажи просто кому они принадлежат, т.е. владельца(читай меня выше), и он их сам деструктурирует


 
Jony   (2002-06-26 11:01) [18]

Владелец у них - главная форма приложения, а уничтожаться они должны при закрытии той формы, с открытием которой они создаются.
PS. В попыхох не переделал реальный код второй части. В общем сейчас все у меня выглядит следующим образом:

В главной форме при открытии нужной формы
try
frmMain.btnReestr := TSpeedButton.Create(frmMain.tbTask);
with frmMain do begin
// задание свойств
end;
except
end;


А вот при закрытии в frmReestr.destroy
var
c: TComponent;
begin
c := FindComponent("btnReestr");
end;
не находит она этот компонент (с = nil).
Варианты
c := FindComponent("frmMain.btnFPrxRstr");
или
c := FindComponent("frmMain.tbTask.btnFPrxRstr");
тоже не проходят.


 
Fiend   (2002-06-26 11:12) [19]

Сделай так

В главной форме при открытии нужной формы
try
frmMain.btnReestr := TSpeedButton.Create(Указатель на "нужную" форму);
with frmMain(здесь надо бы добавить .btnReestr если задаёшь св-ва кнопки) do begin
// задание свойств
в задании свойств не забудь указать Parent:= frmMain.tbTask; чтобы кнопка отображалась на этой панели
end;
except
end;

А следующее тебе не нуна ваще, т.к. владелец тех созданных кнопок - есть новое окно, след-но, када оно будет уничтожаться, то уничтожит всех потомков

А вот при закрытии в frmReestr.destroy
var
c: TComponent;
begin
c := FindComponent("btnReestr");
end;не находит она этот компонент (с = nil).
Варианты
c := FindComponent("frmMain.btnFPrxRstr");
или
c := FindComponent("frmMain.tbTask.btnFPrxRstr");
тоже не проходят.

и не надо ничё искать и уничтожать руками


 
Jony   (2002-06-26 11:31) [20]

to Fiend
Большое спасибо! Вот теперь все получилось как надо.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
4-23826
anod
2002-05-09 00:18
2002.07.08
Сообщение от меню


14-23782
Almaz
2002-06-07 23:43
2002.07.08
Потерялся файл


3-23524
Shirson
2002-06-18 10:17
2002.07.08
Как создать таблицу dBASE (.dbf) из Delphi при помощи ADO?


3-23505
Oleon
2002-06-17 13:36
2002.07.08
InterBase.


7-23800
jack_p
2002-04-13 22:33
2002.07.08
Завершить (снять) приложение...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский