Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое создание компонентов. [D7]


Страницы:   1 2

Владимир_К ©   (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. А нужно чтобы каждая кнопка вызывала свой обработчик, подскажите как изменить код.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо