Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2010, 21:16   #1
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию обработка onClose в runtime

Доброго времени суток комрады.

имеется такой код

Код:
procedure TMain.MemoSelectBaseCreate(Sender: TObject);
var
LB:TListBox;
FormSelectBase:TForm;
Com:TComponent;
Act: TCloseAction;
begin
FormSelectBase:=TForm.Create(self);
FormSelectBase.Name :='FormSelectBase';
FormSelectBase.Top:=150;
FormSelectBase.Left:=150;
FormSelectBase.Width:=150;
FormSelectBase.Height:=150;
FormSelectBase.BorderStyle:=bsSizeToolWin;
FormSelectBase.BringToFront;
FormSelectBase.Show;
end;
Форма прекрасно создается и закрывается, но при повторном вызове формы появляется ошибка

Код:
A component named FormSelectBase already exists
как я понимаю дело в том что при закрытии форма не уничтожается а просто скрывается. Решение: запихать в обработчик OnClose код Action := caFree; Вот только никак не смог понять как это сделать ведь моя форма созданна в runtime. Поиск по форуму и гуглу ничего дельного не дал.

Собсно вопрос: Как получить доступ к свойствам динамически созданных форм?

Заранее благодарен.
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Старый 13.02.2010, 21:18   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

По идее также как и к обычным
Код:
FormSelectBase.Destroy;
psycho-coder вне форума Ответить с цитированием
Старый 13.02.2010, 21:19   #3
Unconnected
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 55
По умолчанию

Цитата:
Как получить доступ к свойствам динамически созданных форм?
Может, к событиям?

Сначала создаёшь процедуру-обработчик события, например так:

Код:
Procedure MyEvent(Sender: TObject; var Action: TCloseAction);
begin
  form.free;
end;
И после создания формы пишешь:

Код:
form.onclose:=MyEvent;
Unconnected вне форума Ответить с цитированием
Старый 13.02.2010, 21:35   #4
sheka
Босс
Форумчанин
 
Аватар для sheka
 
Регистрация: 03.06.2009
Сообщений: 125
По умолчанию

Форму можно просто показывать в следующий раз, а не создавать заново.
form.show;

Две одинаковые вложенные ошибки называются четной ошибкой и ошибкой не являются.
Ася 255507394. Отзывы здесь.
sheka вне форума Ответить с цитированием
Старый 13.02.2010, 21:36   #5
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию

Cпасибки все получилось
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Старый 15.02.2010, 22:00   #6
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию

Вот сталкнулся внезатно с загвоздкой:
Если создаю обработчик подобным образом
Цитата:
Сообщение от Unconnected Посмотреть сообщение
Код:
Procedure MyEvent(Sender: TObject; var Action: TCloseAction);
то не могу передать в него параметры

Например
Код:
procedure TMain.MemoSelectBaseCreate(Sender: TObject; var Znachenie:string);
потом пытяюсь его вызывать
Код:
btn.OnClick:=Main.MemoSelectBaseCreate('Значение');
ролучаю ошибку
[DCC Error] Nain.pas(589): E2010 Incompatible types: 'TObject' and 'string'
Я так понимаю что то с Sender? ведь я его не передал а оно должно ити до параметра Znachenie? Как корректно передать в процедуру значения?
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Старый 15.02.2010, 22:03   #7
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Код:
btn.OnClick:=Main.MemoSelectBaseCreate('Значение');
Ты тут должен указать имя процедуры обработчика.
Код:
btn.OnClick:=Main.MemoSelectBaseCreate;
psycho-coder вне форума Ответить с цитированием
Старый 15.02.2010, 22:10   #8
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
Ты тут должен указать имя процедуры обработчика.
Код:
btn.OnClick:=Main.MemoSelectBaseCreate;
Спасибо я это понимаю но я хочу передать какие то значения в процедуру обработчик типа:

MemoSelectBaseCreate(Sender: TObject; var Znachenie:string);
begin
.
.
.
Znachenie:=Znachenie+'10';
.
.
.
end;

А потом вызывать этот обработчик события передвав в него что то MemoSelectBaseCreate('Номер ');

Или это невозможно?
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Старый 15.02.2010, 22:34   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
btn.OnClick:=Main.MemoSelectBaseCreate(btn, 'Значение');
mihali4 вне форума Ответить с цитированием
Старый 15.02.2010, 23:28   #10
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Ну, значение передавай при вызове процедуры, а не при инициализации обработчика
Код:
begin
...
  Main.MemoSelectBaseCreate(btn, 'Значение');
...
end;
Или я что то не понял?
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Runtime runtime = Runtime.getRuntime(); Pti44ka Общие вопросы по Java, Java SE, Kotlin 1 22.11.2009 10:45
Паскаль runtime error Лида200915 Помощь студентам 11 18.09.2009 22:00
RunTime Error713 (VB) vio Помощь студентам 2 12.12.2008 20:45
Runtime programming JoanM Общие вопросы Delphi 4 09.01.2008 11:00