Форум: "Основная";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
ВнизСравнение двух величин 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;
Скачать: [xml.tar.bz2];
Память: 0.63 MB
Время: 0.042 c