Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
Владимир_К   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.04 c
8-1132134498
sco
2005-11-16 12:48
2006.04.16
Текстура и Освещение OpenGl


1-1142417495
КиТаЯц
2006-03-15 13:11
2006.04.16
OpenOffice вместо MSExcel


15-1143256110
balepa
2006-03-25 06:08
2006.04.16
Отправьте мне WIN32.hlp


2-1143655135
Quattro
2006-03-29 21:58
2006.04.16
Не понимаю где ошибся


2-1143639894
qqpp
2006-03-29 17:44
2006.04.16
Есть не большой вопрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский