Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Checkbox  (Прочитано 4259 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Efimov Sergey
Гость
« : 27-07-2009 04:32 » 

 У меня есть пять Чекбоксов на форме для поиска. каждый добавляет необходимый параметр для поиска. так вот как их всех перебрать чтоб узнать какие включены, и какие параметры в поиске. я пишу так  if checkbox1.checked and checkbox2.checked and ... checkbox5.checked  then
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #1 : 27-07-2009 06:41 » 

Можно примерно так:
Код:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    ListParams: TStringList;
    procedure SetParams;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListParams := TStringList.Create;
end;

procedure TForm1.SetParams;
var
  i: Integer;
begin
  ListParams.Clear;
  for i := 0 to ComponentCount - 1 do
  begin
    if Components[i] is TCheckBox then
    if (Components[i] as TCheckBox).Checked then
    ListParams.AddObject(Components[i].Name, Components[i]);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ListParams.Free;
end;
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #2 : 27-07-2009 08:15 » 

допустим, речь идёт о поиске по условию, вида "(A=1) and (B=2) and (C=10)...". тогда можно сделать так:

1. объявляем массив с именами параметров:
const
  ParamCount = 5;
  ParamNames: array [1..ParamCount] of string = ('A=1', 'B=2', 'C=3', D=4', 'E=5');

2. всем чекбоксам выставляем свойство Tag от 1 до PAramCount. например, у третьего комбобокса тэг будет равен 3, ParamNames [CheckBox3.Tag] = 'C=3'.

3. далее - делаем как у zubr-а, только вместо формирования списка объектов в цикле можно формировать непосредственно список условий:

Код:
if (Components [i].Tag > 0) and (Components [i] as TCheckBox).Checked then begin
  if ConditionStr <> '' then
    ConditionStr := ConditionStr + ' and ';
  ConditionStr := ConditionStr + ParamNames [Components [i].Tag];
end;

здесь ConditionStr - обычная строковая переменная. это вариант, в общем-то, не противоречит, а дополняет вариант zubr-а. единственное, к чему там можно придраться - это использование Components вместо Controls при итерации по визуальным компонентам.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines