Динамічне створення компонентів

Динамічне створення компонентів.

Привіт, підкажіть відповідь на таке питання. Створюю динамічно панель, а на ній кнопку SpeedButton. Таких панелей з кнопками в залежності від ситуації може бути різна кількість. Оброблювачем для натискання всіх кнопок є B.OnClick: = Form1.Informacia. # XA0; Підкажіть як створити динамічно обробник для кожної створеної кнопки. # XA0;
# XA0;

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;

Що значить "динамічно створити обробник"?

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

Обробник події - це метод класу. Тобто, певний машинний код, шматок програми. Ви хочете, щоб програма сама створила шматок свего ж коду?

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

Справа в тому, що в даному коді при натисканні на будь-яку з кнопку відбувається звернення до процедури B.OnClick: = Form1.Informacia. А потрібно щоб кожна кнопка викликала свій обробник, підкажіть як змінити код.


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

1) Кожній кнопці призначити свій обробник
2) В обробнику дивитися, яка кнопка його викликала і виконувати різний код.

В тому і питання, я не знаю як це зробити, підкажіть.

чого ти не знаєш як зробити?
кожній кнопці свій обробник або перевіряти яка це кнопка в одному обробнику

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


> # XA0; перевіряти яка це кнопка в одному обробнику

Як визначити яка кнопка викликала обробник?

> Як визначити яка кнопка викликала обробник?

А можна рядок прикладу, немогу знайти як це зробити?

Велике спасибі всім хто брав участь в конференції, але може хто допоможе вийти з глухого кута, черкніте Сточки прикладу.

Через Case не вийшло прідяться через if:
if sender = SpeedButton then begin
# XA0; # XA0 ;.
# XA0; # XA0; end;

> If sender = SpeedButton then begin

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

І що вам тут не подобається?

Спробуй сказати словами, що ти перевіряєш в своєму коді.

Якщо натиснуто SpeedButton, то робити.

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

А питання стоїть інакше (для кожної окремої кнопки) в даному випадки для кнопки під названеім SpeedButton

Якщо SpeedButton значення властивості Name, то

If TSpeedButton (Sender) .Name = SpeedButton then.

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

Ні, немає мій варіант працює і без всяких цих проблем сам перевіряв. )))


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

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
# XA0; if sender.tag = 15 then обробник кнопки, tag якої дорівнює 15-ти
# XA0; if sender.tag = 16 then обробник кнопки, tag якої дорівнює 15-ти
# XA0; if sender.tag = 17 then обробник кнопки, tag якої дорівнює 15-ти

# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; end

Пам'ять: 0.76 MB
Час: 0.062 c