|
Вопрос # 6 545/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
вопрос такой:
как написать событие для динамически созданной кнопки
Приложение: Переключить в обычный режим- procedure TfFilecreate.BitBtn1Click(Sender: TObject);
- var fHlp:TForm;
- ltitle,ltitle2:TLabel;
- efield,efield2:TEdit;
- bNext,bClose:TBitBtn;
- procedure readcoords(Sender: TObject);
- begin
- inc(p);
- efield.Clear;
- efield2.Clear;
- genx:=strtoint(efield.text);
- geny:=strtoint(efield2.text);
- mx[kd,p]:=genx; my[kd,p]:=geny;
- if p=1 then fMain.Image1.Canvas.MoveTo(genx,geny) else
- fMain.Image1.Canvas.LineTo(genx,geny);
- end;
-
- begin
- fHlp:=TForm.Create(fMain);
- with fHlp do begin
- Caption:='Ðó÷íå
ââåäåííÿ
êîîðäèíàò';
- Position:=poMainFormCenter;
- Width:=320;
- Height:=200;
- Show;
- end;
- Ltitle:=TLabel.Create(fHlp);
- with Ltitle do begin
- top:=50;
- left:=30;
- Width:=50;
- Height:=25;
- Font.Size:=12;
- Caption:='X
êîîðäèíàòa';
- parent:=fHlp;
- end;
- efield:=TEdit.Create(fHlp);
- with efield do begin
- top:=75;
- left:=30;
- Width:=Ltitle.Width;
- Height:=25;
- Font.Size:=12;
- parent:=fHlp;
- end;
- Ltitle2:=TLabel.Create(fHlp);
- with Ltitle2 do begin
- top:=50;
- left:=180;
- Height:=25;
- Font.Size:=12;
- Caption:='Y
êîîðäèíàòa';
- parent:=fHlp;
- end;
- efield2:=TEdit.Create(fHlp);
- with efield2 do begin
- top:=75;
- left:=180;
- Width:=Ltitle.Width;
- Height:=25;
- Font.Size:=12;
- parent:=fHlp;
- end;
- bClose:=TBitBtn.Create(fHlp);
- with bClose do begin
- top:=fHlp.ClientHeight-30;
- left:=200;
- kind:=bkClose;
- parent:=fHlp;
- Caption:='Çàêðèòè';
- end;
- bnext:=TBitBtn.Create(fHlp);
- with bnext do begin
- top:=fHlp.ClientHeight-30;
- left:=110;
- kind:=bkOk;
- parent:=fHlp;
- Caption:='Íàñòóïíà';
- onClick:=readcoords;
- end;
- end;
 |
Вопрос задал: toro1 (статус: Посетитель)
Вопрос отправлен: 17 июля 2014, 12:55
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Обработчик события должен быть методом любого класса, например твоей формы:
type
TfFilecreate = class(TForm)
// ...
procedure readcoords(Sender: TObject); // метод класса TfFilecreate
// ...
end;
implementation
procedure TfFilecreate.readcoords(Sender: TObject);
begin
// код обработчика
end;
Ну и где-то там, где создаёшь кнопку:
procedure TfFilecreate.BitBtn1Click(Sender: TObject);
var
// ...............
begin
// ...............
bnext:=TBitBtn.Create(fHlp);
with bnext do
begin
top:=fHlp.ClientHeight-30;
left:=110;
kind:=bkOk;
parent:=fHlp;
Caption:= 'blablabla';
onClick:=readcoords; // типа того
end;
end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 17 июля 2014, 13:07
Оценка за ответ: 5
Комментарий к оценке: спасибо большое!
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 18 июля 2014, 20:19; участников в обсуждении: 2.
|
toro1 (статус: Посетитель), 18 июля 2014, 20:03 [#1]:
min@y™:один вопрос:
кнопка bnext создается на создаваемой форме fhlp.
как в этом случае?
|
|
min@y™ (статус: Доктор наук), 18 июля 2014, 20:19 [#2]:
Цитата (toro1):
один вопрос: кнопка bnext создается на создаваемой форме fhlp. как в этом случае?
Да, блин, как угодно. Можно написать обработчик-метод формы TfHlp, можно написать отдельный класс, методы которого будут обработчиками динамически создаваемых компонентов. Можно даже написать компонент-наследник от TBitBtn с дополнительным методом, который назначать обработчиком OnClick от самого себя прямо в конструкторе! Можно, также, заюзать TActionList - очень удобно.
Да, и не забывай освобождать память из-под одноразовых локальных объектов, ибо за тебя это никто делать не будет.
Надеюсь, этого достаточно?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|