Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

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

 
Владимир_К   (2006-04-02 09:36) [0]

Здравствуйте, подскажите ответ на такой вопрос. Создаю динамически панель, а на ней кнопку 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;


 
Юрий Зотов ©   (2006-04-02 12:18) [1]

Что значит "динамически создать обработчик"?

Динамически назначить - это понятно (в Вашем коде так и делается: B.OnClick:=Form1.Informacia, только Form1 уберите), а вот что значит "динамически создать"?

Обработчик события - это метод класса. То есть, определенный машинный код, кусок программы. Вы хотите, чтобы программа сама создала кусок свего же кода?

Вообще говоря, это сделать можно, но без уверенного знания ассемблера и машинных команд за такую задачу лучше даже и не браться. Начинающим такие штучки явно не по зубам, да и НЕначинающим они мало кому по зубам.


 
Владимир_К   (2006-04-02 16:24) [2]

Дело в том, что в данном коде при нажатии на любую из кнопку происходит обращение к процедуре B.OnClick:=Form1.Informacia. А нужно чтобы каждая кнопка вызывала свой обработчик, подскажите как изменить код.


 
YurikGL ©   (2006-04-02 16:35) [3]


> B.OnClick:=Form1.Informacia. А нужно чтобы каждая кнопка
> вызывала свой обработчик, подскажите как изменить код.

1) Каждой кнопке назначить свой обработчик
2) В обработчике смотреть, какая кнопка его вызвала и выполнять разный код.


 
Владимир_К   (2006-04-02 16:46) [4]

В том и вопрос, я не знаю как это сделать, подскажите.


 
vovnuke ©   (2006-04-02 16:53) [5]

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


 
Владимир_К   (2006-04-02 17:05) [6]

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


 
Владимир_К   (2006-04-02 17:16) [7]


>  проверять какая это кнопка в одном обработчике


Как определить какая кнопка вызвала обработчик?


 
MBo ©   (2006-04-02 17:20) [8]

>Как определить какая кнопка вызвала обработчик?

Sender


 
Владимир_К   (2006-04-02 17:53) [9]

А можно строку примера, немогу найти как это сделать?


 
Владимир_К   (2006-04-02 18:47) [10]

Большое спасибо всем кто принимал участие в конференции, но может кто поможет выйти из тупика, черкните сточку примера.


 
Malik ©   (2006-04-02 21:11) [11]

Через Case не получилось придяться через if:
if sender=SpeedButton then begin
    ..........................
    end;


 
EvS ©   (2006-04-02 21:40) [12]

> [11] Malik ©   (02.04.06 21:11)

>if sender=SpeedButton then begin

Сам-то проверял свой код?


 
Malik ©   (2006-04-02 21:45) [13]

И что вам тут не нравится?


 
EvS ©   (2006-04-02 21:53) [14]

>[13] Malik ©   (02.04.06 21:45)

Попробуй сказать словами, что ты проверяешь в своем коде.


 
Malik ©   (2006-04-02 21:55) [15]

Если нажат SpeedButton, то делать ....................................


 
EvS ©   (2006-04-02 22:13) [16]

Проверка на принадлежность Sender к классу TSpeedButton осуществляется с помощью is.
If Sender is TSpeedButton then...


 
Malik ©   (2006-04-02 22:18) [17]

А вопрос стоит по другому (для каждой отдельной кнопки) в данном случаи для кнопки под названеим SpeedButton


 
EvS ©   (2006-04-02 22:24) [18]

Если SpeedButton значение свойства Name, то

If TSpeedButton(Sender).Name=SpeedButton then ...


 
EvS ©   (2006-04-02 22:26) [19]

If (Sender as TSpeedButton).Name=SpeedButton then ...


 
Malik ©   (2006-04-02 22:29) [20]

Нет, нет мой вариант работает и без всяких этих заморочек сам проверял!!! :)))


 
YurikGL ©   (2006-04-03 07:07) [21]


> 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



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

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

Наверх




Память: 0.51 MB
Время: 0.051 c
15-1143025453
Vlad Oshin
2006-03-22 14:04
2006.04.16
Помогите с удаленной установкой. TFTP: File not found


4-1138543670
Alex_Korn
2006-01-29 17:07
2006.04.16
Обновление ресурсов в DLL


2-1143658583
Leshas
2006-03-29 22:56
2006.04.16
TabControl - поместить элементы на разные вкладки


2-1144123128
Diller
2006-04-04 07:58
2006.04.16
Screen Shot


2-1143131539
anton773
2006-03-23 19:32
2006.04.16
загрузить сообщение