Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как добавить 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.
Может поможет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо