Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.28;
Скачать: CL | DM;

Вниз

Непонятное поведение accelerator character   Найти похожие ветки 

 
Opilki_Inside   (2009-04-02 03:46) [0]

Поведение, трудно поддающееся описанию, поэтому объясню на примере:

Кинем на форму TStringGrid, TListBox, TBitBtn

в TBitBtn зададим Caption, например "h&ello", т.е. кнопочка "E" становится клавишей быстрого вызова (accelerator character)

Запускаем прогу,

ставим фокус на StringGrid и нажимаем "E" (без Alt) при этом вызовется обработчик BitBtn !

ставим фокус на TListBox и так же нажимаем "E" - при этом обработчик не вызовется !

Вопрос - почему? Есть идеи?


 
DimaBr ©   (2009-04-02 09:04) [1]

Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.


 
clickmaker ©   (2009-04-02 11:45) [2]

> ставим фокус на TListBox и так же нажимаем "E" - при этом
> обработчик не вызовется !
>
> Вопрос - почему? Есть идеи?

есть. В листбоксе нажатие буквенных клавиш - быстрый поиск по первым буквам


 
Opilki_Inside   (2009-04-02 20:42) [3]

clickmaker © , Это я понимаю. Я просто как раз модифицирую свой Grid унаследованный от TCustomGrid (компонент уже написан другими разработчиками), и мне нужно реализовать инкрементный поиск. Так вот, появилась проблема, что как только юзер начинает вводить символы (фокус в гриде), то срабатывают обработчики у кнопок на форме.
Я долго копался в исходниках VCL но не так и не смог найти принципиальной разницы между TListBox и TStringGrid...


 
Amoeba ©   (2009-04-02 21:47) [4]


> модифицирую свой Grid унаследованный от TCustomGrid (компонент
> уже написан другими разработчиками), и мне нужно реализовать
> инкрементный поиск
>

Посмотри исходники DBGridEh из EhLib, там реализован инкрементный поиск.


 
Opilki_Inside   (2009-04-02 22:13) [5]


> > модифицирую свой Grid унаследованный от TCustomGrid (компонент
>
> > уже написан другими разработчиками), и мне нужно реализовать
>
> > инкрементный поиск
> >
>
> Посмотри исходники DBGridEh из EhLib, там реализован инкрементный
> поиск.


Посмотрел EhLib. Инкрементный поиск реализован. Только там тоже есть описанная мной проблема. Если на форме лежит кнопочка с быстрым вызовом, то она нажимается.

Причем, KeyDown срабатывает у наследников TCustomGrid, но Key := 0; в нем не помогает. А до KeyPress дело даже не доходит.


 
Игорь Шевченко ©   (2009-04-03 00:20) [6]


> Поведение, трудно поддающееся описанию, поэтому объясню
> на примере:
>
> Кинем на форму TStringGrid, TListBox, TBitBtn
>
> в TBitBtn зададим Caption, например "h&ello", т.е. кнопочка
> "E" становится клавишей быстрого вызова (accelerator character)
>
>
> Запускаем прогу,
>
> ставим фокус на StringGrid и нажимаем "E" (без Alt) при
> этом вызовется обработчик BitBtn !
>
> ставим фокус на TListBox и так же нажимаем "E" - при этом
> обработчик не вызовется !
>
> Вопрос - почему? Есть идеи?


Вот поэтому:

procedure TCustomGrid.WMGetDlgCode(var Msg: TWMGetDlgCode);
begin
 Msg.Result := DLGC_WANTARROWS;
 if goRowSelect in Options then Exit;
 if goTabs in Options then Msg.Result := Msg.Result or DLGC_WANTTAB;
 if goEditing in Options then Msg.Result := Msg.Result or DLGC_WANTCHARS;
end;

ставим у грида в Options goEditing и наблюдаемое поведение пропадает.

В наследнике я бы переписал метод WMGetDlgCode, с учетом того, что если нужен инкрементальный поиск, то возвращать всегда DLGC_WANTCHARS


 
Opilki_Inside   (2009-04-03 05:03) [7]

Игорь, спасибо. Я так и сделал :-)



Страницы: 1 вся ветка

Текущий архив: 2010.02.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
15-1261052013
Jeer
2009-12-17 15:13
2010.02.28
Ткните носом в EXIF


13-1124615958
Darklight
2005-08-21 13:19
2010.02.28
Экземпляр класса ещё не создан как проверить его на null referenc


15-1260807632
Kostafey
2009-12-14 19:20
2010.02.28
Шрифты в редакторе формул Word-а


6-1212180887
WebSQLNeederr
2008-05-31 00:54
2010.02.28
Изменить настройки Internet Protocol (TCP/IP)


15-1259587923
12
2009-11-30 16:32
2010.02.28
sql server, ms. Общая оптимизация. Прошу подсказки.