|
Вопрос # 4 656/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Возникла интересная ситуация. Никак не могу созданому программно компоненту сделать обработку на событие. Перешёл на елементарную кнопку Tbutton а для неё OnClick, тоже не выходит.
Бросаю ввесь код. Что не так?
Приложение: Переключить в обычный режим- type
- TForm1 = class(TForm)
- procedure FormCreate(Sender: TObject);
- procedure B1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.B1Click(Sender: TObject);
- begin
- ShowMEssage('B1Click');
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- var
- B1: TButton;
- begin
- B1 := TButton.Create(Self);
- with B1 do
- begin
- Left := 20;
- Top := 20;
- Width := 90;
- Height := 50;
-
- Parent := Form1;
- OnClick:=TForm1.B1Click;
- end;
- end;
-
- end.
 |
Вопрос задал: diamond (статус: Посетитель)
Вопрос отправлен: 14 октября 2010, 11:50
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 18; последнее сообщение — 14 октября 2010, 12:57; участников в обсуждении: 3.
|
diamond (статус: Посетитель), 14 октября 2010, 11:54 [#1]:
Может в самой делфи кроется тайна, она у меня 2006 года.
|
|
Amidamaru (статус: 4-ый класс), 14 октября 2010, 12:08 [#2]:
Конечно у тебя ничего не получится.
Раз уж ты указываешь
Parent := Form1;
то и
OnClick:=Form1.B1Click;
а не TForm1.
А ещё лучше вместо Form1 использовать Self:
Parent := Self;
OnClick:= {Self. здесь даже не нужен} B1Click;
|
|
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 (статус: Посетитель), 14 октября 2010, 12:13 [#4]:
нет, не работает.
Ошибка:
[Pascal Error] ClickScrollUnit.pas(43): E2009 Incompatible types: 'Parameter lists differ'
|
|
min@y™ (статус: Доктор наук), 14 октября 2010, 12:15 [#5]:
Цитата (diamond):
нет, не работает.
Это ты к кому обращаешься?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
diamond (статус: Посетитель), 14 октября 2010, 12:15 [#6]:
Наконец-то заработало. спс
|
|
diamond (статус: Посетитель), 14 октября 2010, 12:18 [#7]:
А процедура B1Click обязательно должна быть глобальной??
|
|
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 (статус: Посетитель), 14 октября 2010, 12:23 [#9]:
Забыл выделить где проблема.
OnClick := AAutoSaveDialogChech
|
|
min@y™ (статус: Доктор наук), 14 октября 2010, 12:33 [#10]:
Цитата (diamond):
Забыл выделить где проблема. OnClick := AAutoSaveDialogChech
Ну дык йопть, обработчик события должен быть обязательно методом класса и его формальные параметры должны совпадать с параметрами типа события. Делай, как в предыдущем примере.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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 (статус: Посетитель), 14 октября 2010, 12:38 [#12]:
Да, можна, но проблема не в этом.
|
|
min@y™ (статус: Доктор наук), 14 октября 2010, 12:39 [#13]:
Цитата (diamond):
Да, можна, но проблема не в этом.
Это ты к кому обращаешься?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
diamond (статус: Посетитель), 14 октября 2010, 12:44 [#14]:
к min@y™
|
|
min@y™ (статус: Доктор наук), 14 октября 2010, 12:45 [#15]:
Цитата (diamond):
Да, можна, но проблема не в этом.
Ну так и в чём проблема?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
diamond (статус: Посетитель), 14 октября 2010, 12:50 [#16]:
В этой строке OnClick := AAutoSaveDialogChech;.
Как в этом коде правильно в OnClick процедуру бросить?
|
|
min@y™ (статус: Доктор наук), 14 октября 2010, 12:56 [#17]:
Цитата (diamond):
В этой строке OnClick := AAutoSaveDialogChech;. Как в этом коде правильно в OnClick процедуру бросить?
Ну так я ж тебе написал уже, ёмаё. Смотри мой пост от сегодня, 12:33.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
diamond (статус: Посетитель), 14 октября 2010, 12:57 [#18]:
min@y™ (статус: Кандидат наук), сегодня, 12:33:
Я это не видел.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|