| 
| 
 | Вопрос # 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: Я это не видел.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |