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

Вниз

Установка обработчика событий в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.038 c
3-1099493944
denis24
2004-11-03 17:59
2004.12.05
динамический report


4-1096658084
Ермак
2004-10-01 23:14
2004.12.05
Кассовый аппарат и сканер - ???


14-1100598102
sweetk
2004-11-16 12:41
2004.12.05
Как обойти дст?


1-1100429494
Артем Владимирович
2004-11-14 13:51
2004.12.05
Как сделать приложение мультиплатформенным?


1-1101217579
Dmitry_04
2004-11-23 16:46
2004.12.05
Форма в DLL с CheckBox-ом и RadioButton-ом





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