Форум: "Основная";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];
ВнизНепонятное поведение 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c