Вниз
Скачать: CL | DM;

Поиск в TList   Найти похожие ветки 

← →
Elast   (2004-12-01 17:56) [0]

Есть классы для Item и для хранения Item:
 TMyItem = class                        
   fId   : integer;
   fName : string;
   constructor Create( aId : integer; aName : string);
 end;

 TMyList = class(TList)                  
   private
     fFindProc : TMyFindProc;
     procedure AddItem(Item: TMyItem);
   public
     property FindProc : TMyFindProc read fFindProc write fFindProc;
     constructor Create;
     destructor  Destroy; override;
 end;

Я хочу построить поиск перебором в TMyList по одному из полей TMyItem, например Name.

 TMyFindProc = function (aItem: variant): Pointer;
 BSearch : TMyFindProc;

function BSearch(aItem: variant): Pointer;
var i: Integer;
   P: TMyItem;
begin
 Result := nil;
 with MyList do begin
   for i:=0 to Count-1 do begin
     P := TMyItem(Items[i]);
     If (P.fName = aItem) then begin
       Result := P;
       exit;
     end;
   end;
 end;
end;

TMyItem может наследоваться поэтому поле поиска заранее неизвестно. В BSearch есть ошибки. Возможно ли это сделать. Гда располагать BSearch? Заранее спасибо.


← →
jack128 ©   (2004-12-01 18:26) [1]

TFindedProc = function ( AItem: TMyItem): boolean of object;

function TMyList.BSearch(FindedProc: TFindedProc): Pointer;
var i: Integer;
  P: TMyItem;
begin
Result := nil;
with Self do begin
  for i:=0 to Count-1 do begin
    P := TMyItem(Items[i]);
    If FindedProc(p) then begin
      Result := P;
      exit;
    end;
  end;
end;
end;

Теперь когда те нужен поиск по имени пишешь

function TSameObj.FindByName(AItem: TMyItem): boolean;
begin
 Result := AItem.Name = FNeededName; // FNeededName - тот имя которое ты ищешь.
end;

Item := MyList.BSearch(FindByName);

нужен поиск по id

function TSameObj.FindById(AItem: TMyItem): boolean;
begin
 Result := AItem.Id = FNeededId;
end;

Item := MyList.BSearch(FindById);


← →
Elast   (2004-12-01 18:31) [2]

Спасибо. Буду пробовать.



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.027 c
4-1099055852
alexwarrior
2004-10-29 17:17
2004.12.19
VK_LBUTTON не генерится


1-1102019279
gyry-9
2004-12-02 23:27
2004.12.19
Уменшение размера программы


14-1101713605
OneFragLeft
2004-11-29 10:33
2004.12.19
Меня обманули?


14-1101515011
Andy BitOff
2004-11-27 03:23
2004.12.19
Дорогой IE, я ухожу от тебя навсегда


1-1102270323
fuzzu
2004-12-05 21:12
2004.12.19
Как автоматически создать N количество CheckBox ов?




   Наверх