Как программно открыть комбобокс?
От: chia Россия  
Дата: 19.01.03 10:12
Оценка:
Хочется сделать чтобы при нажатии опрделенной клавиши VK_DOWN, например, открвывался некий комбобокс, фокус переходил бы к нему и выбирался первый элемент из списка.

Заранее спасибо.
Re: Как программно открыть комбобокс?
От: DOOM Россия  
Дата: 19.01.03 10:21
Оценка:
Здравствуйте, chia, Вы писали:

C>Хочется сделать чтобы при нажатии опрделенной клавиши VK_DOWN, например, открвывался некий комбобокс, фокус переходил бы к нему и выбирался первый элемент из списка.


C>Заранее спасибо.


А если поменять последовательность: фокус переходил бы к нему, выбирался первый элемент из списка — сам он после этого не откроется(и надо ли)
Re[2]: Как программно открыть комбобокс?
От: chia Россия  
Дата: 19.01.03 10:27
Оценка:
Здравствуйте, DOOM, Вы писали:

Избыточное цитирование удалено модератором.
DOO>А если поменять последовательность: фокус переходил бы к нему, выбирался первый элемент из списка — сам он после этого не откроется(и надо ли)

нет, не откроется, а просто выберется.
Хотя может быть он и открывается, но делает это очень быстро и тут же закрывается
Re[3]: Как программно открыть комбобокс?
От: DOOM Россия  
Дата: 19.01.03 11:43
Оценка:
Тогда в этой ситуации есть еще один выход: написать свой комбо-бокс и не страдать
Re[3]: Как программно открыть комбобокс?
От: Hacker_Delphi Россия  
Дата: 19.01.03 11:43
Оценка:
Здравствуйте, chia, Вы писали:

C>нет, не откроется, а просто выберется.

C>Хотя может быть он и открывается, но делает это очень быстро и тут же закрывается
поставь AutoDrop (или AutoDropDown???) — точно название свойства не помню...
Enigma — Black Moon Dance (Metamorphosis)
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[4]: Как программно открыть комбобокс?
От: chia Россия  
Дата: 19.01.03 12:20
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:

H_D>Здравствуйте, chia, Вы писали:


C>>нет, не откроется, а просто выберется.

C>>Хотя может быть он и открывается, но делает это очень быстро и тут же закрывается
H_D>поставь AutoDrop (или AutoDropDown???) — точно название свойства не помню...

нет такого (
у dbcombobox'a был метод dropdown, который делал то что мне надо.
у обчного (TCombobox) есть св-во DroppedDown, которое можно менять,
тогда действительно он выпадает, но тут же закрывается, поскольку фокус теряется.
как этого избежать?
Re[4]: Как программно открыть комбобокс?
От: chia Россия  
Дата: 19.01.03 13:01
Оценка:
Здравствуйте, DOOM, Вы писали:

DOO>Тогда в этой ситуации есть еще один выход: написать свой комбо-бокс и не страдать


Виноват, — неправильно сформулировал вопрос.

Если кинуть на форму Combobox и кнопку,
и написать

procedure TForm1.Button1Click(Sender: TObject);
begin
  Combobox1.Visible := true;
  Combobox1.SetFocus;
  Combobox1.DroppedDown := true;
  Combobox1.ItemIndex := 1
end;


Тогда все будет работать, как мне и надо.

Я же хотел сделать след-ее. под FileNameEdit (из RXlib) положил Combobox, чтобы при нажатии пользователем VK_Down выпадал список с историей, а FileNameEdit временно скрывался. В таком случае список выпадет и тут же закроется.

Как быть в таком случае?
Re[5]: Как программно открыть комбобокс?
От: Sergey Ten http://www.fastalgo.com
Дата: 19.01.03 15:12
Оценка:
Здравствуйте, chia, Вы писали:

C>Я же хотел сделать след-ее. под FileNameEdit (из RXlib) положил Combobox, чтобы при нажатии пользователем VK_Down выпадал список с историей, а FileNameEdit временно скрывался. В таком случае список выпадет и тут же закроется.


Сделал тестовый проект — бросил на форму TEdit (у меня нет RxLib), под ним спрятал TComboBox. Вроде ничего там не закрывается. Вот фрагмент кода:

procedure OpenComboBox(AComboBox: TComboBox);
begin
  with AComboBox do
  begin
    BringToFront;
    SetFocus;
    ItemIndex := 0;
    DroppedDown := true;
  end;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_DOWN) and (ssAlt in Shift) then
    OpenComboBox(ComboBox1);
end;

procedure TForm1.ComboBox1CloseUp(Sender: TObject);
begin
  ComboBox1.SendToBack;
  with Edit1 do
  begin
    Text := ComboBox1.Text;
    SetFocus;
  end;
end;


Можно взглянуть на ваш фрагмент кода?
Re[5]: Как программно открыть комбобокс?
От: Hacker_Delphi Россия  
Дата: 19.01.03 19:33
Оценка:
Здравствуйте, chia, Вы писали:

C>нет такого (

Справка Delphi 7 (в 6-5 версиях тоже было... точно помню...)

Specifies whether the drop-down list drops down automatically in response to user keystrokes.

Delphi syntax:

property AutoDropDown: Boolean;

C++ syntax:
__property bool AutoDropDown = {read=FAutoDropDown, write FAutoDropDown, default=false};

Description

When AutoDropDown is true, the combo box automatically drops down its list when the user starts typing a string while the combo box has focus.

When AutoDropDown is false, the user must explicitly use the drop-down button to drop down the combo box list.

Aria — Antichrist
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[5]: Как программно открыть комбобокс?
От: Globus66  
Дата: 19.01.03 20:17
Оценка:
C>Я же хотел сделать след-ее. под FileNameEdit (из RXlib) положил Combobox, чтобы при нажатии пользователем VK_Down выпадал список с историей, а FileNameEdit временно скрывался. В таком случае список выпадет и тут же закроется.

C>Как быть в таком случае?


А не проще будет сделать вот так.
TComboFileEdit = class (TComboBox)
private
  FOpenDlg:TOpenDialog;
  FSpeedBtn:TSpeedButton;
...
end;

все остальное дописывается буквально за 10-15 минут.
Т.Е. смысл таков : нужно добавить к стандартному ComboBox кнопку для выбора файла ...
Re[6]: Как программно открыть комбобокс?
От: chia Россия  
Дата: 20.01.03 07:09
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:

Избыточное цитирование удалено модератором

К сожалению в D5 такого свойства точно нет
Re[6]: Как программно открыть комбобокс?
От: chia Россия  
Дата: 20.01.03 07:11
Оценка:
Здравствуйте, Globus66, Вы писали:
Избыточное цитирование удалено модератором.
G>Т.Е. смысл таков : нужно добавить к стандартному ComboBox кнопку для выбора файла ...

именно к этому я и пришел
Re[7]: Как программно открыть комбобокс?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.01.03 07:32
Оценка:
Здравствуйте, chia, Вы писали:
C>К сожалению в D5 такого свойства точно нет
Поддерживается начиная с VCL 6.0.
... << RSDN@Home 1.0 beta 3 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Как программно открыть комбобокс?
От: chia Россия  
Дата: 20.01.03 07:59
Оценка:
Здравствуйте, Sergey Ten, Вы писали:

Избыточное цитирование удалено модератором.

ST>Можно взглянуть на ваш фрагмент кода?


Cобытия CloseUp у Combobox'а нет в D5,
Про методы SendToBack и BringToFront я забыл/не знал Пасибо.
Все делал аналогично, но с той разницей что вместо использованных вами методов манипулировал Visbloм тех же компонентов и вместо CloseUp пришлось ловить три других события (OnChange, OnClick и OnKeyDown).

С edit'ом действительно работает, а с FileNameEdit — нет. Проблема, похоже в RX.

Действительно, проще было не мучиться, а написать наследника от Combobox'а
[moderator]предупреждение[/moderator]
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.01.03 09:30
Оценка:
Здравствуйте, chia. Настоятельно рекомендую воздержаться от избыточного цитирования, так как оно является нарушением правил форума.
... << RSDN@Home 1.0 beta 3 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.