![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с классами [D5, XP]
Yus © (2005-10-28 15:33:00)Подскажите в примере как передать событие из одного класса в процедуру другого используя Делегирование
Yus (2005-10-28 19:28:00) [1]Да, допустил пару ошибок. Виноват....
Джо СПАСИБО, твоя подсказка, то что нужно.
Джо (2005-10-28 18:34:00) [2]
> [9] Джо © (28.10.05 18:17)
Тут
> procedure Button1Click(Sender: TObject);private
private случайно встрял, игнорировать.
Джо (2005-10-28 18:17:00) [3]
> [7] Yus (28.10.05 17:45)
То, что ты привел, вообще-то не скомпилируется, наверное в браузере писал, т.е, просьбу в [3] не выполнил. Ну, да ладно. Последний приступ телепатии. Вот это:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TCalculateEvent = procedure(I: Integer) of object;
TSomeClass = class(TObject)
private
FOnCalculate: TCalculateEvent;
procedure DoCalculate;
public
property OnCalculate: TCalculateEvent read FOnCalculate write FOnCalculate;
procedure DoWork;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);private
private
procedure CalculateProc(I: Integer);
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TSomeClass }
procedure TForm1.CalculateProc(I: Integer);
begin
ShowMessage (IntToStr(I));
end;
procedure TSomeClass.DoCalculate;
begin
if Assigned(FOnCalculate) then FOnCalculate(7);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SomeClass: TSomeClass;
begin
SomeClass := TSomeClass.Create;
try
SomeClass.OnCalculate := CalculateProc;
SomeClass.DoWork;
finally
SomeClass.Free;
end;
end;
procedure TSomeClass.DoWork;
var
I: Integer;
begin
for I := 0 to 10 do
DoCalculate
end;
end.
?
Leonid Troyanovsky (2005-10-28 18:17:00) [4]
> Yus (28.10.05 17:45) [7]
> Что должно быть написано в TForm, чтобы принять число 7,
> я не знаю о чем вас и спрашиваю.
В TForm должен существать метод: TCalculateEvent.
Этот метод должен быть назначен свойству OnCalculate
созданного экземпляра TSomeClass. Это - во-первых (уже говорилось).
А, во-вторых, где-то (очевидно, в недрах TSomeClass) должно произойти
некое событие, в результате которого и будет вызван метод
диспетчеризации DoCalculate.
Для простоты, представим, что это - событие таймера (пришло сообщение
WM_TIMER, сработал обработчик OnTimer и т.д.).
Полная картина может быть представлена приблизительно так:
http://groups.google.com/group/fido7.ru.delphi.chainik/msg/a97f4a5f1115c91d
Возможно, что стоит посмотреть все обсуждение.
--
Regards, LVT.
Zacho (2005-10-28 17:58:00) [5]Yus (28.10.05 17:45) [7]
Что должно быть написано в TForm, чтобы принять число 7, я не знаю о чем вас и спрашиваю
А вот именно это никто понять и не может, ибо бред какой-то.
Попробуй ещё раз объяснить, что тебе нужно делать в (каком-то методе ?) TForm.
P.S. Не обижайся на "бред", но сколько можно просить, что бы ты в конце-концов нормально объяснил что тебе надо ? Кому это нужно-то ? Тебе или нам ?
Yus (2005-10-28 17:45:00) [6]отправляю полный код созданного класса.
type
TCalculateEvent = procedure(I: Integer) of object;
TSomeClass = SomeClass (TObject)
private
FOnCalculate: TCalculateEvent;
procedure DoCalculate;
public
property OnCalculate: TCalculateEvent read FOnCalculate write FOnCalculate;
end;
procedure SomeClass .DoCalculate;
begin
if Assigned(FOnCalculate) then FOnCalculate(7);
end;
Что должно быть написано в TForm, чтобы принять число 7, я не знаю о чем вас и спрашиваю.
Zacho (2005-10-28 16:54:00) [7]Yus (28.10.05 16:36) [2]
Класс TForm должена быть процедура, которая и получит число 7. Все компилируется но обрацения к процедуре нет. Возможно я ее неправильно описал в TForm. Подскажите как ее описать, чтобы к ней было обращение.
Вот в этом я ничего не понял. Попробуй сформулировать другими словами, более подробно.
И более понятно :)
Попробую телепатировать :)
Либо в твоём наследнике от TForm должно быть поле, которому в обработчике CalculateEvent должно присваиваться 7, либо метод, который должен вызываться с параметром равным 7. В любом случае, тебе как-то надо получить указатель на этот экземпляр твоего наследника TForm. Например, его можно передавать в ещё одном параметре в обработчике события. А в TSomeClass сделать поле для хранения этого указателя.
Digitman (2005-10-28 16:45:00) [8]
> Класс TForm должена быть процедура
галиматьища полная, посему нишута не понятно.
попытайся еще раз объяснить ...
Джо (2005-10-28 16:43:00) [9]
> создания класса
создания экземпляра класса
Джо (2005-10-28 16:42:00) [10]А можно полный код описания класса, создания класса и вообще манипуляции с ним? А то ничего не понятно. :(
Yus (2005-10-28 16:36:00) [11]Мной создан класс myClass при выполнении одной из процедур класса вызываутся
if Assigned(FOnCalculate) then FOnCalculate(7);
описанный
type
TCalculateEvent = procedure(I: Integer) of object;
TSomeClass = class(TObject)
private
FOnCalculate: TCalculateEvent;
public
property OnCalculate: TCalculateEvent read FOnCalculate write FOnCalculate;
Класс TForm должена быть процедура, которая и получит число 7. Все компилируется но обрацения к процедуре нет. Возможно я ее неправильно описал в TForm. Подскажите как ее описать, чтобы к ней было обращение.
Zacho (2005-10-28 15:42:00) [12]Объясни, что такое "передать событие в процедуру" и что такое "делегирование".