| 
| 
 | Вопрос # 163/ вопрос открыт / | 
 |  Уважаемые эксперты!1) Необходимо сделать настройки горячих клавиш, наподобие как в WinAmp. То есть, есть лист, где два столбца (что это за компонент? Случаем не ValueListEditor?): Пункт и Горячая клавиша. Две кнопки (Принять и Очистить) и компонент HotKey. Нужно, чтобы при выборе строки из листа горячая клавиша
 появлялась в HotKey (конечно, если она есть в листе). Затем эти данные (из листа) заносить в Ini-файл и при загрузке программы заносить их обратно в лист. Пунктов много (150-200, разделенные на несколько частей) и они заранее известны (и прописаны в листе). Что для всего этого нужно? Желательно с примером...
 2) Как создать глобальные горячие клавиши?
 3) Почему у меня не отображается Pages Common Controls, а в частности TTextViewer и TTextBrowser (D7)? Заранее спасибо...
 
|  |   Вопрос задал: 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 недоступны вообще, даже при перемещении их на другие вкладки. К сожалению, указать точную причину этого я не могу.
 Удачи!
 Приложение:Переключить в обычный режим   unit Unit1;  interface  uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;  type   TForm1 = class(TForm)     procedure FormActivate(Sender: TObject);     procedure FormDestroy(Sender: TObject);   private     procedure WMHotKey(var Message: TMessage); message WM_HOTKEY;   end;  var   Form1: TForm1; implementation  {$R *.DFM} procedure Tform1.WMHotKey(var Message: TMessage); begin   application.Restore;   application.bringtofront;  end;  procedure TForm1.FormActivate(Sender: TObject); begin   RegisterHotKey(form1.Handle,123,mod_control,vk_f7); end;  procedure TForm1.FormDestroy(Sender: TObject); begin   UnregisterHotKey(Handle, 123) end;  end.
|  | Ответ отправил: Dron (статус: Студент)Время отправки: 19 ноября 2006, 08:37
 Оценка за ответ: 5
 Комментарий к оценке: 1) Можно небольшой примерчик связи HotKey со вторым столбцом (занесение в данный столбец)? |  
 Мини-форум вопросаВсего сообщений: 10; последнее сообщение — 21 ноября 2006, 19:20; участников в обсуждении: 3. 
|   | Dron (статус: Студент), 19 ноября 2006, 22:43 [#1]:А что именно интересует - как перевести комбинацию из числа в строковое представление (название клавиш) или же добавление строк в TListView? С уважением. |  
|   | feenords (статус: 1-ый класс), 19 ноября 2006, 23:13 [#2]:Пользователь выбрал какую-либо строчку в TListView, в THotKey загрузилась горячая клавиша (если она была во втором столбце листа) в нормальном эквиваленте (т.е., например, Ctrl+H). Пользователь изменил её и нажал OK. Гор.клавиша занеслась в лист (в таком же эквиваленте)... Как в WinApm... |  
|   | Вадим К (статус: Академик), 20 ноября 2006, 19:49 [#3]:Компоненты с вкладки "Common controls" неотображаются по одной простой причине - они для CLX. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Dron (статус: Студент), 20 ноября 2006, 21:43 [#4]:feenords: без проблем. Смотрите пример: (файл удалён) Всё, как просили   С уважением. |  
|   | feenords (статус: 1-ый класс), 21 ноября 2006, 12:30 [#5]:Dron: спасибо за пример... Ну, и для полноты картины, приведите небольшой кусок сохранения гор.клавиш в ini
  . И, соответственно, загрузку в ListView при старте программы... |  
|   | Dron (статус: Студент), 21 ноября 2006, 15:41 [#6]:Ну такие вещи вы можете и сам сделать  IniFile.WriteInteger('Grp','Key',HotKey1.HotKey);
 И загрузка соответственно:
 ListView1.Items[0].SubItems[0]:=ShortCutToText(IniFile.ReadInteger('Grp','Key',0));
 С уважением. |  
|   | feenords (статус: 1-ый класс), 21 ноября 2006, 16:35 [#7]:Не в этом смысле  Примерчик сохранения всех (!) горячих клавиш из ListView (пусть их там будет штук 5, для начала) в цикле в ini. И затем загрузку их в лист при старте.
 HotKey при этом не трогать, он только служит для занесения новых значений в лист!
 Что-то типа того...
 |  
|   | Dron (статус: Студент), 21 ноября 2006, 16:45 [#8]:Попробуйте сделать для начала самостоятельно. Если сами не будете пытаться, то ничему и не научитесь... Здесь всё предельно просто - обработка всех строк циклом, а пример записи я уже привёл. И вот после того, как помучаетесь немного, но результата не добьётесь, приведите свой пример кода, а эксперты уж подскажут, что именно так  P.S. Я не злой, просто не люблю, когда люди хотят, чтобы всё делали за них
   С уважением. |  
|   | Dron (статус: Студент), 21 ноября 2006, 19:20 [#10]:Ну вот  Желаю удачи! С уважением. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |