Topic: Комбобокс и не только

Привет. На форме есть комбобокс, который содержит 5 значений, скажем А, Б, В, Г и Д. Надо чтобы при нажатии на кнопку 1 автоматически было выбрана А, на 2 - Б, и так далее.

Re: Комбобокс и не только

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;
Dmitry.

Re: Комбобокс и не только

Извините, но я хотел сказать не на кнопку 1 а просто на 1, т.е. в комбо когда я нажимаю 1 а там выбирается 1-А. Как то так.

Re: Комбобокс и не только

Тогда так

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;
Dmitry.

Re: Комбобокс и не только

Ув. Дмитрий. На форме есть комбобокс, который содержит:
Не указано
Мужчина
Женщина
Надо чтобы при Form1_OnShow содержимое было так:
0 - Не указано
1 - Мужчина
2 - Женщина
Также при нажатии на 1 в комбо выбралась 1-Мужчина, при нажатии 2 выбралась 2-Женщина и при нажатии 0 выбралась 0-Не указано.
Спс.

Re: Комбобокс и не только

pha1984
Приложите пожалуйста ваш проект, с описанием, для какого точно ComboBox-а и на какой форме необходимо реализовать это.

Dmitry.

7 (edited by pha1984 2015-07-09 07:46:46)

Re: Комбобокс и не только

смотрите на NovayaForma, там первая вкладка где указан пол (комбобокс)

Post's attachments

Attachment icon Статформ_04.07.7z 226.84 kb, 507 downloads since 2015-07-09 

Re: Комбобокс и не только

pha1984 wrote:

смотрите на NovayaForma, там первая вкладка где указан пол (комбобокс)

Готово.


Обратите внимание на событие
procedure NovayaForma_OnKeyDown (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);


получается, что каждый раз когда вы печатаете что то, в этом событии обновляются содержимое многих TableGrid, что приводит к тормозам, с какой целью это сделано? я пока закоментировал участок кода, который замедляет работу программы на данной форме.

Post's attachments

Attachment icon Статформ_04.07_fixed.zip 304.63 kb, 445 downloads since 2015-07-09 

Dmitry.

Re: Комбобокс и не только

Если вы имеете ввиду это
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;
то она типа справочника служит для меня

10 (edited by pha1984 2015-07-09 08:53:55)

Re: Комбобокс и не только

кстати при нажатии на ctrl + D долго открывается frmDiagnose, я так заметил что в frmDiagnose.Tablegrid4 иммется 58000 записей и более, поэтому происходит тормоз. Как быть с этим?

Re: Комбобокс и не только

pha1984 wrote:

кстати при нажатии на ctrl + D долго открывается frmDiagnose, я так заметил что в frmDiagnose.Tablegrid4 иммется 58000 записей и более, поэтому происходит тормоз. Как быть с этим?

по умолчанию можно не показывать все записи, например только 500

frmDiagnose.TableGrid4.dbLimit := 500;

также сделать кнопку, которая позволит при необходимости показать все записи

frmDiagnose.TableGrid4.dbLimit := 0;
frmDiagnose.TableGrid4.dbUpdate;
Dmitry.

Re: Комбобокс и не только

но все равно же при нажатии этой кнопки будут тормза, не так ли?

Re: Комбобокс и не только

нет.

Dmitry.

Re: Комбобокс и не только

А можно ли вместо

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;

и чем они отличаются?

Re: Комбобокс и не только

pha1984
Оба варианта рабочие.
первый вариант выбирает запись на основе его текстового содержимого, а второй вариант выбирает запись на основе идетификатора записи (id)

Dmitry.

Re: Комбобокс и не только

я тут заметил что при удалении нижнего скрипта:

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  работают и без этого скрипта, почему так?

Re: Комбобокс и не только

pha1984
видимо ComboBox уже имеет данный функционал, выбирается запись, которая соответствует нажатой клавиши и первому символу, в данном случае как раз 0, 1, 2

Dmitry.

Re: Комбобокс и не только

кстати в этом скрипте я сделал как вы сказали но в гриде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;

Re: Комбобокс и не только

попробуйте так

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;
Dmitry.

Re: Комбобокс и не только

а как вы советуете это сделать? Мне надо чтобы при показе формы данные показались в гриде

Re: Комбобокс и не только

данные в гридах обновляются автоматически на форме, если форма была вызвана с помощью кнопки с действием "Показать форму"


если форма показывается с помощью скрипта, то непосредственно перед этим и можно обновить гриды, например


frmOper.TableGrid1.dbUpdate;
frmOper.TableGrid2.dbUpdate;
frmOper.TableGrid3.dbUpdate;
frmOper.TableGrid4.dbUpdate;
frmOper.ShowModal;
Dmitry.

Re: Комбобокс и не только

Ну у меня ведь так и есть что при нажатии ctrl+D формы обновляются, я не понимаю в чем вы не видите смысла

Re: Комбобокс и не только

Возник другой вопрос
На форме имеется 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. Как быть?

Re: Комбобокс и не только

pha1984
Приложите пожалуйста проект, посмотрю.

Dmitry.

25 (edited by pha1984 2015-07-10 15:30:54)

Re: Комбобокс и не только

В форме NovayaForma имеется 3 комбобокса - область, район и насел. пункт. Они связаны между собой.
1. При NovayaForma_OnShow надо чтобы в комбо Область была id=3 т.е. Хатлонская область, в комбо Район соответственно НЕ УКАЗАНО и в комбо Насел. пункт соответственно НЕ УКАЗАНО.
2. Поправьте связи между таблицей Osnova и Oblast, чтобы каждая запись из таблицы Osnova имела связь с тремя другими таблицами. Т.е. регистрирую пациента в больнице и он принадлежит к определенной области, определенного района который связан с областью, и определенным насел. пунктом, связанным с районом. Надеюсь смог объяснить.

Post's attachments

Attachment icon Статформ_04.07.7z 216.64 kb, 466 downloads since 2015-07-10