Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как задать обработчик события?  (Прочитано 9104 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
locator
Постоялец

ru
Offline Offline

« : 08-12-2006 19:16 » 

Доброго времени суток! Не подскажете, как задать обработчик события (например OnClick) для объекта (например TButton) программным способом? (не применяя инспектор объектов)
Спасибо за ответ!
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #1 : 08-12-2006 20:50 » 

это будет выглядеть примерно вот так:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure OnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  published
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OnClick(Sender: TObject);
begin
  ShowMessage ('Button clicked!');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.OnClick := OnClick;
end;

end.

главные грабли - процедура, которую ты присваиваешь на событие, должна быть не просто обычной процедурой, а именно методом какого-то объекта, в нашем случае - методом формы.

З.Ы. не за что Ага
« Последнее редактирование: 16-12-2007 14:28 от Алексей1153++ » Записан

locator
Постоялец

ru
Offline Offline

« Ответ #2 : 09-12-2006 19:35 » 

Ну а если надо снять этот обработчик, то
  Button1.OnClick := 0;
это верно или надо как-то по научному сделать?  Улыбаюсь
Записан
zubr
Гость
« Ответ #3 : 10-12-2006 09:19 » 

Цитата
Ну а если надо снять этот обработчик, то
  Button1.OnClick := 0;
это верно или надо как-то по научному сделать?
Верно будет Button1.OnClick := nil;
Записан
SEA
Помогающий

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 02-04-2007 22:24 » 

У меня был пример, когда нужно было при выборе элемента базы данных вывести на панель кнопки, каждая из которых будет открывать информацию по своему объекту.

Я сейчас искать тот код не буду, но в общем все выглядит так:

создаем переменную arButtons: TList;
for i := 1 to needcount do begin
 arButtons.Add(TButton.Create(Self));
 arButtons[arButtons.Count-1].Hint := ArrayOfMyObjectsWhichMustBeShowd[i-1].Name; {or ID - у кого как}
 arButtons[arButtons.Count-1].OnClick := MyButtonClick(Sender: TObject);
 Self.InsertControl(arButtons[arButtons.Count-1]);
end;

А та процедура
procedure MyButtonClick(Sender: TObject);
begin
 ShowObjectInfo(Sender.Hint);
end;


{Ну, а теперь два момента: for i:= 1 to needcount - это потому, что цикл for в Delphi какой-то калечный - for i := 0 to 0 все равно один раз пройдет. Посему я начинаю счетчик с единицы и if needcount=0 then цикл ниразу не проходит. А отсюда i-1 потом.}
« Последнее редактирование: 02-04-2007 22:34 от SEA » Записан

почувствуй радость творческих мук!
SEA
Помогающий

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 02-04-2007 22:30 » new

Цитата
Ну а если надо снять этот обработчик, то
  Button1.OnClick := 0;
это верно или надо как-то по научному сделать?
Верно будет Button1.OnClick := nil;
А тебе Дельфа не даст присвоить ноль, потому что 0 - это числовая константа, а метод OnClick требует TNotifyEvent.
Записан

почувствуй радость творческих мук!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines