Главная страница
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.01 c
1-1220851151
Xandr001
2008-09-08 09:19
2010.02.28
Методы хранения сильно разреженных матриц


2-1261726198
oleg1963
2009-12-25 10:29
2010.02.28
Добавить компонент в класс


15-1260896939
Nic
2009-12-15 20:08
2010.02.28
Что думаете об ЭТОМ?! )


15-1261161523
Washington
2009-12-18 21:38
2010.02.28
Алгоритмы работы с видео


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