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

Текущий архив: 2005.09.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.05 c
14-1125469229
syte_ser78
2005-08-31 10:20
2005.09.25
Совместимость фирменной эпсоновской краски с другими.


1-1125400262
Vera
2005-08-30 15:11
2005.09.25
перейти на строку в текстовом файле.


14-1125422503
TJulia
2005-08-30 21:21
2005.09.25
Редактирование видео


14-1125744307
Cardinal
2005-09-03 14:45
2005.09.25
! Пятна на дисплее сквозь солнечные очки


14-1125557962
Rentgen
2005-09-01 10:59
2005.09.25
PDF to DOC