Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2015, 09:23   #1
drka
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 11
По умолчанию Вызов функции в зависимости от выбора

Ребят, появилась проблема. Есть форма с ComboBox. В комбобокс подгружается список сайтов через HTTPSend. В зависимости от выбранного сайта должна подгружаться функция (пишу парсер, для каждого сайта своя функция). Так вот.. Сайтов будет много, и каждый раз через if проверять какой элемент выбран в комбобоксе не рационально, есть какие предложения?
drka вне форума Ответить с цитированием
Старый 13.02.2015, 09:31   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Есть, case of
FaTaL вне форума Ответить с цитированием
Старый 13.02.2015, 09:32   #3
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Код:
    case ComboBox1.ItemIndex of
      0: Procedure_01;
      1: Procedure_02;
      2: Procedure_03;
      3: Procedure_04;
      4: Procedure_05;
      5: Procedure_06;
    end;
Iron Monk вне форума Ответить с цитированием
Старый 13.02.2015, 09:35   #4
drka
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 11
По умолчанию

Так, ещё забыл указать, что для каждого пользователя, зарегистрированного на сайте, доступны сайты, на которые он купил подписку. И в комбобокс подгружаться будут сайты не по порядку, а те которые он купил. Я case рассматривал как вариант, но мне кажется, что не подойдет
drka вне форума Ответить с цитированием
Старый 13.02.2015, 10:04   #5
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Объяви массив имён сайтов как константу. Далее для каждого Item-а ComboBox, пробегай по этому массиву. При совпадении имён, получишь индекс. Выходи из цикла через Break, и уже с индексом работай через Case. Таким образом сайты могут идти и вперемешку.
WinCoder вне форума Ответить с цитированием
Старый 13.02.2015, 10:08   #6
drka
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 11
По умолчанию

WinCoder, как константа не получится. Я же подгружаю с api сайта список
drka вне форума Ответить с цитированием
Старый 13.02.2015, 10:49   #7
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Код:
procedure _exec(s: string);
begin
ShowMessage(s);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
site: string;
begin
site:= ComboBox1.Text;
  case Pos(site, ComboBox1.Text) of
   0 : ;
   1 : _exec(site);
  end;
end;

end.
Iron Monk вне форума Ответить с цитированием
Старый 13.02.2015, 10:54   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var b: Byte;

b:=4;
ComboBox.Items.AddObject('Имя сайта',TObject(b));
или просто (1-ое естесно удобнее)
ComboBox.Items.AddObject('Имя сайта',TObject(4));
...
case Integer(ComboBox.Items.Objects[ComboBox1.ItemIndex]) of
4: тра-ля-ля;
5: другое тра-ля-ля;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.02.2015 в 10:57.
Аватар вне форума Ответить с цитированием
Старый 13.02.2015, 11:02   #9
drka
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 11
По умолчанию

Спасибо за советы разобрался. Теперь другая проблема) Функция возвращает массив записей то есть

Код:
type
   RSite = Record
         id : integer;
         name: string;
         description: string;
   end;
   Site : array of RSite;
   function parseSite(url:string):Site;

   function parseSite(url:string):Site;
   begin
            <парсит>
   end;
Все функции парсинга лежат в отдельном юните. Как я понял нужно для каждой функции объявлять свой Record ибо данные которые возвращает парсер разные.
Так вот в форме в которой по кнопке case проверяется какой сайт я выбрал - вызывается так же функция. Так как она возвращает массив записей мне придется для каждой функции объявлять отдельно новый массив записей? Или можно как нибудь более красивее решить проблему?
drka вне форума Ответить с цитированием
Старый 13.02.2015, 11:17   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

попробуй единую структуру record-a придумать с полем типа, оно поможет при обработке различать нужные и не нужные поля. Так потом удобней будет обрабатывать возвращаемый динамический массив
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в Memo значения в зависимости от выбора в ComboBox Mikayilov Помощь студентам 2 05.08.2012 13:26
передача текста в textarea в зависимости от выбора radiobutton AndreiN JavaScript, Ajax 2 24.03.2011 19:19
Подстановка значений в зависимости от выбора из списка MihailBY Microsoft Office Excel 17 08.07.2010 00:21
Показ цены в зависимости от выбора из меню Anarchist666 JavaScript, Ajax 0 10.02.2010 20:17
Выбор списка в листбоксе в зависимости от выбора в Комбоксе Артур Иваныч Microsoft Office Excel 7 13.11.2009 16:52