Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.04.2014, 07:59
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Поиск

Народ, подскажите, мне чего то не хватает мозгов.

Есть классы. Например

Код:
Tclass1 = class;
Tclass1 = class
private
fFieldA:string;
fFieldB:string;
Next:Tclass1;
public
constructor Create(fielda, fieldb: string);
end;

Tclass1list = class
private
fFirst:Tclass1;
function Search(index:olevariant):TClass1; //функция, которая ищет экземпляр Tclass1 по индексу или по полям fFieldA:string; fFieldB:string
public
property Cl[index: olevariant]:Tclass1 read Search; default;
end;

Tclass2 = class;
Tclass2 = class
private
fFieldC:string;
Next:Tclass2;
public
constructor Create(fieldC: string);
end;

Tclass2list = class
private
fFirst:Tclass2;
function Search(index:olevariant):TClass2; //функция, которая ищет экземпляр Tclass1 по индексу или по полю fFieldC:string;
public
property Cl[index: olevariant]:Tclass2 read Search; default;
end;

Таких классов еще несколько. В каждом есть поиск. Работает он одинаково, вычисляет тип переданной переменной index и если она числовая, то выдает экземпляр с нужным индексом, если текстовая, то ищет по нужным текстовым полям.
Вопрос, как можно вынести поиск в отдельный класс или обычную функцию, чтобы не описывать для каждого класса функцию поиска?
Хотелось бы изобразить в общем виде, типа:

Код:
function Search (СтрокаПоискаИлиИндекс: olevariant; СсылкаНаПервыйЭлементfFirst:КакойТипТутУказать; СписокПолейПоКоторымИскать:ВкакомВидеПередатьТожеНеЗнаю):ТипНужногоЭкземпляраКлассаТожеНеЗнаюКакВернуть;

Если это возможно осуществить, помогите.
Ответить с цитированием
  #2  
Старый 05.04.2014, 01:59
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

У вас и так всё нормально закручено, дело лишь с распознованием типа переменной, возможно примерно так
Код:
function Search (Value: olevariant; fFirst: integer {ещё параметр}): string;
begin
case TVarData(Value).VType of
   varSmallInt,
   varInteger   : Result:= IntToStr(Value);
   varSingle,
   varDouble,
   varCurrency  : Result:= FloatToStr(Value);
   varDate      : Result:= FormatDateTime('dd/mm/yyyy', Value);
   varBoolean   : if Value then Result:= 'T' else Result:= 'F';
   varString    : Result:= Value;
   else           Result:= '';
end;

end;
совет из DRKB
Ответить с цитированием
  #3  
Старый 07.04.2014, 04:41
Аватар для morebeauty
morebeauty morebeauty вне форума
Начинающий
 
Регистрация: 21.06.2012
Сообщения: 106
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Код:
function Search (Value: olevariant; fFirst: integer {ещё параметр}): string;
Не может быть fFirst интеджером. Это экземпляр класса, среди которых осуществляем поиск. fFirst.Next - следующий. И так далее до nil'а.
Возвращать функция тоже должна экземпляр класса, который соответствует строке поиска. Но какого класса? Функция ведь должна обслуживать несколько похожих классов.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter