![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание компонентов. [D7]
Владимир_К © (2006-04-02 09:36:00)Здравствуйте, подскажите ответ на такой вопрос. Создаю динамически панель, а на ней кнопку SpeedButton. Таких панелей с кнопками в зависимости от ситуации может быть разное количество. Обработчиком для нажатия всех кнопок является B.OnClick:=Form1.Informacia. Подскажите как создать динамически обработчик для каждой созданной кнопки.
procedure TForm1.UserConnect;
var
B:TSpeedButton;
G:TGroupBox;
Informacia:TNotifyEvent;
begin
//Создание панельки под кнопку.
G:=TGroupBox.Create(Form1);
G.Parent:=Form1.ScrollBox1;
G.Caption:=ImiaKomp;
ButtonCoordinat; //Получение координат.
G.Height:=H;
G.Left:=L;
G.Top:=T-ScrollBox1.VertScrollBar.Position;
G.Width:=W;
//Создание кнопки.
B:=TSpeedButton.Create(Form1);
B.Parent:=G;
B.OnClick:=Form1.Informacia;
B.Glyph.LoadFromFile('компьютер.bmp');
B.Height:=73;
B.Left:=5;
B.Top:=15;
B.Width:=90;
end;
YurikGL (2006-04-03 07:07:00) [1]
> B.OnClick:=Form1.Informacia. А нужно чтобы каждая кнопка
> вызывала свой обработчик, подскажите как изменить код.
B,C,D:TSpeedButton;
B:=TSpeedButton.Create(Form1);
B.Parent:=G;
B.OnClick:=Form1.Informacia;
b.tag:=15;
C:=TSpeedButton.Create(Form1);
C.Parent:=G;
C.OnClick:=Form1.Informacia;
C.tag:=16;
D:=TSpeedButton.Create(Form1);
D.Parent:=G;
D.OnClick:=Form1.Informacia;
Db.tag:=17;
в обработчике
with sender as TSpeedButton do begin
if sender.tag=15 then обработчик кнопки, tag которой равен 15-ти
if sender.tag=16 then обработчик кнопки, tag которой равен 15-ти
if sender.tag=17 then обработчик кнопки, tag которой равен 15-ти
end
Malik (2006-04-02 22:29:00) [2]Нет, нет мой вариант работает и без всяких этих заморочек сам проверял!!! :)))
EvS (2006-04-02 22:26:00) [3]If (Sender as TSpeedButton).Name=SpeedButton then ...
EvS (2006-04-02 22:24:00) [4]Если SpeedButton значение свойства Name, то
If TSpeedButton(Sender).Name=SpeedButton then ...
Malik (2006-04-02 22:18:00) [5]А вопрос стоит по другому (для каждой отдельной кнопки) в данном случаи для кнопки под названеим SpeedButton
EvS (2006-04-02 22:13:00) [6]Проверка на принадлежность Sender к классу TSpeedButton осуществляется с помощью is.
If Sender is TSpeedButton then...
Malik (2006-04-02 21:55:00) [7]Если нажат SpeedButton, то делать ....................................
EvS (2006-04-02 21:53:00) [8]>[13] Malik © (02.04.06 21:45)
Попробуй сказать словами, что ты проверяешь в своем коде.
Malik (2006-04-02 21:45:00) [9]И что вам тут не нравится?
EvS (2006-04-02 21:40:00) [10]> [11] Malik © (02.04.06 21:11)
>if sender=SpeedButton then begin
Сам-то проверял свой код?
Malik (2006-04-02 21:11:00) [11]Через Case не получилось придяться через if:
if sender=SpeedButton then begin
..........................
end;
Владимир_К (2006-04-02 18:47:00) [12]Большое спасибо всем кто принимал участие в конференции, но может кто поможет выйти из тупика, черкните сточку примера.
Владимир_К (2006-04-02 17:53:00) [13]А можно строку примера, немогу найти как это сделать?
MBo (2006-04-02 17:20:00) [14]>Как определить какая кнопка вызвала обработчик?
Sender
Владимир_К (2006-04-02 17:16:00) [15]
> проверять какая это кнопка в одном обработчике
Как определить какая кнопка вызвала обработчик?
Владимир_К (2006-04-02 17:05:00) [16]Кнопки создаются динамически, поэтому зарание не известрно сколь их будет, поэтому написать для каждой кнопки обработчик немогу. В созданном обработчике я не могу найти по какому признаку определить какая кнопка вызвала обработчик и как обратится к динамически созданным кнопкам.
vovnuke (2006-04-02 16:53:00) [17]чего ты не знаешь как сделать?
каждой кнопке свой обработчик или проверять какая это кнопка в одном обработчике
Владимир_К (2006-04-02 16:46:00) [18]В том и вопрос, я не знаю как это сделать, подскажите.
YurikGL (2006-04-02 16:35:00) [19]
> B.OnClick:=Form1.Informacia. А нужно чтобы каждая кнопка
> вызывала свой обработчик, подскажите как изменить код.
1) Каждой кнопке назначить свой обработчик
2) В обработчике смотреть, какая кнопка его вызвала и выполнять разный код.
Владимир_К (2006-04-02 16:24:00) [20]Дело в том, что в данном коде при нажатии на любую из кнопку происходит обращение к процедуре B.OnClick:=Form1.Informacia. А нужно чтобы каждая кнопка вызывала свой обработчик, подскажите как изменить код.