Главная страница
    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.008 c
1-71140
restless
2002-08-09 15:28
2002.08.22
Повернуть DBNavigator


1-71216
Ksion
2002-08-10 23:08
2002.08.22
Сравнение строчки и текста.


14-71383
Vitaly
2002-07-29 10:41
2002.08.22
Нужен Turbo Debugger для DOS а.


3-71010
vib
2002-07-31 22:10
2002.08.22
Копирование


4-71411
Izyum
2002-06-17 11:49
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский