|
Вопрос # 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]:
Ну вот Желаю удачи!
С уважением.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|