Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизРабота с классами Найти похожие ветки
← →
Yus (2005-10-28 15:33) [0]Подскажите в примере как передать событие из одного класса в процедуру другого используя Делегирование
← →
Zacho © (2005-10-28 15:42) [1]Объясни, что такое "передать событие в процедуру" и что такое "делегирование".
← →
Yus (2005-10-28 16:36) [2]Мной создан класс 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. Подскажите как ее описать, чтобы к ней было обращение.
← →
Джо © (2005-10-28 16:42) [3]А можно полный код описания класса, создания класса и вообще манипуляции с ним? А то ничего не понятно. :(
← →
Джо © (2005-10-28 16:43) [4]
> создания класса
создания экземпляра класса
← →
Digitman © (2005-10-28 16:45) [5]
> Класс TForm должена быть процедура
галиматьища полная, посему нишута не понятно.
попытайся еще раз объяснить ...
← →
Zacho © (2005-10-28 16:54) [6]Yus (28.10.05 16:36) [2]
Класс TForm должена быть процедура, которая и получит число 7. Все компилируется но обрацения к процедуре нет. Возможно я ее неправильно описал в TForm. Подскажите как ее описать, чтобы к ней было обращение.
Вот в этом я ничего не понял. Попробуй сформулировать другими словами, более подробно.
И более понятно :)
Попробую телепатировать :)
Либо в твоём наследнике от TForm должно быть поле, которому в обработчике CalculateEvent должно присваиваться 7, либо метод, который должен вызываться с параметром равным 7. В любом случае, тебе как-то надо получить указатель на этот экземпляр твоего наследника TForm. Например, его можно передавать в ещё одном параметре в обработчике события. А в TSomeClass сделать поле для хранения этого указателя.
← →
Yus (2005-10-28 17:45) [7]отправляю полный код созданного класса.
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 17:58) [8]Yus (28.10.05 17:45) [7]
Что должно быть написано в TForm, чтобы принять число 7, я не знаю о чем вас и спрашиваю
А вот именно это никто понять и не может, ибо бред какой-то.
Попробуй ещё раз объяснить, что тебе нужно делать в (каком-то методе ?) TForm.
P.S. Не обижайся на "бред", но сколько можно просить, что бы ты в конце-концов нормально объяснил что тебе надо ? Кому это нужно-то ? Тебе или нам ?
← →
Джо © (2005-10-28 18:17) [9]
> [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) [10]
> 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.
← →
Джо © (2005-10-28 18:34) [11]
> [9] Джо © (28.10.05 18:17)
Тут
> procedure Button1Click(Sender: TObject);private
private случайно встрял, игнорировать.
← →
Yus (2005-10-28 19:28) [12]Да, допустил пару ошибок. Виноват....
Джо СПАСИБО, твоя подсказка, то что нужно.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.08 c