Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Работа с классами   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
2-1130859825
Grol
2005-11-01 18:43
2005.11.20
Удалить память выделенную под нужды компонента...


3-1128048706
Извращенец2
2005-09-30 06:51
2005.11.20
Interbase 5.6 жрет память


14-1130269405
Операция Тайд или кипечение
2005-10-25 23:43
2005.11.20
Voip


14-1130748519
Gydvin
2005-10-31 11:48
2005.11.20
UserGate - Help me


8-1119944889
Sand_man
2005-06-28 11:48
2005.11.20
конвертирование eFax в формат TIFF