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