Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Combobox и Escape [D7, XP]


Sw ©   (2009-10-27 08:59:00) 

Здравствуйте, помогите, пожалуйста, разобраться.

procedure Tfm.CmbBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if Sender is TComboBox then
  (Sender as TComboBox).DroppedDown:=True;
end;

procedure Tfm.CmbBoxRecipientCloseUp(Sender: TObject);
begin
 if CmbBoxRecipient.ItemIndex=-1 then Exit;
............
иначе заполняется другой комбобох

Если я работаю мышью, открываю комбобокс, выпадает список, ничего из списка не выбрано (перемещаю мышь по списку, но не кликаю)...нажимаю Esc, комбобокс закрывается.
Если с клавиатуры открываю список, то при закрытии происходит обработка CloseUp.
на KeyPress прописываю if key=#27 then CmbBoxRecipient.ItemIndex:=-1; но сначала выполняется  CloseUp, а потом KeyPress.
Как сделать, чтобы при нажатии на Esc не выполнялся CloseUp?


TDelphi   (2009-10-27 13:00:00) [1]

Тьфу... ты ... :) Опечатался

if GetAsyncKeyState (VK_ESCAPE) = 0 then begin
   // Выполняется если педаль "ESC" - не нажимали
end;


TDelphi   (2009-10-27 12:59:00) [2]

Imho, так должно отработать :

procedure Tfm.MyCloseUp (Sender: TObject);
begin
 if GetAsyncKeyState (VK_ESCAPE) = 0 then begin
    // Выполняется если нажали педаль "ESC "
 end;
end;

Можно и не назначать свой обработчик...


Leonid Troyanovsky   (2009-10-27 11:47:00) [3]


> TDelphi ©   (27.10.09 11:16) [3]

> Ага, но как пример сойдёт :)

Не, как пример не годится, бо реакция на Esc никак не меняется.

Хотя, я так и не сумел понять, для чего оное понадобилось.

--
Regards, LVT.


TDelphi   (2009-10-27 11:16:00) [4]

To :  Leonid Troyanovsky ©

>>    inherited

>Это, видимо, из другой оперы.

Ага, но как пример сойдёт :)


Leonid Troyanovsky   (2009-10-27 11:11:00) [5]


> TDelphi ©   (27.10.09 10:56) [1]

>    inherited

Это, видимо, из другой оперы.

--
Regards, LVT.


TDelphi   (2009-10-27 10:56:00) [6]

Например так :

...
private
  { Private declarations }
  procedure MyCloseUp (Sender: TObject);
...

procedure Tfm.MyCloseUp (Sender: TObject);
begin
 if GetAsyncKeyState (VK_ESCAPE) <> 0 then
   inherited
 else
   ShowMessage ('Нажали ESC');
end;

...
procedure Tfm.FormCreate(Sender: TObject);
begin
 fm.CmbBox.OnCloseUp := MyCloseUp;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо