|
Вопрос # 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|