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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 4 656

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Возникла интересная ситуация. Никак не могу созданому программно компоненту сделать обработку на событие. Перешёл на елементарную кнопку Tbutton а для неё OnClick, тоже не выходит.
Бросаю ввесь код. Что не так?

Приложение:
  1. type
  2. TForm1 = class(TForm)
  3. procedure FormCreate(Sender: TObject);
  4. procedure B1Click(Sender: TObject);
  5. private
  6. { Private declarations }
  7. public
  8. { Public declarations }
  9. end;
  10.  
  11. var
  12. Form1: TForm1;
  13. implementation
  14.  
  15. {$R *.dfm}
  16.  
  17. procedure TForm1.B1Click(Sender: TObject);
  18. begin
  19. ShowMEssage('B1Click');
  20. end;
  21.  
  22. procedure TForm1.FormCreate(Sender: TObject);
  23. var
  24. B1: TButton;
  25. begin
  26. B1 := TButton.Create(Self);
  27. with B1 do
  28. begin
  29. Left := 20;
  30. Top := 20;
  31. Width := 90;
  32. Height := 50;
  33.  
  34. Parent := Form1;
  35. OnClick:=TForm1.B1Click;
  36. end;
  37. end;
  38.  
  39. end.


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

Вопрос задал: diamond (статус: Посетитель)
Вопрос отправлен: 14 октября 2010, 11:50
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 18; последнее сообщение — 14 октября 2010, 12:57; участников в обсуждении: 3.
diamond

diamond (статус: Посетитель), 14 октября 2010, 11:54 [#1]:

Может в самой делфи кроется тайна, она у меня 2006 года.
Amidamaru

Amidamaru (статус: 4-ый класс), 14 октября 2010, 12:08 [#2]:

Конечно у тебя ничего не получится.
Раз уж ты указываешь
Parent := Form1;
то и
OnClick:=Form1.B1Click;
а не TForm1.
А ещё лучше вместо Form1 использовать Self:
    Parent := Self;
    OnClick:= {Self. здесь даже не нужен} B1Click;
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
min@y™

min@y™ (статус: Доктор наук), 14 октября 2010, 12:10 [#3]:

Попробуй вот так:
procedure TForm1.FormCreate(Sender: TObject);
begin
 with TButton.Create(Self) do
   begin
     Left := 20;
     Top := 20;
     Width := 90;
     Height := 50;
     Caption := 'моя кнопка';
     Parent := Self;
     OnClick:=Self.B1Click;
   end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
diamond

diamond (статус: Посетитель), 14 октября 2010, 12:13 [#4]:

нет, не работает.
Ошибка:
[Pascal Error] ClickScrollUnit.pas(43): E2009 Incompatible types: 'Parameter lists differ'
min@y™

min@y™ (статус: Доктор наук), 14 октября 2010, 12:15 [#5]:

Цитата (diamond):

нет, не работает.

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

diamond (статус: Посетитель), 14 октября 2010, 12:15 [#6]:

Наконец-то заработало. спс
diamond

diamond (статус: Посетитель), 14 октября 2010, 12:18 [#7]:

А процедура B1Click обязательно должна быть глобальной??
diamond

diamond (статус: Посетитель), 14 октября 2010, 12:21 [#8]:

С батоном разобрались - это хорошо, на будущее буду знать.
В этом коде проблема аналогична.

procedure TFrmCellCommunicEditor.OpMCSelect(var AMessage: TMessage);
var
AMsgDialog : TForm;
AAutoSaveDialog : TCheckBox;
AHintDialog : TCheckBox;

procedure AAutoSaveDialogChech;
begin
if AAutoSaveDialog.Checked then
begin
AHintDialog.Checked := True;
AHintDialog.Enabled := False;
end
else
begin
AHintDialog.Checked := False;
AHintDialog.Enabled := True;
end;
end;

begin
if FCellLocal.GetDevice<>nil then
if not FCellOriginal.GetDevice.CompareAll(FCellLocal.GetDevice)then
begin
//otv := MessageBox(handle,PChar('Сохранить изменения ?'), PChar(''), 324);
AMsgDialog := CreateMessageDialog('Сохранить изменения ?', mtConfirmation, [mbYes, mbNo]) ;
AAutoSaveDialog := TCheckBox.Create(AMsgDialog);
AHintDialog := TCheckBox.Create(AMsgDialog);
with AMsgDialog do
begin
Caption := 'Внимание';
Height := 160;
Width:= 200;

with AAutoSaveDialog do
begin
Parent := AMsgDialog;
Caption := 'Сохранять автоматически';
Top := 90;
Left := 8;
Width:= 200;
OnClick := AAutoSaveDialogChech;
end;

with AHintDialog do
begin
Parent := AMsgDialog;
Caption := 'Не выводить больше';
Top := 110;
Left := 8;
Width:= 200;
end;

if (ShowModal = IDYES) then
begin
SBtnSaveToDBClick(SBtnSaveToDB);
Exit;
end;

end;//with AMsgDialog do
end;//

LoadCell;
end;
diamond

diamond (статус: Посетитель), 14 октября 2010, 12:23 [#9]:

Забыл выделить где проблема.
OnClick := AAutoSaveDialogChech
min@y™

min@y™ (статус: Доктор наук), 14 октября 2010, 12:33 [#10]:

Цитата (diamond):

Забыл выделить где проблема. OnClick := AAutoSaveDialogChech

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

min@y™ (статус: Доктор наук), 14 октября 2010, 12:37 [#11]:

Вот эта конструкция меня улыбнула:
if AAutoSaveDialog.Checked then
begin
AHintDialog.Checked := True;
AHintDialog.Enabled := False;
end
else
begin
AHintDialog.Checked := False;
AHintDialog.Enabled := True;
end;
Если включить голову, то можно заменить на вот это:
AHintDialog.Checked := AAutoSaveDialog.Checked;
AHintDialog.Enabled := not AHintDialog.Checked;
или вот на это:
with AHintDialog do
  begin
    Checked := AAutoSaveDialog.Checked;
    Enabled := not Checked;
  end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
diamond

diamond (статус: Посетитель), 14 октября 2010, 12:38 [#12]:

Да, можна, но проблема не в этом.
min@y™

min@y™ (статус: Доктор наук), 14 октября 2010, 12:39 [#13]:

Цитата (diamond):

Да, можна, но проблема не в этом.

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

diamond (статус: Посетитель), 14 октября 2010, 12:44 [#14]:

к min@y™
min@y™

min@y™ (статус: Доктор наук), 14 октября 2010, 12:45 [#15]:

Цитата (diamond):

Да, можна, но проблема не в этом.

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

diamond (статус: Посетитель), 14 октября 2010, 12:50 [#16]:

В этой строке OnClick := AAutoSaveDialogChech;.
Как в этом коде правильно в OnClick процедуру бросить?
min@y™

min@y™ (статус: Доктор наук), 14 октября 2010, 12:56 [#17]:

Цитата (diamond):

В этой строке OnClick := AAutoSaveDialogChech;. Как в этом коде правильно в OnClick процедуру бросить?

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

diamond (статус: Посетитель), 14 октября 2010, 12:57 [#18]:

min@y™ (статус: Кандидат наук), сегодня, 12:33:
Я это не видел.

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

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