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

Вниз

Адрес функции   Найти похожие ветки 

 
Vint44   (2002-08-09 16:28) [0]

Подскажите пожайлуста, можно ли получить адрес функции, если она находится внутри объекта.


 
Skier   (2002-08-09 16:33) [1]

>Vint44


var
APtr : Pointer;
//................
APtr := @TYourClass.Method;
//................


 
Vint44   (2002-08-09 16:46) [2]

Спасибо сейчас компилируется, но в RunTime выдает ошибку
А если функция вне объекта, то все работает. Может подскажите в чем проблема?


 
Skier   (2002-08-09 16:49) [3]

>Vint44
А что делаешь ?


 
Vint44   (2002-08-09 16:56) [4]

Я создаю свою сортировку в TStringList через метод CustomSort
Ей требуется передававать адрес функции Compare, которая имеет параметры:

type TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;
procedure CustomSort(Compare: TStringListSortCompare); virtual;

из Help"а

Хочу запихнуть функцию Compare в свой объект, чтобы пологичней было.

Но через @TYourClass.Method кажется ее параметры не инициализируются


 
Skier   (2002-08-09 17:00) [5]

>Vint44
Покажи как вызываешь CustomSort и как объявляешь свою
функцию сортировки...




 
disco_worm   (2002-08-09 17:05) [6]

Смотрите хелп по method pointers.


 
Vint44   (2002-08-09 17:09) [7]

Функция сортировки CompareDiap:
type

TDiapTarifs=class(TStringList)
public
curDiapTarif: integer;
procedure Safe(S: TStream);
constructor Load(S: TStream);
procedure Delete(Index: Integer); override;
destructor Destroy; override;
function CompareDiap(List: TStringList;Ind1,Ind2: Integer): integer;
end;

TTarif=class(TObject)
slDT: TDiapTarifs;
constructor Create;
procedure Safe(S: TStream);
constructor Load(S: TStream);
destructor Destroy; override;
end;

var tmpTarif: TTarif;

Вызов CustomSort:
tmpTarif.slDT.CustomSort(@TDiapTarifs.CompareDiap);

Если я вытаскиваю CompareDiap из TDiapTarifs, то все работает.


 
Andrey Shakula   (2002-08-09 17:16) [8]

Ну ясно же написано что
type TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;
а не
type TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer of object;
Следствие:
Рабтать не будет



 
Vint44   (2002-08-09 17:27) [9]

т.е. если эта функция так объявлена, то она будет работать только вне объекта и вариантов здесь нет?


 
PVOzerski   (2002-08-09 18:44) [10]

Пожалуй, если объявить фиктивный класс, а в нём Ваш CustomSort как "class function", может, проблема и решится. А просто методом класса TDiapTarifs её сделать нельзя? (извините, сейчас мне немножко некогда вникать в детали).



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

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

Наверх





Память: 0.46 MB
Время: 0.013 c
3-71003
edik
2002-07-31 14:49
2002.08.22
2 Вопроса по SQL


14-71382
Yakudza
2002-07-24 14:46
2002.08.22
Привет из Коктбеля !


3-71052
Sedunov Vitaly
2002-08-01 10:07
2002.08.22
BookMark is invalid


7-71395
Ильнур
2002-06-10 14:50
2002.08.22
Работа со сканером


3-70991
AndbyOne
2002-07-31 13:17
2002.08.22
Непонятки





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