Форум: "Основная";
Текущий архив: 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]
> KSergeyvar 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.51 MB
Время: 0.037 c