Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Вниз

Events   Найти похожие ветки 

 
$Hic0   (2004-05-24 18:22) [0]

Прошу вас сильно не пинайте, потому что вопрос на самом деле наверное до нельязу тупой :( В той книжке которая у меня есть по Delphi ответа на него нету поэтому пишу сюда, рисерч проведенный в сети тоже не дал ответа. Если кто знает ссылку то дайте почитать, но очень прошу не пинать :) Заранее спасибо.

В общем необходимо в одном классе объявить событие и подписать на него другой класс.
Например в классе Class1 у меня есть поле Filed1. Необходимо чтобы при изменнии значения этого поля, Class2 реагировал :)
Ну чем не тупой вопрос? :) На Дельфях уже не кодил года 3, т.к. перешел на C#,  в нем например все это решается следующим образом:
В классе Class1 пишем:

public delegate void Field1Changed(object sender, System.EventArgs e);
public event Field1Changed OnField1Changed;


В тот момент когда оно (поле) изменяется пишем
OnFieldChanged(this, new System.EventArgs());
т.е. вызываем это событие.
А Class2 подписывем на него следующим образом:
class1.OnField1Changed += new Class1.Field1Changed(Class1Field1ChangedHandler);
т.е. создаем обработчик, теперь в методе Class1Field1ChangedHandler можем делать все что угодно, и он будет вываться каждый раз когда переменная Field1 поменяет значение.

Собственна вопрос:) Как это реализовать в Delphi? Спасибо!


 
jack128 ©   (2004-05-24 18:40) [1]

TMyObject1 = class
private
 FField1: Integer;
 FOnChangeField1Events: array of TNotifyEvent;
 procedure SetField1(const Value: Integer);
protected
 procedure DoChangeProp1; virtual;
public
 property Prop1: Integer read FField1 write SetField1;
 property OnChangeProp1: TNotifyEvent read FOnChangeFiled1 write FOnChangeFiled1;
end;

TMyObject2 = class
 procedure MyHandler(Sender: TObject);
end;

procedure TMyObject1.DoChangeProp1;
begin
 if Assigned(FOnChangeField1) then
   FOnChangeField1(Self);
end;

procedure TMyObject1.SetField1(const VAlue; Integer);
begin
 FField1 := Value;
 DoChangeProp1;
end;

var
 Obj1: TMyObject1;
 Obj2: TMyObject2;
begin

...
 Obj1.OnChangeProp1 = Obj2.MyHandler;
...

end;


 
WebErr ©   (2004-05-24 18:41) [2]


class Class2
  procedure ShowMsg;
end;

class Class1
private
  FField1: TField1;
  procedure SetField1(Value: TField1);
public // или published
  property Field1: TField1 read FField1 write SetField1;
end;

var
 C1: Class1;
 C2: Class2;

...

procedure Class1.SetField1(Value: TField1);
begin
  FField1 := Value;
  C2.ShowMsg;
end;

...


 
Prohodil Mimo   (2004-05-24 18:42) [3]

Class1 = class(...)
private
  FField1:String;
  FClass:Class2;
  procedure F1Change(Value:String);
published
  Property Field1:String Read FField1 Write F1Change;
End;

Class2 = class(...)
private
  FField1:String;
published
End;

Procedure Class1.F1Change(Value:String);
Begin
 FField1:=Value;
 FClass.FField1:=FField1;
  {ili vizivat" nebhodimuju proceduru}
End;

Chto-to tipa togo.


 
Polevi ©   (2004-05-24 18:45) [4]

ручками
property Field1:integer read FField1 write SetField1

procedure SetField1(Value:integer);
begin
 if FField1<>Value then
 begin
   FField1:=Value;
   //бежим по списку callback ф-ий и вызываем их
 end;
end;


 
jack128 ©   (2004-05-24 18:48) [5]


> FOnChangeField1Events: array of TNotifyEvent;
читать как FOnChangeFiled1: TNotifyEvent


 
$Hic0   (2004-05-24 18:55) [6]

thx 2 all. Esp jack128.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.028 c
14-1084785001
olookin
2004-05-17 13:10
2004.06.06
Предусматривает ли КЗОТ?


14-1085231790
guest_Dmitry
2004-05-22 17:16
2004.06.06
Помогите разобраться с ошибкой IB


1-1085389679
ПрогерШу
2004-05-24 13:07
2004.06.06
Как у класса создать свойство - массив?


14-1084610097
Sergey Masloff
2004-05-15 12:34
2004.06.06
О танцах с бубном. Может, кому пригодится...


3-1084794227
Роман
2004-05-17 15:43
2004.06.06
Перевод с файл-сервер на клиент





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский