Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1261836632
Student :)
2009-12-26 17:10
2010.02.28
Чтение параметра реестра


2-1261636639
ImmortalxXx
2009-12-24 09:37
2010.02.28
Помогите пожалуйста новичку нулевого уровня.


2-1261688447
Drowsy
2009-12-25 00:00
2010.02.28
Библиотеки.


6-1211183591
ivanov
2008-05-19 11:53
2010.02.28
открыватьчужие ссылки в новом окне?


15-1250439668
TIF
2009-08-16 20:21
2010.02.28
Обсуждение Delphi 2010 | RAD Studio 2010 (Weaver)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский