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

Вниз

Сравнение двух величин TNotifyEvent   Найти похожие ветки 

 
Andsin   (2005-09-26 12:26) [0]

Привет!
Планирую использовать контейнер для уведомления экземляров классов о событии. Именно экземпляров, а не одного экземпляра. Пытаюсь реализовать так:

procedure Foo.AttachOnReply(AnEvent: TNotifyEvent);
var
 matched: boolean;
 i: integer;
begin
 matched := false;
 for i := 0 to Length(FEvents)-1 do
   if FEvents[i] = AnEvent then matched := true;
 if not matched then
 begin
   i := Length(FEvents);
   SetLength(FEvents, i+1);
   FEvents[i] := AnEvent;
 end;
end;

В строчке if FEvents[i] = AnEvent then matched := true; возникают две одинаковых ошибки:
[Error] foo.pas(221): Not enough actual parameters.
т.е. компилятор пытается вызвать соответствующие методы.
Могу ли я исправить код так, чтобы компилятор проверял равенство указателей на метод класса, вместо вызова?
P.S. Преобразование TNotifyEvent  к типу TMethod, на мой взгляд, не является документированной производителем, поэтому такие варианты не катят...

Спасибо!


 
alex_***   (2005-09-26 12:45) [1]

видимо так надо: if @FEvents[i] = @AnEvent


 
Andsin   (2005-09-26 13:36) [2]

сдается, что нет... так я получу лишь адреса элементов, схожих с TMethod, не более того.


 
Digitman ©   (2005-09-26 13:40) [3]


> Преобразование TNotifyEvent  к типу TMethod, на мой взгляд,
>  не является документированной производителем


это почему же ?

оч даже документирован !

и сам тип в интерф.части описан, и в справке черным по белому сказано :

This type can be used in a type cast of a method pointer to access the code and data parts of the method pointer.


 
Andsin   (2005-09-26 13:51) [4]

Я это видел. Не убедительно как-то... Про procedure of object ни слова.


 
evvcom ©   (2005-09-26 13:58) [5]


> Andsin   (26.09.05 13:51) [4]

Ну как знаешь!
А в FEvents[i] = AnEvent идет именно вызов обработчика AnEvent, а тебе нужны указатели.


 
jack128 ©   (2005-09-26 14:01) [6]

if (TMethod(FEvents[i]).Code = TMethod(AnEvent).Code) and (TMethod(FEvents[i]).Data = TMethod(AnEvent).Data) then ...


 
jack128 ©   (2005-09-26 14:05) [7]

Andsin   (26.09.05 13:51) [4]
Я это видел. Не убедительно как-то... Про procedure of object ни слова.

This type can be used in a type cast of a method pointer to access
То есть связи между "procedure of object" и "method pointer" ты не видешь?? Тогда советую подучить основы языка или терминологии. Либо там, либо там но где ты плаваешь.


 
evvcom ©   (2005-09-26 14:06) [8]


> jack128 ©   (26.09.05 14:01) [6]

лень сейчас проверять, но по-моему любое употребление AnEvent без @ (кроме банального присваивания переменной типа TNotifyEvent) будет восприниматься компилятором как вызов обработчика.


 
GuAV ©   (2005-09-26 14:15) [9]

Andsin   (26.09.05 13:36) [2]
сдается, что нет... так я получу лишь адреса элементов, схожих с TMethod, не более того.


Нифига не нет, [1] верно.

procedure TForm1.FormCreate(Sender: TObject);
var
 E1, E2: TNotifyEvent;
begin
 E1 := FormCreate;
 E2 := FormCreate;
 ShowMessage(IntToStr(SizeOf(@E1))); // output is 8
 ShowMessage(BoolToStr(@E2 = @E1, True)); // output is true
 ShowMessage(BoolToStr(@@E2 = @@E1, True)); // output is false
end;


 
andsin   (2005-09-26 14:44) [10]


> То есть связи между "procedure of object" и "method pointer"
> ты не видешь?? Тогда советую подучить основы языка или терминологии.
>  Либо там, либо там но где ты плаваешь.

слушай, но ведь procedure of object это код, а method pointer это текст в стправке. есть ли в справке что-либо, что бы их связывало, кроме их похожести?
Других методов, кроме использования явного приведения типов нет? ведь можно же проверить на равенство nil, в этом случае компилятор не пытается проверить возвращенное значение...


 
andsin   (2005-09-26 14:51) [11]

авторы [1] и [9], вы абсолютно правы. только надо было мне это в справке показать. вот что я наарыл
f F = MyFunction then ...;

In this case, the occurrence of F results in a function call; the compiler calls the function pointed to by F, then calls the function MyFunction, then compares the results. The rule is that whenever a procedural variable occurs within an expression, it represents a call to the referenced procedure or function. In a case where F references a procedure (which doesn’t return a value), or where F references a function that requires parameters, the statement above causes a compilation error. To compare the procedural value of F with MyFunction, use

if @F = @MyFunction then ...;

@F converts F into an untyped pointer variable that contains an address, and @MyFunction returns the address of MyFunction.
To get the memory address of a procedural variable (rather than the address stored in it), use @@. For example, @@F returns the address of F.

это из справки по оператору @
всем спасибо, вопрос решен.


 
Digitman ©   (2005-09-26 14:51) [12]


> ведь можно же проверить на равенство nil, в этом случае
> компилятор не пытается проверить возвращенное значение


да, можно.
потому что компилятор при этом делает неявное приведение именно к типу TMethod

когда ты объявляешь поле класса/структуры как procedure..of object, компилятор резервирует под это поле область памяти со структурой TMethod.


 
jack128 ©   (2005-09-26 15:11) [13]

andsin   (26.09.05 14:44) [10]
procedure of object это код


Да ??? А всегда думал, что полдобная конструкция используюется при объявлении ТИПА. Переменная этого типа хранит в себе УКАЗАТЕЛЬ на код, а так же Self.


 
jack128 ©   (2005-09-26 15:12) [14]

jack128 ©   (26.09.05 15:11) [13]
А я всегда думал, что подобная конструкция используется


 
Andsin   (2005-09-26 16:03) [15]


> Да ??? А всегда думал, что

если сейчас вы так не думаете, то напрасно. я имелл ввиду, что procedure of object мы пишем в исходниках, а method pointer написано в хелпе. очень хочется найти явное взаимно-однозначное соответствие написанному в исходниках(для обозначения оного я использовал слово код, которое вам почему-то не понравилось) написанному в хелпах. чего и удалось достичь благодаря alex_*** и GuAV.
З.Ы. Заметьте, я не стал придираться к вашей нелепой фразе относительно того, что переменная типа TNotifyEvent содержит Self.


 
evvcom ©   (2005-09-26 20:20) [16]


> слушай, но ведь procedure of object это код, а method pointer
> это текст в стправке

Тоже придирусь. И то, и другое - это текст. Но первый используется в коде для описания типа, а второй является обобщением для первого и еще function of object. А это действительно описано в терминологии, что и советовал jack128 ©   (26.09.05 14:05) [7] подучить.

> Заметьте, я не стал придираться к вашей нелепой фразе относительно
> того, что переменная типа TNotifyEvent содержит Self.

И чем же эта фраза нелепа? Переменная типа TNotifyEvent действительно содержит 2 двойных слова (точно также как и TMethod): адрес обработчика и указатель на объект, в контексте которого будет вызван этот обработчик, т.е. Self.
Вообще, я бы посоветовал тем, кто начинает работать с указателями тем или иным образом, почаще открывать CPU Window и вникать, что и почему.


 
Defunct ©   (2005-09-27 06:17) [17]

ps: Самое правильное решение imho jack128 ©   (26.09.05 14:01) [6]
все остальное от лукавого. Особенно @ - вообще ничего не даст.

Andsin   (26.09.05 16:03) [15]
З.Ы. Заметьте, я не стал придираться к вашей нелепой фразе относительно того, что переменная типа TNotifyEvent содержит Self.

Фраза не так уж нелепа как могло показаться. TMethod( NotifyEvent).data и есть тот самый Self.

> Andsin
> if @F = @MyFunction then
так лучше не делать, т.к. методы разных экземляров так выявить не удастся. С помощью ссылки "@" получите только указатель на метод класса.


 
evvcom ©   (2005-09-27 08:29) [18]


> Фраза не так уж нелепа как могло показаться

неведающему. Не надо всех сюда грести.


 
Lamer@fools.ua ©   (2005-09-27 09:19) [19]

>>Defunct ©   (27.09.05 06:17) [17]

>Фраза не так уж нелепа как могло показаться. TMethod( NotifyEvent).data и есть тот самый Self.

Оне не нелепа. Просто некорректна.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TSomeObj = class(TObject)
 public
   procedure OnFormClick(Sender: TObject);
 end;

 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   FSomeObj: TSomeObj;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TSomeObj }

procedure TSomeObj.OnFormClick(Sender: TObject);
begin
 ShowMessage("Ку!");
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FSomeObj := TSomeObj.Create;
 try
   OnClick := FSomeObj.OnFormClick; // И совсем здесь не Self, а FSomeObj.
 except
   OnClick := nil;
   FreeAndNil(FSomeObj);
   raise;
 end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 OnClick := nil;
 FreeAndNil(FSomeObj);
end;

end.


 
andsin   (2005-09-27 09:35) [20]


> И чем же эта фраза нелепа? Переменная типа TNotifyEvent
> действительно содержит 2 двойных слова (точно также как
> и TMethod): адрес обработчика и указатель на объект, в контексте
> которого будет вызван этот обработчик, т.е. Self.

Если прочитаете справку по self,  поймете, что это указатель на экземпляр класса, доступный из методов класса. Нелепость в том, что TNotifyEvent будет содержать Self, только в том случае, если из метода какого- либо класса написать примерно следующее

begin
 Form1.OnShow := Self.FormShow;
end;


> Вообще, я бы посоветовал тем, кто начинает работать с указателями
> тем или иным образом, почаще открывать CPU Window и вникать,
>  что и почему.

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

отладка кода на строчке  if @F = @MyFunction then дала отрицательный результат. действительно, содержимое указателя на екземпляр класса не анализируется.
Получается, что без преобразования типов не обойтись, чтоли?


 
andsin   (2005-09-27 09:39) [21]

И вижу, что находится масса людей, которая не вникла в суть вопроса... повторю вопрос:
Существует ли документированный способ сравнения двух величин типа TNotifyEvent. Преобразование к типу TMethod прошу не предлагать.


 
Leonid Troyanovsky ©   (2005-09-27 09:55) [22]


> andsin   (27.09.05 09:39) [21]

> Существует ли документированный способ сравнения двух величин
> типа TNotifyEvent. Преобразование к типу TMethod прошу не
> предлагать.


Экий ты настырный. Проверок типа
 
if (TMethod(Value).Code <> TMethod(OnExecute).Code) or
    (TMethod(Value).Data <> TMethod(OnExecute).Data) then

полная VCL огурцов (еще от царя Гороха).
Чего там еще документировать?
Ну, или попроси разрешения у борландов напрямую.

--
Regards, LVT.

ЗЫ И, вообще, "использовать контейнер для уведомления экземляров классов о событии" мне представляется неудачной задумкой.


 
andsin   (2005-09-27 10:07) [23]


> "использовать контейнер для уведомления экземляров классов
> о событии" мне представляется неудачной задумкой

что-нить лучше подсказать можете?


 
Digitman ©   (2005-09-27 10:28) [24]


> Существует ли документированный способ сравнения двух величин
> типа TNotifyEvent. Преобразование к типу TMethod прошу не
> предлагать


да на здоровье !

if CompareMem(@Event1, @Event2, SizeOf(TNotifyEvent)) then ..

как видишь, никаких преобразований к типу TMethod нет и в помине ..

но суть от этого НЕ изменилась - по прежнему сравнивается содержимое областей памяти, занятых структурами типа TMethod


 
Leonid Troyanovsky ©   (2005-09-27 11:13) [25]


> andsin   (27.09.05 10:07) [23]

> > "использовать контейнер для уведомления экземляров классов
> > о событии" мне представляется неудачной задумкой

> что-нить лучше подсказать можете?


Все уже украдено до нас.
Начиная от уведомлений TControl лежащих на TWinControl
(например, компонентные сообщения),  
и  до COM+ "издатель-подписчик".

--
Regards, LVT.


 
evvcom ©   (2005-09-27 11:21) [26]


> OnClick := FSomeObj.OnFormClick; // И совсем здесь не Self,
>  а FSomeObj.

Это в TForm1.FormCreate здесь действительно не Self. А когда вызовется твой FSomeObj.OnFormClick, там это будет уже Self.

> Да, так можно знаешь до чего довникаться... Нет, справка
> это единственный источник информации

Ну? До чего можно довникаться?
Если справка - единственный источник информации, то чего же ты делаешь на этом форуме?


 
andsin   (2005-09-27 12:19) [27]


> Ну? До чего можно довникаться?

Ответ на этот вопрос предлагаю найти в качестве упражнения.

> Если справка - единственный источник информации, то чего
> же ты делаешь на этом форуме?

Я же писал, ищу документированный способ осуществить сравнение.
Тема закрыта, в общем.


 
Lamer@fools.ua ©   (2005-09-27 13:29) [28]

>>andsin   (27.09.05 12:19) [27]

Читать [3]. До полного просветления.


 
evvcom ©   (2005-09-27 13:55) [29]


> Lamer@fools.ua ©   (27.09.05 13:29) [28]

Думаю, не поможет. Это хронический случай с летальным исходом. :(


 
andsin   (2005-09-27 14:29) [30]

да, вынужден констатировать, что не смотря на наличие правильных ответов в постах людей, вменяемым стоит признать не многих,  Leonid Troyanovsky, например.
Lamer@fools.ua,  evvcom для вас отдельно повторю, что тема закрыта, вопрос понятен, решение получено. вам понятно?


 
Digitman ©   (2005-09-27 14:35) [31]


> andsin   (27.09.05 14:29) [30]


напрасно пальцы гнешь.

если тему закрыл, то "уходя - уходи".

если иначе, то  поостерегись упоминать всуе про "вменяемость". иначе тебе грозит LMD-диагноз


 
andsin   (2005-09-27 15:04) [32]

Digitman, ты еще жив? :)))


 
Digitman ©   (2005-09-27 15:22) [33]


> andsin   (27.09.05 15:04) [32]


а что, уже пули свистели ?)


 
andsin   (2005-09-27 15:29) [34]

ё- да тут не только пули... тут уже и раки на горе свистели.
реализовал через приведение к TMethod. не нравится. :( а куда деваться?
всем спасибо за помощь. :)


 
Digitman ©   (2005-09-27 15:35) [35]


> andsin   (27.09.05 15:29) [34]


> реализовал через приведение к TMethod


ну я ж тебе сказал в [24] - НИКТО не обязывает тебя заниматься какими-то там "приведениями" ! НЕТ там никаких упоминаний о TMethod, коль скоро уж они тебя напрягают)

чем не устраивает-то такой вариант ?

и ЧТО тебе непонятно в СУТИ работы компилятора, когда он имеет дело с методами объектов, тобой тем или иным образом объявляемых ?


 
andsin   (2005-09-27 15:47) [36]

а, вот ты о чем... так в [24] ты наерундил, мягко говоря.
коротенькая программка тебя в этом убедит.

procedure TForm1.FormCreate(Sender: TObject);
begin
 ShowMessage(IntToStr(sizeof(TNotifyEvent)-sizeof(@Form1.OnClick)));
end;

если нет, пиши. :)
а непонятно то, как сравнивать встроенный тип procedure of object без приведений, которые я ненавижу. т.к. тип procedure of object встроен, то, я считаю, должен быть встроен и TNotifyEvent::operator==, извини за С++ еквивалент.


 
Lamer@fools.ua ©   (2005-09-27 15:59) [37]

>я считаю, должен быть встроен и TNotifyEvent::operator==, извини за С++ еквивалент.

Delphi-программист считает, а Борланд располагает  :o)


 
andsin   (2005-09-27 16:10) [38]


> Lamer@fools.ua ©   (27.09.05 15:59) [37]
>
> Delphi-программист считает, а Борланд располагает  :o)

ага. а на начало топика я этого не знал.


 
Digitman ©   (2005-09-27 16:29) [39]


> andsin   (27.09.05 15:47) [36]


> наерундил, мягко говоря


нет, ну ты точно напрашиваешься на LMD))..

"наерундил", говоришь ?

так.
поехали бомбить тебя)

слушай сюда:

sizeof(@Form1.OnClick);

вот это ЖИРНОЕ @ видишь ? разуй лупетки-то )

это ж - АДРЕС структуры !

а адрес в 32-битном ВАП Win32-процесса  - 32-хбитный же) ...т.е. = 4 )

и с какого перепугу размер структуры TMethod (= 8 байт) вдруг будет равен размеру адреса чего-то там  в 32-битном адресном пространстве (= 4 байта) ?


 
evvcom ©   (2005-09-27 16:41) [40]


> andsin   (27.09.05 15:47) [36]

Ты бы еще размер миллионного массива сравнил бы с адресом его начала! А потом бы Борланду претензии предъявил. :)
LMD АднАзначнА! :-)


 
andsin   (2005-09-27 16:42) [41]

ну долго ты думал...
бомбить будем твой пост [24] что ты там пишешь?
if CompareMem(@Event1, @Event2, SizeOf(TNotifyEvent)) then
а пишешь ты там сравнивать память по адресам, взятым из двух указателей, размер которых, как ты правильно пишешь равен 4, причем сравнивать просишь sizeof(TNotifyEvent) =8 байт.
не наерундил?


 
andsin   (2005-09-27 16:50) [42]

а, к стати, да не наерундил в размерностях, это я действительно зря.
но все равно наедрундил, т.к. Event1 вполне имеет право быть nil. сам понимаешь, что в этом случае будет.


 
Digitman ©   (2005-09-27 16:55) [43]


> andsin   (27.09.05 16:42) [41]



> бомбить будем твой пост [24] что ты там пишешь?


ну рискни)...


> сравнивать память по адресам, взятым из двух
> указателей, размер которых, как ты правильно пишешь равен
> 4, причем сравнивать просишь sizeof(TNotifyEvent) =8 байт


Нет.

Я сравниваю содержимое двух областей памяти, адрес каждой из которых мне вычислит компилятор и размер каждой из которых равен sizeof(TNotifyEvent)=8 байт.

НИКАКИХ TMethod"ов здесь явно не упоминается (как ты и просил собственно в [21])

Но при этом TMethod"ы здесь неявно присутствуют, и быть иначе не может !


> не наерундил?


Где ?!

Тебе уже 40 с лишним постов долдонят. что компилятор резервирует под размещение инф-ции о методе объекта 8 байт !

Те самые 8 байт, что и составляет любая структура типа TMethod !


 
Digitman ©   (2005-09-27 16:57) [44]


> andsin   (27.09.05 16:42) [41]



> бомбить будем твой пост [24] что ты там пишешь?


ну рискни)...


> сравнивать память по адресам, взятым из двух
> указателей, размер которых, как ты правильно пишешь равен
> 4, причем сравнивать просишь sizeof(TNotifyEvent) =8 байт


Нет.

Я сравниваю содержимое двух областей памяти, адрес каждой из которых мне вычислит компилятор и размер каждой из которых равен sizeof(TNotifyEvent)=8 байт.

НИКАКИХ TMethod"ов здесь явно не упоминается (как ты и просил собственно в [21])

Но при этом TMethod"ы здесь неявно присутствуют, и быть иначе не может !


> не наерундил?


Где ?!

Тебе уже 40 с лишним постов долдонят. что компилятор резервирует под размещение инф-ции о методе объекта 8 байт !

Те самые 8 байт, что и составляет любая структура типа TMethod !


 
umbra ©   (2005-09-27 17:01) [45]


> компилятор резервирует под размещение инф-ции о методе объекта
> 8 байт


и 4 из них - указатель на код процедуры, а 4 - на владельца процедуры!

> Form1.OnClick

Form1 - указатель на владельца
OnClick - указатель на код

Приведение типов уже произошло при запуске программы!


 
Digitman ©   (2005-09-27 17:06) [46]


> umbra ©   (27.09.05 17:01) [45]


> владельца процедуры


о боже)..

хрен редьки не слаще)

НЕТ у процедуры никаких "владельцев" !

и быть не может)


 
Digitman ©   (2005-09-27 17:10) [47]


> umbra ©   (27.09.05 17:01) [45]


> владельца процедуры


о боже)..

хрен редьки не слаще)

НЕТ у процедуры никаких "владельцев" !

и быть не может)


 
andsin   (2005-09-27 17:17) [48]

и вторая ерунда в твоем подходе обнаружилась - твой метод не различает объектов. чтобы не быть голословным, приведу код.
1.
 Form1.OnShow := nil;
 CompareMem(@Form1.OnShow, @Form1.OnShow, 4); //здесь прога гибнет


2.
 Form1.OnShow := Button1Click;
 Form2.OnHide := Button1Click;
 CompareMem(@Form1.OnShow, @Form2.OnHide, 4);//возвращает true;

убедил наконец?


 
Германн ©   (2005-09-27 17:18) [49]

По LMD удобнее стрелять дуплетом?


 
umbra ©   (2005-09-27 17:24) [50]

вообще-то я писал andsin

а насчет владельцев - хорошо, не владельцы, а ассоциированные объекты.

A method is a procedure or function associated with a class. A call to a method specifies the object (or, if it is a class method, the class) that the method should operate on.

перевод

Метод - процедура или функция, связанная с классом. В Вызове метода указывается объект (или, если это - метод класса, класс), в котором метод должен выполняться.


 
Digitman ©   (2005-09-27 17:25) [51]


> andsin   (27.09.05 17:17) [48]


да какое мне дело до твоих "объектов" ?!)

это уже твои проблемы - существуют объекты или нет)

ты спросил, КАК сравнить два значения типа TNotifyEvent БЕЗ приведения к TMethod - я тебе и ответил) ... чем ты не доволен ?))

а тебя понесло в совершенно иной огород)

ну РАЗУМЕЕТСЯ, что если объекта Form1 не существует (т.е. в дан.случае переменная Form1, содержащая nil, НЕ ссылается НИ на какой объект), то БЕССМЫСЛЕННО пытаться определять адрес некоего поля в несуществующей структуре несуществующего же объекта !

так что убеждать кого-то в очевидном - себе дороже станет)


 
umbra ©   (2005-09-27 17:29) [52]


> //здесь прога гибнет

она и не может не погибнуть. ты просишь ее читать из недоступного адреса. а во втором - из доступного (сам присваиваешь!)


 
andsin   (2005-09-27 17:38) [53]


> ну РАЗУМЕЕТСЯ, что если объекта Form1 не существует (т.е.
>  в дан.случае переменная Form1, содержащая nil, НЕ ссылается
> НИ на какой объект), то БЕССМЫСЛЕННО пытаться определять
> адрес некоего поля в несуществующей структуре несуществующего
> же объекта !
>
> так что убеждать кого-то в очевидном - себе дороже станет)
>

нет, ну что ты? я бы не стал тебя так обманывать. мало того, что Form1 существует и указывает на реальную форму, этот код губит прогу в обработчике Form1.Button1.OnClick. проверь.

> ты спросил, КАК сравнить два значения типа TNotifyEvent БЕЗ
> приведения к TMethod - я тебе и ответил) ... чем ты не доволен
> ?))

тем, что не сравнивает!!!!!!!!!! смотри п.2 из [48].


 
Verg ©   (2005-09-27 17:53) [54]

Да, блин,....
... оператор @ действует в этом случае не "в лоб". Он возвращает значение поля code эквивалентной структуры TMethod, а не адрес памяти, где эта структура хранится!


> 1.
>  Form1.OnShow := nil;
>  CompareMem(@@Form1.OnShow, @@Form1.OnShow, 4); //здесь прога
> не гибнет


 
andsin   (2005-09-27 18:05) [55]

правда случай 2 из [48] все равно возвращает true.


 
Digitman ©   (2005-09-27 18:13) [56]


> andsin   (27.09.05 17:38) [53]


добавь "барана" к @Form1.OnXXX ...


 
Суслик ©   (2005-09-27 18:14) [57]

maniaki


 
Digitman ©   (2005-09-27 18:14) [58]


> andsin   (27.09.05 18:05) [55]


а ПОЧЕМУ он НЕ должен возвращать True ?


 
andsin   (2005-09-28 09:26) [59]


> добавь "барана" к @Form1.OnXXX ...

а про двух баранов ты где в справке прочитал? и в [24] у тебя один баран.


 
andsin   (2005-09-28 09:36) [60]

к стати, с двумя @ работает правильно.  
итак, есть два способа, оказывается - приведение к Tmethod и CompareMem(@@Event....


 
Verg ©   (2005-09-28 09:42) [61]

Темы
"The @ operator", "Procedural types in statements and expressions"

"Справка" называется  Object Pascal Language Guide

P.S. Английским можно овладеть пользуясь словарем, как думаешь?



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

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

Наверх




Память: 0.65 MB
Время: 0.031 c
14-1127831750
LordOfRock
2005-09-27 18:35
2005.10.16
Metallica


5-1102767773
alo
2004-12-11 15:22
2005.10.16
как перенести свойство предка из published в public?


14-1127833083
Gorger
2005-09-27 18:58
2005.10.16
Что бы это могло означать,помогите тупому.


14-1127207416
Ega23
2005-09-20 13:10
2005.10.16
Кто завтра будет на лекции Вирта?


14-1127354105
SPeller
2005-09-22 05:55
2005.10.16
Правовой вопрос