![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как добавить TAction код клавиши + с цифровой клавы [D7, WinXP]
svv © (2004-10-25 10:52:00)Как добавить TAction код клавиши + с цифровой клавы?
То есть хочется что бы дейчтвие срабатыввало при нажании на "+" на цифровой клавиатуре?
Есть у меня конечно иделя проверять KeyPress для всей формы, но может можно указать это прям TAction
Заранее спасибо!!!
svv (2004-10-26 09:24:00) [1]Спасибо большое!
Получилось.
В задаче правда требовалось добавить "+" как альтернативную "Ins" горячую клавишу, но это было уже просто... (используя ShortCutToText)
Я не собразил что virtual key code можно использовать напрямую так!
Спасибо еще раз за помощь!
Успехов!
GuAV (2004-10-26 02:15:00) [2]Вот и разобрались :)
Макс (2004-10-26 01:10:00) [3]2 GuAV ©
А у меня Windows XP английский
GuAV (2004-10-25 23:08:00) [4]У меня D7. Русский Windows. И Num +не присваивается. Присваивается Доп. +как я только что выяснил.
Макс (2004-10-25 22:53:00) [5]2 GuAV ©
Что то у меня никакого "Invalid Property Value" не наблюдается
GuAV (2004-10-25 21:24:00) [6]Макс (25.10.04 21:13) [7]
"Invalid Property Value" (D7)
Утанови [6] как компонент и можно будет назначить + в окне редактора свойства.
Макс (2004-10-25 21:13:00) [7]Еще вариант в догонку - написать в инспекторе в свойстве:
Num +
И всех делов :)
GuAV (2004-10-25 20:55:00) [8]Установи это и будет возможность такая (специально для сабжа писал, когда мне было надо)
ShortEditor.pas
unit ShortEditor;
interface
uses VCLEditors, DesignIntf;
type
TMyShortCutProperty = class(TShortCutProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure Edit; override;
end;
procedure Register;
implementation
uses ShortEditFrm, Controls, Classes;
procedure Register;
begin
RegisterPropertyEditor(TypeInfo(TShortCut), nil,
'', TMyShortCutProperty);
end;
{ TMyShortCutProperty }
procedure TMyShortCutProperty.Edit;
begin
with THotDlg.Create(nil) do
try
HotKey.HotKey := GetOrdValue;
if ShowModal = mrOK then
SetOrdValue(HotKey.HotKey);
finally
Free;
end;
end;
function TMyShortCutProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog, paMultiSelect, paRevertable];
end;
end.
ShortEditFrm.pas
unit ShortEditFrm;
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls, ComCtrls;
type
THotDlg = class(TForm)
OKBtn: TButton;
CancelBtn: TButton;
HotKey: THotKey;
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R *.dfm}
end.
ShortEditFrm.dfm
object HotDlg: THotDlg
Left = 245
Top = 108
BorderStyle = bsDialog
Caption = 'Hot Key'
ClientHeight = 67
ClientWidth = 224
Color = clBtnFace
ParentFont = True
OldCreateOrder = True
Position = poScreenCenter
PixelsPerInch = 96
TextHeight = 13
object OKBtn: TButton
Left = 143
Top = 4
Width = 75
Height = 25
Caption = 'OK'
Default = True
ModalResult = 1
TabOrder = 0
end
object CancelBtn: TButton
Left = 143
Top = 36
Width = 75
Height = 25
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
object HotKey: THotKey
Left = 8
Top = 8
Width = 121
Height = 19
HotKey = 32768
InvalidKeys = []
TabOrder = 2
end
end
Макс (2004-10-25 17:58:00) [9]Надо в OnCreate формы или датамодуля где сидят actions
написать:
//Цепляем ShortCut на свертывание развертывание
//(Невозможно это сделать в инспекторе)
ac_Expand.ShortCut := ShortCut(VK_ADD, []);
ac_Collapse.ShortCut := ShortCut(VK_SUBTRACT, []);
ac_ExpandAll.ShortCut := ShortCut(VK_ADD, [ssShift]);
ac_CollapseAll.ShortCut := ShortCut(VK_SUBTRACT, [ssShift]);
VK_ADD - это серый +
VK_SUBTRACT - это серый -
inic (2004-10-25 16:30:00) [10]svv (25.10.04 10:52)
Попробуй кинуть ApplicationEvents на форму, а там обработать
событие для ApplicationEvents1.OnShortCut:
procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey;
var Handled: Boolean);
begin
if (Msg.CharCode = VK_add) then
Action1.Execute;
end;
procedure TForm1.Action1Execute(Sender: TObject);
begin
Application.MessageBox('', '', 0);
end;
Ega23 (2004-10-25 11:23:00) [11]Ну тогда KeyDown переопределяй...
svv (2004-10-25 11:18:00) [12]Не помогает...
до этого я и сам догадался...
я не знаю как указать что нужен "+" с цифровой клавы
пробывал: "NumPad +"; "Gray+"; "Plus"
кажется не получилось
Ega23 (2004-10-25 11:03:00) [13]TextToShortCut + F1.
Может поможет.