Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 163

/ вопрос открыт /

Уважаемые эксперты!
1) Необходимо сделать настройки горячих клавиш, наподобие как в WinAmp. То есть, есть лист, где два столбца (что это за компонент? Случаем не ValueListEditor?): Пункт и Горячая клавиша. Две кнопки (Принять и Очистить) и компонент HotKey. Нужно, чтобы при выборе строки из листа горячая клавиша
появлялась в HotKey (конечно, если она есть в листе). Затем эти данные (из листа) заносить в Ini-файл и при загрузке программы заносить их обратно в лист. Пунктов много (150-200, разделенные на несколько частей) и они заранее известны (и прописаны в листе). Что для всего этого нужно? Желательно с примером...
2) Как создать глобальные горячие клавиши?
3) Почему у меня не отображается Pages Common Controls, а в частности TTextViewer и TTextBrowser (D7)? Заранее спасибо...

feenords Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: feenords (статус: 1-ый класс)
Вопрос отправлен: 19 ноября 2006, 00:08
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, feenords!
1. Нет, в Winamp используется не ValueListEditor - там обыкновенный SysListView (в Delphi соответственно TListView со страницы Win32). Он достаточно удобен. Создаются два столбца и дальше они обрабатываются циклом. В ini-файл комбинации клавиш записываются в числовом эквиваленте. Более того, для этого даже ничего не нужно делать - тип TShortcut или THotkey легко можно использовать в качестве в параметра в IniFile.WriteInteger(). Аналогично делается и загрузка - через ReadInteger(). Раз горячих клавиш много, то всё следует обрабатывать циклом.
2. Их можно регистрировать в системе вручную, но проще воспользоваться готовыми компонентами. Я рекомендую использовать JvApplicationHotKey из JediVCL. В последних версиях пакета компонент немного изменил своё название, но найти его не сложно. Работать с ним просто: в HotKey заносится нужная комбинация, дальше Active:=True и горячая клавиша уже работает. При нажатии активируется соответствующее событие. При выходе из программы желательно делать Active:=False во избежание дальнейших ошибок. При этом никто не мешает регистрировать горячие клавиши собственноручно. См. пример в приложении. Там всё достаточно просто.
3. По умолчанию в Delphi вкладка "Common controls" скрыта, а компоненты "раскиданы" по остальным вкладкам. Компоненты TTextViewer и TTextBrowser недоступны вообще, даже при перемещении их на другие вкладки. К сожалению, указать точную причину этого я не могу.
Удачи!

Приложение:
  1.  
  2.  
  3. unit Unit1;
  4.  
  5. interface
  6.  
  7. uses
  8. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;
  9.  
  10. type
  11. TForm1 = class(TForm)
  12. procedure FormActivate(Sender: TObject);
  13. procedure FormDestroy(Sender: TObject);
  14. private
  15. procedure WMHotKey(var Message: TMessage); message WM_HOTKEY;
  16. end;
  17.  
  18. var
  19. Form1: TForm1;
  20. implementation
  21.  
  22. {$R *.DFM}
  23. procedure Tform1.WMHotKey(var Message: TMessage);
  24. begin
  25. application.Restore;
  26. application.bringtofront;
  27.  
  28. end;
  29.  
  30. procedure TForm1.FormActivate(Sender: TObject);
  31. begin
  32. RegisterHotKey(form1.Handle,123,mod_control,vk_f7);
  33. end;
  34.  
  35. procedure TForm1.FormDestroy(Sender: TObject);
  36. begin
  37. UnregisterHotKey(Handle, 123)
  38. end;
  39.  
  40. end.


Ответ отправил: Dron (статус: Студент)
Время отправки: 19 ноября 2006, 08:37
Оценка за ответ: 5

Комментарий к оценке: 1) Можно небольшой примерчик связи HotKey со вторым столбцом (занесение в данный столбец)?

Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 21 ноября 2006, 19:20; участников в обсуждении: 3.
Dron

Dron (статус: Студент), 19 ноября 2006, 22:43 [#1]:

А что именно интересует - как перевести комбинацию из числа в строковое представление (название клавиш) или же добавление строк в TListView?
С уважением.
feenords

feenords (статус: 1-ый класс), 19 ноября 2006, 23:13 [#2]:

Пользователь выбрал какую-либо строчку в TListView, в THotKey загрузилась горячая клавиша (если она была во втором столбце листа) в нормальном эквиваленте (т.е., например, Ctrl+H). Пользователь изменил её и нажал OK. Гор.клавиша занеслась в лист (в таком же эквиваленте)... Как в WinApm...
Вадим К

Вадим К (статус: Академик), 20 ноября 2006, 19:49 [#3]:

Компоненты с вкладки "Common controls" неотображаются по одной простой причине - они для CLX.
Галочка "подтверждения прочтения" - вселенское зло.
Dron

Dron (статус: Студент), 20 ноября 2006, 21:43 [#4]:

feenords: без проблем. Смотрите пример: (файл удалён) Всё, как просили :-)
С уважением.
feenords

feenords (статус: 1-ый класс), 21 ноября 2006, 12:30 [#5]:

Dron: спасибо за пример...
Ну, и для полноты картины, приведите небольшой кусок сохранения гор.клавиш в ini :). И, соответственно, загрузку в ListView при старте программы...
Dron

Dron (статус: Студент), 21 ноября 2006, 15:41 [#6]:

Ну такие вещи вы можете и сам сделать :-)
IniFile.WriteInteger('Grp','Key',HotKey1.HotKey);
И загрузка соответственно:
ListView1.Items[0].SubItems[0]:=ShortCutToText(IniFile.ReadInteger('Grp','Key',0));
С уважением.
feenords

feenords (статус: 1-ый класс), 21 ноября 2006, 16:35 [#7]:

Не в этом смысле :)
Примерчик сохранения всех (!) горячих клавиш из ListView (пусть их там будет штук 5, для начала) в цикле в ini. И затем загрузку их в лист при старте.
HotKey при этом не трогать, он только служит для занесения новых значений в лист!
Что-то типа того...
Dron

Dron (статус: Студент), 21 ноября 2006, 16:45 [#8]:

Попробуйте сделать для начала самостоятельно. Если сами не будете пытаться, то ничему и не научитесь... Здесь всё предельно просто - обработка всех строк циклом, а пример записи я уже привёл. И вот после того, как помучаетесь немного, но результата не добьётесь, приведите свой пример кода, а эксперты уж подскажут, что именно так :-)
P.S. Я не злой, просто не люблю, когда люди хотят, чтобы всё делали за них :-)
С уважением.
feenords

feenords (статус: 1-ый класс), 21 ноября 2006, 18:12 [#9]:

Уже понял :)... просто невнимательно посмотрел :). И вправду, все достаточно просто...
Спасибо за ответы!
Dron

Dron (статус: Студент), 21 ноября 2006, 19:20 [#10]:

Ну вот :-) Желаю удачи!
С уважением.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 20:38
Выполнено за 0.02 сек.