Вниз
Скачать: CL | DM;

событие на динамически созданный компонент   Найти похожие ветки 

← →
Kot Andrei ©   (2005-08-31 09:29) [0]

т.е. как событие та присвоить я знаю... Например создаем Button1,
назначаем Parent:=Form1, назначаем обработчик события OnClick, Button1.OnClick:=MyClick, Потом пишем обработчик MyClick - и вот здесь начинаются трудности, дело в том что мне нужно в этом обработчике изменить свойство вызвавшего его компонента, т.е в MyClick написать например: Button1.Color:=clRed;
Но ведь Button1 еще не создан и делфя естественно ругается, как заставить ее понять что к моменту вызова этой процедуры Button1 уже будет существовать????

Надеюсь Вы поняли чего я хочу...
З.Ы. Писал очень поздно ночью, потому вопрос может глупый, а сейчас уже на работе , где даже делфи под рукой нет...:((((


← →
kot andrei ©   (2005-08-31 09:30) [1]

Аааа , забыл сказать (если это важно) форма тоже создается динамически...


← →
ShiFT   (2005-08-31 09:37) [2]

(Sender as TButton).Color := clRed;


← →
Bless ©   (2005-08-31 09:42) [3]

Button1.Color:=clRed;
Но ведь Button1 еще не создан и делфя естественно ругается, как заставить ее понять что к моменту вызова этой процедуры Button1 уже будет существовать????


А можно пример кода? Что-то я сомневаюсь, что Делфи будет ругаться на button1 на этапе компиляции, даже если он не создан. Он ведь (button1) описан, правда?


← →
kblc ©   (2005-08-31 09:48) [4]

Простите, а как она (Button1) может быть не создана, если ты уже ей событие присваеваешь???? и реагируешь на это сабытие (тем более OnClick)!!!!


← →
Reindeer Moss Eater ©   (2005-08-31 09:49) [5]

Событие - это свойство.
Свойствам можно присваивать значения.
Создай свой экземпляр и присвой его свойству-событию нужное тебе значение.


← →
Reindeer Moss Eater ©   (2005-08-31 09:54) [6]

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

Компонет, вызвавший обработчик события передается тебе в параметре sender.
Вот с ним и работай.


← →
Bless ©   (2005-08-31 10:01) [7]

Reindeer Moss Eater[6]>

Все верно. Но ведь код
Button1.Color:=clRed
в обработчике тоже корректный (хоть Sender кошернее :) А у автора сабжа он не работает.


← →
kot andrei ©   (2005-08-31 10:02) [8]

>>ShiFT   (31.08.05 09:37) [2]
>>(Sender as TButton).Color := clRed;

>>Reindeer Moss Eater ©   (31.08.05 09:54) [6]
>>Компонет, вызвавший обработчик события передается тебе в
>>параметре sender.
>>Вот с ним и работай.

Спасибо! Я думаю это то что мне нужно! вечером попробую!

Всем остальным тоже большое спасибо!


← →
Reindeer Moss Eater ©   (2005-08-31 10:06) [9]

А у автора сабжа он не работает.

Люди могут подразумевать очень разные вещи под этим.
Например у Button1 нет свойства Color и чел говорит, что "код не работает"

Или у ТButton меняют Font.Color на clRed а он не меняется, и чел снова говорит, что "код не работает"


← →
Bless ©   (2005-08-31 10:10) [10]

Reindeer Moss Eater ©  (31.08.05 10:06) [9]
Например у Button1 нет свойства Color и чел говорит, что "код не работает"


Тю, блин. И то правда. :) Как-то не обратил внимание. Так тут и sender не поможет :)


← →
begin...end ©   (2005-08-31 10:18) [11]

У TButton есть свойство Color. Но оно не опубликовано.


← →
Bless ©   (2005-08-31 10:25) [12]

begin...end[11]>
Это от какого предка оно ему досталось?


← →
begin...end ©   (2005-08-31 10:29) [13]

> Bless ©   (31.08.05 10:25) [12]

От TControl.


← →
kot andrei ©   (2005-08-31 11:28) [14]

че то торможу совсем!!!!
поставил делфю на работе, сижу вот пробую:

var
 Form1: TForm1;
 myform: tform;
mybutton :tbutton;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
myform:=tform.Create(myform);
with myform do begin
width:=100;
height:=100;
name:="MyForm1";
show;
end;
mybutton:=tbutton.Create(mybutton);
with mybutton do begin
parent:=myform;
caption:="Проба";
onclick:=<<<<?????
end;
end;

procedure myclick; //здесь набо изменить каптион у баттона
<<<<<?????
end.


помогите плиз , торможу!!!! Давно не создавал ничего динамически...:о((((


← →
kblc ©   (2005-08-31 12:05) [15]

и это у тебя работает? :)

у Баттона OnClick д.б. вообще TNotifyEvent! т.е. procedure (Sender: TObject) of object;
т.е. для начала создай свой класс. В нём определи такую процедуру. А потом присваивай.
 А в обработчике напишешь if Sender is TButton then (Sender as TButton).Caption:="123";


← →
kot andrei ©   (2005-08-31 12:10) [16]

kblc ©   (31.08.05 12:05) [15]

пасибо!
совсем полохой стал :о)
ну да ладно буду разбираться! закрывайте ветку а то уже стыдно :о)



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.024 c
5-1100689736
Stanislav
2004-11-17 14:08
2005.09.25
Регистрация редактора свойств


5-1100761074
Stanislav
2004-11-18 09:57
2005.09.25
Не создаеься потомок Tcollectionitem


2-1124269015
kron
2005-08-17 12:56
2005.09.25
dll


14-1125310284
Kerk
2005-08-29 14:11
2005.09.25
По какому календарю сегодня 1 апреля?


3-1123748480
topmoz
2005-08-11 12:21
2005.09.25
Запрос на запись в таблицу




   Наверх