Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.02.2013, 02:59
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
Вопрос Sender

Есть такой кусок кода в программе
Код:
type BitButtonClass = class
  class procedure BitClick(Sender : TObject);
  end;

procedure TForm1.BitBtn1Click(Sender: TObject);

var Forma : TForm;
    BitButton1 : TBitBtn;
    BitButton2 : TBitBtn;
    BitButton3 : TBitBtn;
    A : TDBGrid;

begin
//
Forma := TForm.Create(Self);
With Forma do
  begin
  Left := 100;
  Top := 100;
  Height := 300;  // Высота формы
  Width := 300;   // Ширина формы
  BorderStyle := bsDialog;
  end;

BitButton1 := TBitBtn.Create(Forma);
With BitButton1 do
  begin
    Parent := Forma;
    Left := 20;
    Top := 235;
    Height := 25;  // Высота
    Width := 75;   // Ширина
    Caption :='Добавить';
    Visible := true;
    OnClick := BitButtonClass.BitClick;
  end;

class procedure BitButtonClass.BitClick(Sender: TObject);
begin
if TBitBtn(Sender).Name = 'BitButton1' then
                  begin
                  ShowMessage('1111');
                  end;
if (Sender as TBitBtn).Name = 'BitButton2' then
                  begin
                  ShowMessage('2');
                  end;
if (Sender as TBitBtn).Name = 'BitButton3' then
                  begin
                  ShowMessage('3');
                  end;

ShowMessage('4');
end;
При этом параметр sender в обработчик события не передается - он пустой. Как следствие непонятно кто создал событие. Как можно определить, кто вызвал событие, в чем проблема?
Ответить с цитированием
  #2  
Старый 02.02.2013, 04:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Убери class для процедуры и все будет передаваться.
Ответить с цитированием
  #3  
Старый 02.02.2013, 04:32
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Всё передаётся, забыл свойство Name присвоить.
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  MyForm        : TForm;
  Memo1         : TMemo;
  BitButton1,
  BitButton2,
  BitButton3    : TButton;
begin
  MyForm := TForm.Create(Self);
  with MyForm do
  begin
    Left   := 100;
    Top    := 100;
    Height := 300;  // Высота формы
    Width  := 300;   // Ширина формы
    BorderStyle := bsDialog;

    Memo1 := TMemo.Create(MyForm);
    with Memo1 do
    begin
      Parent  := MyForm;
      Left    := 10;
      Top     := 10;
      Height  := 210;  // Высота
      Width   := 270;   // Ширина
      Visible := True;
    end;

    BitButton1 := TButton.Create(MyForm);
    with BitButton1 do
    begin
      Parent  := MyForm;
      Left    := 20;
      Top     := 235;
      Height  := 25;  // Высота
      Width   := 75;   // Ширина
      Caption := 'Добавить';
      Name    := 'BitButton1';
      Visible := True;
      OnClick := BitButtonClass.BitClick;
    end;

    BitButton2 := TButton.Create(MyForm);
    with BitButton2 do
    begin
      Parent  := MyForm;
      Left    := 100;
      Top     := 235;
      Height  := 25;  // Высота
      Width   := 75;   // Ширина
      Caption := 'Удалить';
      Name    := 'BitButton2';
      Visible := True;
      OnClick := BitButtonClass.BitClick;
    end;

    BitButton3 := TButton.Create(MyForm);
    with BitButton3 do
    begin
      Parent  := MyForm;
      Left    := 180;
      Top     := 235;
      Height  := 25;  // Высота
      Width   := 75;   // Ширина
      Caption := 'Отмена';
      Name    := 'BitButton3';
      Visible := True;
      OnClick := BitButtonClass.BitClick;
    end;

  end;
  MyForm.ShowModal;
  MyForm.Free;
end;

class procedure BitButtonClass.BitClick(Sender: TObject);
begin
  if Sender is TButton then
  begin
    if (Sender as TButton).Name = 'BitButton1' then
      ShowMessage('Кнопка 1')
    else if (Sender as TButton).Name = 'BitButton2' then
      ShowMessage('Кнопка 2')
    else if (Sender as TButton).Name = 'BitButton3' then
      ShowMessage('Кнопка 3');
  end;
end;

Можно также не просто показать какая кнопка, но и реальные действия "навесить".

Код:
procedure TForm1.Button2Click(Sender: TObject);
...
    Memo1 := TMemo.Create(MyForm);
    with Memo1 do
    begin
      Parent  := MyForm;
      Left    := 10;
      Top     := 10;
      Height  := 210;  // Высота
      Width   := 270;   // Ширина
      Name    := 'Memo1'; // добавим имя
      Visible := True;
    end;
...
end;

class procedure BitButtonClass.BitClick(Sender: TObject);
begin
  if Sender is TButton then
  begin
    if (Sender as TButton).Name = 'BitButton1' then
      TMemo(TForm((Sender as TButton).Parent).FindComponent('Memo1')).Lines.Add('Новая строка')
    else if (Sender as TButton).Name = 'BitButton2' then
      TMemo(TForm((Sender as TButton).Parent).FindComponent('Memo1')).Lines.Clear
    else if (Sender as TButton).Name = 'BitButton3' then
      TForm((Sender as TButton).Parent).Close;
  end;
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 02.02.2013 в 05:11.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
Fantomas_RUS (02.02.2013)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter