Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

kast kast (статус: Посетитель), 17 июня 2009, 14:13 [#2]:

min@y, спс.
Но тут загвоздка несколько в другом. Я правлю код, есть функционал на TDBLookupComboBox, хотелось бы его переписать с наимейшими изменениями. 2 бокса уже заполнены, осталось как то, если возможно, ограничить список во втором.
min@y™

min@y™ (статус: Доктор наук), 17 июня 2009, 14:27 [#3]:

Что значит ограничить? 2-й комбобокс сделай простым TComboBox, а не TDBLookupCombobox.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:27
Выполнено за 0.03 сек.