Текущий архив: 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.49 MB
Время: 0.044 c