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

Вниз

наследник TObjectList   Найти похожие ветки 

 
Iriss   (2009-02-10 10:26) [0]

Есть тип TContainerPump - наследник от TObjectList

type TContainerPump = class(TObjectList)

   public constructor Create;

   public function Add    (APump: TPump): Integer;
   public function Remove (APump: TPump): Integer;
   public function IndexOf(APump: TPump): Integer;

   public function First : TPump;
   public function Last  : TPump;

   public procedure Sort(Compare: TListSortCompare);

   private function  GetItem(Index: Integer): TPump;
   private procedure SetItem(Index: Integer; APump: TPump);
   public  property Items[Index: Integer]: TPump read GetItem write SetItem; default;

end;


хочу отсортировать список
var ContainerPumps: TContainerPump;

   ContainerPumps.Sort( compareByMaxPower );


где

function TPumpsOptimal.compareByMaxPower(Pump1, Pump2: TPump) : Integer;
begin
   if ( Pump1.MaxPower > Pump2.MaxPower )
   then Result := 1
   else begin

       if Pump1.MaxPower = Pump2.MaxPower
       then Result := 0
       else Result := -1;

   end;
end;


выдает ошибку
несоответствие типов: regular procedure and method pointer

понимаю, что
TListSortCompare = function (Item1, Item2: Pointer): Integer;

у меня Item типа TPump, но не понимаю как исправить ошибку.

Подскажите, please


 
Сергей М. ©   (2009-02-10 10:31) [1]


> у меня Item типа TPump, но не понимаю как исправить ошибку


Это не имеет ни малейшего отношения к наблюдаемой тобой ошибке.


> несоответствие типов: regular procedure and method pointer


Метод Sort требует параметром адрес регулярной процедуры, а ты пытаешься скормить ему адрес метода класса.


 
Iriss   (2009-02-10 10:38) [2]

делал все вроде бы так же как здесь
http://www.delphisources.ru/pages/faq/faq_delphi_basics/TList.php.html

Просветите темного:

> адрес регулярной процедуры
что такое регулярная процедура?


 
Сергей М. ©   (2009-02-10 10:42) [3]


> Iriss   (10.02.09 10:38) [2]


> делал все вроде бы так же как здесь


Ну где же так же ?

Сравни оригинал

function compareByName(Item1 : Pointer; Item2 : Pointer) : Integer;

и своё

function TPumpsOptimal.compareByMaxPower(Pump1, Pump2: TPump) : Integer;

В чем главное отличие ?


 
Плохиш ©   (2009-02-10 10:44) [4]


> Iriss   (10.02.09 10:38) [2]
> > адрес регулярной процедуры
> что такое регулярная процедура?

Это обычная процедура, описанная в документации по языку паскаль, не являющаяся методом какого-либо класса. Пример, readln.

PS. А тебе, вообще-то, функцию надо.


 
Iriss   (2009-02-10 10:55) [5]

разобрался, спасибо большое


 
Anatoly Podgoretsky ©   (2009-02-10 11:08) [6]

> Iriss  (10.02.2009 10:38:02)  [2]

Врешь!

У тебя
function TPumpsOptimal.compareByMaxPower(Pump1, Pump2: TPump) : Integer;

а в примере
function compareByName(Item1 : Pointer; Item2 : Pointer) : Integer;



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

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

Наверх




Память: 0.48 MB
Время: 0.037 c
1-1208160423
incm
2008-04-14 12:07
2009.03.29
Как в TreeView убрать у итемсов пустое место для картинки


4-1207145739
kolj
2008-04-02 18:15
2009.03.29
Tapi -> lineanswer


15-1233183371
Германн
2009-01-29 01:56
2009.03.29
Ох уж мне эти писатели "кривых" драйверов! -2


2-1233121683
Vemer
2009-01-28 08:48
2009.03.29
Записать-прочитать файл под WinApi


2-1233734767
snake-as
2009-02-04 11:06
2009.03.29
Сделать активным окно программы