![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятное поведение accelerator character [D7]
Opilki_Inside © (2009-04-02 03:46:00)Поведение, трудно поддающееся описанию, поэтому объясню на примере:
Кинем на форму TStringGrid, TListBox, TBitBtn
в TBitBtn зададим Caption, например 'h&ello', т.е. кнопочка 'E' становится клавишей быстрого вызова (accelerator character)
Запускаем прогу,
ставим фокус на StringGrid и нажимаем 'E' (без Alt) при этом вызоветсяобработчик BitBtn !
ставим фокус на TListBox и так же нажимаем 'E' - при этом обработчик не вызовется!
Вопрос - почему? Есть идеи?
Opilki_Inside (2009-04-03 05:03:00) [1]Игорь, спасибо. Я так и сделал :-)
Игорь Шевченко (2009-04-03 00:20:00) [2]
> Поведение, трудно поддающееся описанию, поэтому объясню
> на примере:
>
> Кинем на форму 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-02 22:13:00) [3]
> > модифицирую свой Grid унаследованный от TCustomGrid (компонент
>
> > уже написан другими разработчиками), и мне нужно реализовать
>
> > инкрементный поиск
> >
>
> Посмотри исходники DBGridEh из EhLib, там реализован инкрементный
> поиск.
Посмотрел EhLib. Инкрементный поиск реализован. Только там тоже есть описанная мной проблема. Если на форме лежит кнопочка с быстрым вызовом, то она нажимается.
Причем, KeyDown срабатывает у наследников TCustomGrid, но Key := 0; в нем не помогает. А до KeyPress дело даже не доходит.
Amoeba (2009-04-02 21:47:00) [4]
> модифицирую свой Grid унаследованный от TCustomGrid (компонент
> уже написан другими разработчиками), и мне нужно реализовать
> инкрементный поиск
>
Посмотри исходники DBGridEh из EhLib, там реализован инкрементный поиск.
Opilki_Inside (2009-04-02 20:42:00) [5]clickmaker © , Это я понимаю. Я просто как раз модифицирую свой Grid унаследованный от TCustomGrid (компонент уже написан другими разработчиками), и мне нужно реализовать инкрементный поиск. Так вот, появилась проблема, что как только юзер начинает вводить символы (фокус в гриде), то срабатывают обработчики у кнопок на форме.
Я долго копался в исходниках VCL но не так и не смог найти принципиальной разницы между TListBox и TStringGrid...
clickmaker (2009-04-02 11:45:00) [6]> ставим фокус на TListBox и так же нажимаем 'E' - при этом
> обработчик не вызовется !
>
> Вопрос - почему? Есть идеи?
есть. В листбоксе нажатие буквенных клавиш - быстрый поиск по первым буквам
DimaBr (2009-04-02 09:04:00) [7]Внимание!Здесьобсуждаются вопросы, связанные с разработкойкомпонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поискуи использованиюготовых компонентов, редакторов или экспертов являются нарушениемтематики и могут быть удалены.