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

Вниз

Установка обработчика событий в SomeClass   Найти похожие ветки 

 
Pirat1   (2004-11-23 15:23) [0]

Есть класс TSomeClass, в котором есть событие OnSomeVarChanged.

Вопрос таков:
Как назначить для всех созданных обьектов TSomeClass один обработчик? и как в етом обработчике различать какой именно обьект сработал?

Пробовал писать @TSomeClass.OnSomeVarChanged := @SomeProcedure - не помогает?


 
Digitman ©   (2004-11-23 15:28) [1]


> не помогает?


тебе лучше знать, помогает или не помогает.


 
Pirat1   (2004-11-23 15:39) [2]


> Digitman


Компилятор ругаеться


 
KSergey ©   (2004-11-23 15:44) [3]

Автор, вам сюда
http://www.delphikingdom.com/helloworld/runtime_comp.htm


 
Digitman ©   (2004-11-23 15:45) [4]


> Pirat1   (23.11.04 15:39) [2]
> Компилятор ругаеться


да ты что ?!
да неужто прямо так и говорит, мол, "я ругаюсь" ?!


 
Pirat1   (2004-11-23 15:50) [5]


> Digitman

именно на ту строчку: "Method identifier expected"


 
Digitman ©   (2004-11-23 15:53) [6]


> Pirat1   (23.11.04 15:50) [5]
> именно на ту строчку: "Method identifier expected"


так ведь это - прямое руководство к действию !

тебе ж компилятор недвусмысленно намекает, мол, ожидаю идентифиватор метода некоего класса ... а ты что ему вместо метода тычешь ? или буквы буржуйские  во фразе этой тебе в принципе не ведомы ?


 
TUser ©   (2004-11-23 16:00) [7]

Обработчик события приписывается конкретному экземпляру класса. В ряде случаев можно написать
for i:=0 to self.componentcount-1 do
if self.components[i] is tsomeclass then
tsomeclass(self.components[i]).onblablabla:=someproc;
(это для наследников TControl"а, если у них общий parent).
В общем случае - отнаследоваться от класса и создавать экземпляры наследника.


 
Pirat1   (2004-11-23 16:04) [8]

Разобрался. Спасибо всем.


 
Pirat1   (2004-11-23 16:09) [9]

Ошибка была в следующем:
Надо было мне писать после создания обьекта:
TSomeClass(New_Object).OnSomeVarChanged := SomeProcedure;


 
KSergey ©   (2004-11-23 16:14) [10]

> TSomeClass(New_Object).

А выделенное - зачем?? Какого типа New_Object?


 
Pirat1   (2004-11-23 16:21) [11]


> KSergey


var New_Object : TSomeClass;
begin
New_Object := TSomeClass.Create;
TSomeClass(New_Object).OnSomeChanged := Form1.SomeProcedure;


Суть такая - мне надо при создании обьекта некого класса присвоить ему обработчики его событий. При все события OnSomeChanged каждого созданого обьекта должны быть направленны на 1 процедуру. Уже в процедуре буду проверять у какого именно обьекта сработало событие.


 
Digitman ©   (2004-11-23 16:24) [12]

а нашута, спрашивается, в ДАННОМ случае нужно приведение типа ?

строка

New_Object.OnSomeChanged := Form1.SomeProcedure;

ничуть не хуже строки

TSomeClass(New_Object).OnSomeChanged := Form1.SomeProcedure;


 
Pirat1   (2004-11-23 16:31) [13]


> Digitman ©   (23.11.04 16:24) [12]

В том конкретном случае да, но я думаю наперед.

а между New_Object := TSomeClass.Create;
и TSomeClass(New_Object).OnSomeChanged := Form1.SomeProcedure;
указатель на обьект побывает привязаным к Item-у в ListBox и потом, когда беру указатель, то New_Object у меня уже не New_Object : TSomeClass; а New_Object : Object; и поетому я использую TSomeClass(New_Object).OnSomeChanged := Form1.SomeProcedure;


 
begin...end ©   (2004-11-23 16:34) [14]


> [13] Pirat1   (23.11.04 16:31)

Но ведь ПЕРЕМЕННАЯ New_Object как была переменной типа TSomeClass, так и осталась.


 
Pirat1   (2004-11-23 16:42) [15]


> begin...end ©

Нет, как раз в том месте у меня New_Object уже New_Object : Object;


 
Digitman ©   (2004-11-23 16:46) [16]


> Pirat1   (23.11.04 16:42) [15]


вот и не вешай впредь людям лапшу !


 
Pirat1   (2004-11-23 16:49) [17]

Обясните мне пожалуйста как мне в моей классе "всунуть" ClientSocket?

Пытаюсь:
type TSomeClass = class
 private
 MySocket : TClientSocket;
 ...................
 public
 constructor Create;
 destructor Destroy;
end;

constructor TSomeClass.Create;
begin
inherited Create;
MySocket:=TClientSocket.Create;
end;

Компилятор ругаеться: "Undeclared identifier: "<element>""
TClientSocket у меня точно установлен (Delphi7)!
Как правильно?


 
Pirat1   (2004-11-23 16:51) [18]


> Digitman ©   (23.11.04 16:46) [16]


Я не вешаю!.. я в [13] написало ето! :-)


 
Anatoly Podgoretsky ©   (2004-11-23 16:52) [19]

Pirat1   (23.11.04 16:42) [15]
То есть ты предствил на заведомо неверный код.


 
Pirat1   (2004-11-23 16:54) [20]


> Anatoly Podgoretsky


не думал, что ето важная деталь, пока не понял что именно из-за етой "мелочи" у меня и ошибка!


 
Pirat1   (2004-11-23 16:59) [21]

Может ктото подсказать что у меня в [17] нетак?


 
Digitman ©   (2004-11-23 17:04) [22]


> "Undeclared identifier: "<element>""


и опять лапшу вешаешь !

в приведенном в [17] тексте нет никакого ид-ра с именем element.


 
begin...end ©   (2004-11-23 17:04) [23]


> [17] Pirat1   (23.11.04 16:49)

Может быть, следует попробовать добавить в список uses модуля, в котором объявляется TSomeClass, модуль, в котором объявлен TClientSocket?


 
Pirat1   (2004-11-23 17:09) [24]


> Digitman ©

я имеею ввиду  MySocket : TClientSocket;
на нее он ругаеться!


> begin...end ©   (23.11.04 17:04) [23]

ScktComp ???


 
Digitman ©   (2004-11-23 17:13) [25]


> имеею ввиду  


вот что имеешь, то вводи !

ид-р "TClientSocket" д.б. объявлен перед первым к нему обращением.

это - ПАСКАЛЬ !


 
begin...end ©   (2004-11-23 17:13) [26]


> [24] Pirat1   (23.11.04 17:09)


> ScktComp ???

Да.


 
Pirat1   (2004-11-23 17:16) [27]


> begin...end ©


Да, действительно!
Еще такой вопрос: MySocket := TClientSocket.Create();

Что в скобках ему указать?
Если я укажу Form1 - то будет ли он скрыт за пределами класса?
Как я уже писал:
У меня много обьектов класса, и я хочу чтобы сокет был встроен внутрь класса! (т.е. каждый обьект внутри себя будет иметь сокет)


 
Reindeer Moss Eater ©   (2004-11-23 17:18) [28]

Что в скобках ему указать?
Если я укажу Form1 - то будет ли он скрыт за пределами класса?


От этого это не зависит


 
Pirat1   (2004-11-23 17:20) [29]

а как лучше? :-)


 
Digitman ©   (2004-11-23 17:22) [30]


> Что в скобках ему указать?


что хочешь, то и укажи .. или nil ..
лишь бы "это", если не nil, было наследником TComponent


 
Pirat1   (2004-11-23 17:24) [31]


> Digitman ©

а на что ето влияет?
Обьект сокет то у меня внутри класса (покрайней мере я хочу так и его события тоже обрабатывать внутри класса).


 
Digitman ©   (2004-11-23 17:28) [32]


> Pirat1   (23.11.04 17:24) [31]


если при конструировании объекта В при вызове его конструктора в кач-ве параметра "Владелец" был указан объект А, то перед уничтожением объекта А автоматически будет уничтожен объект В


 
Pirat1   (2004-11-23 17:40) [33]

Все понял. Всем ОГРОМНОЕ спасибо!



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

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.052 c
3-1100014825
Hitman
2004-11-09 18:40
2004.12.05
Database not assigned


6-1096052283
ildar_kh
2004-09-24 22:58
2004.12.05
Отладчик РНР


4-1098450973
Lin7
2004-10-22 17:16
2004.12.05
Как узнать размер иконки на рабочем столе?


6-1095750934
Ваятель
2004-09-21 11:15
2004.12.05
WinInet - соединение с и-нетом из под прокси


14-1100632552
YurikGL
2004-11-16 22:15
2004.12.05
ICQ-пирамида?