Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.034 c
4-1127113502
Diane
2005-09-19 11:05
2005.11.20
Работа с Dialog Box из файла ресурсов


2-1130924775
Cvin
2005-11-02 12:46
2005.11.20
Минимизировать форму на панель задач


14-1130613413
Prohodil Mimo
2005-10-29 23:16
2005.11.20
Снова о Delphi 2005


1-1130322509
G0ga
2005-10-26 14:28
2005.11.20
Работа с TObjectList


2-1130857904
md
2005-11-01 18:11
2005.11.20
типы extended и integer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский