Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ctrl-V: конфликт между меню и find-диалогом 
:(
    Опции темы
ilyalyu
Дата 25.10.2006, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Итак, на первый взгляд простая задача: в главном меню на кнопке "Paste" ("Вставить") необходимо указать отвечающую данной операции горячую клавишу, т.е. Ctrl-V.

Казалось бы, все просто - достаточно указать горячую клавишу в свойстве ShortCut и написать обработчик события OnClick, который будет выполнять необходимую операцию (вставлять текст из Clipboard в TMemo компоненту). Я так и сделал, и столкнулся с такой проблемой...

Оказалось, что я не могу вставить текст в Find диалог с помощью горячей клавиши Ctrl-V. Вместо этого, приложение вызывает обработчик события OnClick, который вставляет текст в TMemo компоненту.

Ни одного простого способа обойти эту проблему я так и не нашел. Например:
1. Найти компоненту, заменяющую Find диалог - не удалось, кроме того, такая компонента наверняка будет отличаться по стилю от других диалогов.
2. Написать собственную компоненту - сложно (хотя, похоже, в больших приложениях именно так и делают).
3. Вместо того чтобы использовать свойство ShortCut, рисовать меню, используя событие OnDrawItem - тоже очень сложно, кроме того, где гарантия, что такое меню не будет отличаться по стилю от остальных компонент.
4. Вставлять текст из Clipboard в Find диалог внутри обработчика события OnClick с помощью Windows message WM_Paste  - не получилось (в TEdit текст вставляется, а в TFindDialog - нет).

Может, я упускаю из вида какое-то простое решение? Ведь, задача, которую я описал, не относится к разряду экзотических.





PM MAIL   Вверх
Seraphim
Дата 25.10.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



А может лучше так, не проверенно конечно smile
Вообщем, на твой TEdit поставить событие по нажатию клавишь Ctrl+v и если этот TEdit.Focused:=True; Постлать твою комманду вставки кода. Попробуй так ;)
PM MAIL   Вверх
ilyalyu
Дата 25.10.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Тут вопрос не в том, как вставить текст в TMemo по нажатию Ctrl+V - он туда и так автоматически вставляется. Проблема в том, как простым способом поместить текст Ctrl+V на кнопку меню, и чтоб при этом Find диалог продолжал работать как надо.
PM MAIL   Вверх
Yanis
Дата 26.10.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



ilyalyu
А разве так не проще?

Код
procedure TForm1.FindDialog1Show(Sender: TObject);
begin
  N1231.ShortCut := 0;
end;

procedure TForm1.FindDialog1Close(Sender: TObject);
begin
  N1231.ShortCut := ShortCut(Ord('V'), [ssCtrl]);
end;


P. S. Ну по крайней мере пользоваться где нужно 3 и 8 строкой.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Akella
Дата 26.10.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(ilyalyu @  25.10.2006,  20:52 Найти цитируемый пост)
Оказалось, что я не могу вставить текст в Find диалог с помощью горячей клавиши Ctrl-V. 

что за Find диалог, откуда он, это твой Find диалог???
возможно, что в событии onKeyDown можно перехватить Ctrl-V.

Добавлено @ 12:12 
я так понимаю, что это компонента TFindDialog?
Тогда можно создать свою орму поиска.
PM MAIL   Вверх
ilyalyu
Дата 26.10.2006, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Yanis,

Спасибо за совет. Правда пришлось еще деактивировать форму, чтобы пользователь не мог смотреть меню в то время, когда показывается диалог:

Код

procedure TForm1.FindDialog1Show(Sender: TObject);
begin
  N1231.ShortCut := 0;
  Enabled := False;
end;
procedure TForm1.FindDialog1Close(Sender: TObject);
begin
  N1231.ShortCut := ShortCut(Ord('V'), [ssCtrl]);
  Enabled := True;
end;


PM MAIL   Вверх
Yanis
Дата 27.10.2006, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



ilyalyu
Пожалуйста, но помоему с блокирование формы ты перегнул smile Может просто определять какое окно активно и в зависимости от этого устанавливать горячую клавишу или нет.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
ilyalyu
Дата 28.10.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Действительно, можно проверять свойство active. Не могу понять, почему сразу так не сделал. Наверное - заскок... Еще раз спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.