| 
| 
 | Вопрос # 2 922/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Такой вопрос, есть два компонента ВBLookupComboBox. В первом содержаться года: 2009, 2008 и т.д. Во втором значения 0, 1, 2, 3, и т.д. разницы от текущего, т.е. допустим выбран 2009 год, то во втором в текущей позиции отображается 0, выбран 2008 - во втором 1, 2007 - 2 и т.д. Как сделать, что  бы при выборе года 2-ой список формировался след образом, т.е. содержал только меньшие значения:
 2009 - 0            2008 - 0,1      2007 - 0,1,2
 
|  |   Вопрос задал: kast kast (статус: Посетитель)Вопрос отправлен: 17 июня 2009, 12:32
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Я не стал заморачиваться с TDBLookupComboBox, а просто, для примера, положил на форму 2 обычных TComboBox и написал немного кода.
 Формирование строк 1-го комбобокса:
 
 
 procedure TMainForm.FormCreate(Sender: TObject);
const
  FirstYear = 1900; // Самый старый год, для примера
var
  Y, M, D: Word;
begin
  DecodeDate(Date(), Y, M, D);
  ComboBox1.Items.BeginUpdate();
  try
    ComboBox1.Items.Clear();
 
    while Y >= FirstYear do
      begin
        ComboBox1.Items.AddObject(IntToStr(Y), TObject(Y));
        Dec(Y);
      end;
  finally
    ComboBox1.Items.EndUpdate();
  end;
 
  if ComboBox1.Items.Count <> 0
    then ComboBox1.ItemIndex:= 0;
 
  ComboBox1Click(nil);
end;Формирование 2-го комбобокса по клику на 1-м:
 
 
 procedure TMainForm.ComboBox1Click(Sender: TObject);
var
  SelectedYear: Word;
  Y, M, D: Word;
begin
  ComboBox2.Items.Clear();
  if ComboBox1.ItemIndex = -1
    then Exit;
 
  DecodeDate(Date(), Y, M, D);
  SelectedYear:= Word(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
  ComboBox2.Items.BeginUpdate();
 
  try
    while Y >= SelectedYear do
      begin
        ComboBox2.Items.Insert(0, IntToStr(Y - SelectedYear));
        Dec(Y);
      end;
  finally
    ComboBox2.Items.EndUpdate();
  end;
 
  if ComboBox2.Items.Count <> 0
    then ComboBox2.ItemIndex:= 0;
end;
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 17 июня 2009, 13:15
 
 |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 17 июня 2009, 14:27; участников в обсуждении: 3. 
|   | Вадим К (статус: Академик), 17 июня 2009, 12:53 [#1]:Можно так сделать. Надо добавить ещё Query и вписать туда соответствующий запрос (имена таблиц не известны, угадать сложно). и поставить обновление этого запроса на изменение первого комбобокса. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | kast kast (статус: Посетитель), 17 июня 2009, 14:13 [#2]:min@y, спс. Но тут загвоздка несколько в другом. Я правлю код, есть функционал на TDBLookupComboBox, хотелось бы его переписать с наимейшими изменениями. 2 бокса уже заполнены, осталось как то, если возможно, ограничить список во втором.
 |  
|   | min@y™ (статус: Доктор наук), 17 июня 2009, 14:27 [#3]:Что значит ограничить? 2-й комбобокс сделай простым TComboBox, а не TDBLookupCombobox. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |