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

Delphi Sources



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

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

Есть такой кусок кода в программе
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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,106
Версия 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 присвоить.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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;

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

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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, время: 23:31.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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