Topic: Комбобокс и не только
Привет. На форме есть комбобокс, который содержит 5 значений, скажем А, Б, В, Г и Д. Надо чтобы при нажатии на кнопку 1 автоматически было выбрана А, на 2 - Б, и так далее.
My Visual Database → Russian → Комбобокс и не только
Привет. На форме есть комбобокс, который содержит 5 значений, скажем А, Б, В, Г и Д. Надо чтобы при нажатии на кнопку 1 автоматически было выбрана А, на 2 - Б, и так далее.
procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
Form1.ComboBox1.ItemIndex := Form1.ComboBox1.Items.IndexOf('А');
end;
procedure Form1_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
Form1.ComboBox1.ItemIndex := Form1.ComboBox1.Items.IndexOf('Б');
end;
Извините, но я хотел сказать не на кнопку 1 а просто на 1, т.е. в комбо когда я нажимаю 1 а там выбирается 1-А. Как то так.
Тогда так
procedure Form1_ComboBox1_OnKeyPress (Sender: string; var Key: Char);
begin
if Key='1' then Form1.cbGroups.ItemIndex := Form1.cbGroups.Items.IndexOf('A');
if Key='2' then Form1.cbGroups.ItemIndex := Form1.cbGroups.Items.IndexOf('B');
end;
Ув. Дмитрий. На форме есть комбобокс, который содержит:
Не указано
Мужчина
Женщина
Надо чтобы при Form1_OnShow содержимое было так:
0 - Не указано
1 - Мужчина
2 - Женщина
Также при нажатии на 1 в комбо выбралась 1-Мужчина, при нажатии 2 выбралась 2-Женщина и при нажатии 0 выбралась 0-Не указано.
Спс.
pha1984
Приложите пожалуйста ваш проект, с описанием, для какого точно ComboBox-а и на какой форме необходимо реализовать это.
смотрите на NovayaForma, там первая вкладка где указан пол (комбобокс)
смотрите на NovayaForma, там первая вкладка где указан пол (комбобокс)
Готово.
Обратите внимание на событие
procedure NovayaForma_OnKeyDown (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
получается, что каждый раз когда вы печатаете что то, в этом событии обновляются содержимое многих TableGrid, что приводит к тормозам, с какой целью это сделано? я пока закоментировал участок кода, который замедляет работу программы на данной форме.
Если вы имеете ввиду это
procedure NovayaForma_OnKeyDown (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
if (Ctrl) and (Key=ord('G')) then Groups.ShowModal;
if (Ctrl) and (Key=ord('O')) then frmOper.ShowModal;
if (Ctrl) and (Key=ord('D')) then frmDiagnose.ShowModal;
frmOper.TableGrid1.dbUpdate;
frmOper.TableGrid2.dbUpdate;
frmOper.TableGrid3.dbUpdate;
frmOper.TableGrid4.dbUpdate;
frmDiagnose.TableGrid1.dbUpdate;
frmDiagnose.TableGrid2.dbUpdate;
frmDiagnose.TableGrid3.dbUpdate;
frmDiagnose.TableGrid4.dbUpdate;
Groups.TableGrid1.dbUpdate;
Groups.TableGrid2.dbUpdate;
Groups.TableGrid3.dbUpdate;
Groups.TableGrid4.dbUpdate;
Groups.TableGrid5.dbUpdate;
Groups.TableGrid6.dbUpdate;
Groups.TableGrid7.dbUpdate;
Groups.TableGrid8.dbUpdate;
Groups.TableGrid9.dbUpdate;
Groups.TableGrid10.dbUpdate;
Groups.TableGrid11.dbUpdate;
Groups.TableGrid12.dbUpdate;
end;
то она типа справочника служит для меня
кстати при нажатии на ctrl + D долго открывается frmDiagnose, я так заметил что в frmDiagnose.Tablegrid4 иммется 58000 записей и более, поэтому происходит тормоз. Как быть с этим?
кстати при нажатии на ctrl + D долго открывается frmDiagnose, я так заметил что в frmDiagnose.Tablegrid4 иммется 58000 записей и более, поэтому происходит тормоз. Как быть с этим?
по умолчанию можно не показывать все записи, например только 500
frmDiagnose.TableGrid4.dbLimit := 500;
также сделать кнопку, которая позволит при необходимости показать все записи
frmDiagnose.TableGrid4.dbLimit := 0;
frmDiagnose.TableGrid4.dbUpdate;
но все равно же при нажатии этой кнопки будут тормза, не так ли?
нет.
А можно ли вместо
procedure Form1_ComboBox1_OnKeyPress (Sender: string; var Key: Char);
begin
if Key='1' then Form1.cbGroups.ItemIndex := Form1.cbGroups.Items.IndexOf('A');
if Key='2' then Form1.cbGroups.ItemIndex := Form1.cbGroups.Items.IndexOf('B');
end;
писать вот так:
procedure Form1_ComboBox1_OnKeyPress (Sender: string; var Key: Char);
begin
if Key='1' then Form1.cbGroups.dbItemID:= 1;
if Key='2' then Form1.cbGroups.dbItemID:= 2;
if Key='3' then Form1.cbGroups.dbItemID:= 3;
end;
и чем они отличаются?
pha1984
Оба варианта рабочие.
первый вариант выбирает запись на основе его текстового содержимого, а второй вариант выбирает запись на основе идетификатора записи (id)
я тут заметил что при удалении нижнего скрипта:
procedure NovayaForma_cbSex_OnKeyPress (Sender: string; var Key: Char);
begin
if Key='0' then NovayaForma.cbSex.ItemIndex := NovayaForma.cbSex.Items.IndexOf('0 - Не указано');
if Key='1' then NovayaForma.cbSex.ItemIndex := NovayaForma.cbSex.Items.IndexOf('1 - Мужчина');
if Key='2' then NovayaForma.cbSex.ItemIndex := NovayaForma.cbSex.Items.IndexOf('2 - Женщина');
end;
находясь на NovayaForma.cbSex и нажатие на 0, 1 и 2 работают и без этого скрипта, почему так?
pha1984
видимо ComboBox уже имеет данный функционал, выбирается запись, которая соответствует нажатой клавиши и первому символу, в данном случае как раз 0, 1, 2
кстати в этом скрипте я сделал как вы сказали но в гриде4 ничего не показывает, только по нажатию на кнопки показывает 58000 записей с тормозами
procedure NovayaForma_OnKeyDown (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
if (Ctrl) and (Key=ord('G')) then Groups.ShowModal;
if (Ctrl) and (Key=ord('O')) then frmOper.ShowModal;
if (Ctrl) and (Key=ord('D')) then frmDiagnose.ShowModal;
frmOper.TableGrid1.dbUpdate;
frmOper.TableGrid2.dbUpdate;
frmOper.TableGrid3.dbUpdate;
frmOper.TableGrid4.dbUpdate;
frmDiagnose.TableGrid1.dbUpdate;
frmDiagnose.TableGrid2.dbUpdate;
frmDiagnose.TableGrid3.dbUpdate;
frmDiagnose.TableGrid4.dbLimit := 500;
Groups.TableGrid1.dbUpdate;
Groups.TableGrid2.dbUpdate;
Groups.TableGrid3.dbUpdate;
Groups.TableGrid4.dbUpdate;
Groups.TableGrid5.dbUpdate;
Groups.TableGrid6.dbUpdate;
Groups.TableGrid7.dbUpdate;
Groups.TableGrid8.dbUpdate;
Groups.TableGrid9.dbUpdate;
Groups.TableGrid10.dbUpdate;
Groups.TableGrid11.dbUpdate;
Groups.TableGrid12.dbUpdate;
end;
procedure frmDiagnose_Button14_OnClick (Sender: string; var Cancel: boolean);
begin
frmDiagnose.TableGrid4.dbLimit:=0;
frmdiagnose.TableGrid4.dbUpdate;
end;
попробуйте так
procedure NovayaForma_OnKeyDown (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
if (Ctrl) and (Key=ord('G')) then Groups.ShowModal;
if (Ctrl) and (Key=ord('O')) then frmOper.ShowModal;
if (Ctrl) and (Key=ord('D')) then
begin
frmDiagnose.TableGrid4.dbLimit := 500;
frmDiagnose.TableGrid4.dbUpdate;
frmDiagnose.ShowModal;
end;
frmOper.TableGrid1.dbUpdate;
frmOper.TableGrid2.dbUpdate;
frmOper.TableGrid3.dbUpdate;
frmOper.TableGrid4.dbUpdate;
frmDiagnose.TableGrid1.dbUpdate;
frmDiagnose.TableGrid2.dbUpdate;
frmDiagnose.TableGrid3.dbUpdate;
Groups.TableGrid1.dbUpdate;
Groups.TableGrid2.dbUpdate;
Groups.TableGrid3.dbUpdate;
Groups.TableGrid4.dbUpdate;
Groups.TableGrid5.dbUpdate;
Groups.TableGrid6.dbUpdate;
Groups.TableGrid7.dbUpdate;
Groups.TableGrid8.dbUpdate;
Groups.TableGrid9.dbUpdate;
Groups.TableGrid10.dbUpdate;
Groups.TableGrid11.dbUpdate;
Groups.TableGrid12.dbUpdate;
end;
и все же я не вижу смысла в обновлении гридов, при каждом нажатии на кнопку
frmOper.TableGrid1.dbUpdate;
frmOper.TableGrid2.dbUpdate;
frmOper.TableGrid3.dbUpdate;
frmOper.TableGrid4.dbUpdate;
frmDiagnose.TableGrid1.dbUpdate;
frmDiagnose.TableGrid2.dbUpdate;
frmDiagnose.TableGrid3.dbUpdate;
Groups.TableGrid1.dbUpdate;
Groups.TableGrid2.dbUpdate;
Groups.TableGrid3.dbUpdate;
Groups.TableGrid4.dbUpdate;
Groups.TableGrid5.dbUpdate;
Groups.TableGrid6.dbUpdate;
Groups.TableGrid7.dbUpdate;
Groups.TableGrid8.dbUpdate;
Groups.TableGrid9.dbUpdate;
Groups.TableGrid10.dbUpdate;
Groups.TableGrid11.dbUpdate;
Groups.TableGrid12.dbUpdate;
а как вы советуете это сделать? Мне надо чтобы при показе формы данные показались в гриде
данные в гридах обновляются автоматически на форме, если форма была вызвана с помощью кнопки с действием "Показать форму"
если форма показывается с помощью скрипта, то непосредственно перед этим и можно обновить гриды, например
frmOper.TableGrid1.dbUpdate;
frmOper.TableGrid2.dbUpdate;
frmOper.TableGrid3.dbUpdate;
frmOper.TableGrid4.dbUpdate;
frmOper.ShowModal;
Ну у меня ведь так и есть что при нажатии ctrl+D формы обновляются, я не понимаю в чем вы не видите смысла
Возник другой вопрос
На форме имеется 3 комбо, они связаны между собой как в проекте Linked lists
Надо чтобы при form1_onshow было вот так
Form1.k1.dbitemid:=3;
Form1.k2.dbparentcombo:='k1';
Form1.k1.doonchange;
Form1.k3.dbparentcombo:='k2';
Form1.k2.doonchange;
Теперь когда открываю form1 то в k1 показывает третью запись но k2 и k3 не реагируют, т.е. они показываются пустыми. А надо чтобы в к2 показалась запись связанная с третьей записью к1 и в к3 показалась запись связанная с к2. Как быть?
pha1984
Приложите пожалуйста проект, посмотрю.
В форме NovayaForma имеется 3 комбобокса - область, район и насел. пункт. Они связаны между собой.
1. При NovayaForma_OnShow надо чтобы в комбо Область была id=3 т.е. Хатлонская область, в комбо Район соответственно НЕ УКАЗАНО и в комбо Насел. пункт соответственно НЕ УКАЗАНО.
2. Поправьте связи между таблицей Osnova и Oblast, чтобы каждая запись из таблицы Osnova имела связь с тремя другими таблицами. Т.е. регистрирую пациента в больнице и он принадлежит к определенной области, определенного района который связан с областью, и определенным насел. пунктом, связанным с районом. Надеюсь смог объяснить.
My Visual Database → Russian → Комбобокс и не только
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi