Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 545

Раздел: Delphi » Прочее
/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
вопрос такой:
как написать событие для динамически созданной кнопки

Приложение:
  1. procedure TfFilecreate.BitBtn1Click(Sender: TObject);
  2. var fHlp:TForm;
  3. ltitle,ltitle2:TLabel;
  4. efield,efield2:TEdit;
  5. bNext,bClose:TBitBtn;
  6. procedure readcoords(Sender: TObject);
  7. begin
  8. inc(p);
  9. efield.Clear;
  10. efield2.Clear;
  11. genx:=strtoint(efield.text);
  12. geny:=strtoint(efield2.text);
  13. mx[kd,p]:=genx; my[kd,p]:=geny;
  14. if p=1 then fMain.Image1.Canvas.MoveTo(genx,geny) else
  15. fMain.Image1.Canvas.LineTo(genx,geny);
  16. end;
  17.  
  18. begin
  19. fHlp:=TForm.Create(fMain);
  20. with fHlp do begin
  21. Caption:='Ðó÷íå ââåäåííÿ êîîðäèíàò';
  22. Position:=poMainFormCenter;
  23. Width:=320;
  24. Height:=200;
  25. Show;
  26. end;
  27. Ltitle:=TLabel.Create(fHlp);
  28. with Ltitle do begin
  29. top:=50;
  30. left:=30;
  31. Width:=50;
  32. Height:=25;
  33. Font.Size:=12;
  34. Caption:='X êîîðäèíàòa';
  35. parent:=fHlp;
  36. end;
  37. efield:=TEdit.Create(fHlp);
  38. with efield do begin
  39. top:=75;
  40. left:=30;
  41. Width:=Ltitle.Width;
  42. Height:=25;
  43. Font.Size:=12;
  44. parent:=fHlp;
  45. end;
  46. Ltitle2:=TLabel.Create(fHlp);
  47. with Ltitle2 do begin
  48. top:=50;
  49. left:=180;
  50. Height:=25;
  51. Font.Size:=12;
  52. Caption:='Y êîîðäèíàòa';
  53. parent:=fHlp;
  54. end;
  55. efield2:=TEdit.Create(fHlp);
  56. with efield2 do begin
  57. top:=75;
  58. left:=180;
  59. Width:=Ltitle.Width;
  60. Height:=25;
  61. Font.Size:=12;
  62. parent:=fHlp;
  63. end;
  64. bClose:=TBitBtn.Create(fHlp);
  65. with bClose do begin
  66. top:=fHlp.ClientHeight-30;
  67. left:=200;
  68. kind:=bkClose;
  69. parent:=fHlp;
  70. Caption:='Çàêðèòè';
  71. end;
  72. bnext:=TBitBtn.Create(fHlp);
  73. with bnext do begin
  74. top:=fHlp.ClientHeight-30;
  75. left:=110;
  76. kind:=bkOk;
  77. parent:=fHlp;
  78. Caption:='Íàñòóïíà';
  79. onClick:=readcoords;
  80. end;
  81. end;


toro1 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

toro1 (статус: Посетитель), 18 июля 2014, 20:03 [#1]:

min@y™:один вопрос:
кнопка bnext создается на создаваемой форме fhlp.
как в этом случае?
min@y™

min@y™ (статус: Доктор наук), 18 июля 2014, 20:19 [#2]:

Цитата (toro1):

один вопрос: кнопка bnext создается на создаваемой форме fhlp. как в этом случае?

Да, блин, как угодно. Можно написать обработчик-метод формы TfHlp, можно написать отдельный класс, методы которого будут обработчиками динамически создаваемых компонентов. Можно даже написать компонент-наследник от TBitBtn с дополнительным методом, который назначать обработчиком OnClick от самого себя прямо в конструкторе! :) Можно, также, заюзать TActionList - очень удобно.

Да, и не забывай освобождать память из-под одноразовых локальных объектов, ибо за тебя это никто делать не будет.

Надеюсь, этого достаточно?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.02 сек.