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

Вниз

Объясните на пальцах   Найти похожие ветки 

 
Сатир   (2002-11-14 13:22) [0]

TColorGetter = function(ColorName: String;BaseMap: Boolean =False): TColor of object;
что значит это объявление и как оно работает?


 
Skier   (2002-11-14 13:26) [1]

>Сатир
Энто объявление типа - объектная функция, используется
при написании событий...


 
Alx2   (2002-11-14 13:34) [2]

>Сатир © (14.11.02 13:22)
Значит, что TColorGetter должен быть методом объекта.
Соль заключается в том, что этот тип есть склейка адреса точки входа в этот код и адреса VMT (нужно для восстановления конекста объекта, чей метод вызывается). Соттветствено, занимает 8 байт.


 
Skier   (2002-11-14 13:39) [3]

>Сатир
Alx2 © (14.11.02 13:34) +
см.
TMethod = record
Code, Data: Pointer;
end;

в SysUtils.pas


 
icWasya   (2002-11-14 14:16) [4]

а кусок текста
BaseMap: Boolean =False
означает,
что вызывать этот метод можно с двумя параметрами - String и Boolean
или с одним параметром String, тогда вместо второго будет подставлено False


 
han_malign   (2002-11-14 14:32) [5]

Просили же на пальцах

type
TColorListener = class
.................
property onGetColor:TColorGetter;
....................
type
TMyClass = class
protected
ColorListener: TColorListener;
.................
function ColorGetter(ColorName: String;BaseMap: Boolean =False): TColor;
....................
procedure TColorListener.DoGetColor(ColorName: String;BaseMap: Boolean =False): TColor;
begin
if(Assigned(onGetColor))then Result:=onGetColor(ColorName,BaseMap)
else raise Exception.Create;
end;
procedure TColorListener.GetDefaultColor: TColor;
begin
if(Assigned(onGetColor))then Result:=onGetColor("Default")
else Result:=clBlack;
end;
....................
constructor TMyClass.Create;
begin
ColorListener:=TColorListener.Create;
ColorListener.onGetColor:=ColorGetter;//или @ColorGetter, как компилятор скажет
........................................



 
Сатир   (2002-11-14 15:15) [6]

2han_malign © (14.11.02 14:32)
дело в том, что этот тип не используется для объявления событий.
есть только такая ф-ция

function ComputeColor(getter:TColorGetter; ColorFunc: String): TColor;
begin
....
Result := getter(ColorFunc,BaseMap);- а как это работает?
ProcessSubFunc;
end;

а ещё есть вызов этой ф-ции
function TStyleColors.MakeColor(ColorFunc: String): TColor;
begin
Result := ComputeColor(FindColor,ColorFunc);
end;


 
Skier   (2002-11-14 15:33) [7]

>Сатир
function ComputeColor(getter:TColorGetter; ColorFunc: String): TColor;

getter - это указатель на функцию типа TColorGetter,
соответственно при вызове
ComputeColor вызвана функция FindColor.
Это называется CallBack
В кладовке есть функция копирования файлов - там тоже
используется такой подход - вполне наглядно...


 
Fantasist   (2002-11-14 21:41) [8]


> Соль заключается в том, что этот тип есть склейка адреса
> точки входа в этот код и адреса VMT (нужно для восстановления
> конекста объекта, чей метод вызывается). Соттветствено,
> занимает 8 байт.


Да нет проще. Этот тип просто содержит в себе адрес метода, который надо вызвать, и адрес объекта, который надо передать этому методу как параметр self.



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

Форум: "Основная";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
4-83051
Resheto
2002-09-28 16:09
2002.11.25
Как создать таймер который будет работать и когда комп вырублен


4-83048
kofman
2002-10-07 23:38
2002.11.25
Как зная хэндл окна программы определить имя ее экзешника?


1-82825
oomneeq
2002-11-13 18:04
2002.11.25
Визуальная ли это компонента?


14-82982
Пират
2002-11-06 17:13
2002.11.25
Пиратские программы???


1-82731
Maksss
2002-11-15 03:34
2002.11.25
TaskManager





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