Solved

Customize Application ShortCuts

Posted on 2002-06-04
6
197 Views
Last Modified: 2010-04-04
I have an ActionList with my various commands and their corresponding ShortCuts.

I am trying to make a dialog that loads all the actions from the ActionList (along with their associated images, captions, and shortcuts) into a ListView so that the user can customize the shortcuts for each action.

Can anyone show me an example of how to do this? I am using Delphi 4/5 if that matters.


Thanks
0
Comment
Question by:xenfung
  • 4
6 Comments
 
LVL 22

Expert Comment

by:Mohammed Nasman
ID: 7054958
Hello

  Take a look at this article, it may help you

http://www.blong.com/Conferences/BorCon2002/Actions/2110.htm
0
 
LVL 12

Expert Comment

by:Lee_Nover
ID: 7054989
this seemed fun so i did it :)

here's the unit code .. it won't be hard to reproduce

but if you wish you can get the whole project at:
http://lee.nover.has.his.evilside.org/isapi/pas2html.dll/pas2html?File=/delphi/Projects/ActionListEditor

zipped source in the Backups dir

------------


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ActnList, ComCtrls, ImgList;

type
  TForm1 = class(TForm)
    Images: TImageList;
    lvActions: TListView;
    actsMain: TActionList;
    btnLoad: TButton;
    btnClear: TButton;
    btnSave: TButton;
    pmMain: TPopupMenu;
    txtCaption: TEdit;
    Label1: TLabel;
    txtHint: TEdit;
    Label2: TLabel;
    txtImage: TEdit;
    Label3: TLabel;
    Action1: TAction;
    Action2: TAction;
    Action3: TAction;
    Action4: TAction;
    Action5: TAction;
    btnApply: TButton;
    udImage: TUpDown;
    Action11: TMenuItem;
    Action21: TMenuItem;
    Action31: TMenuItem;
    Action41: TMenuItem;
    Action51: TMenuItem;
    StatusBar1: TStatusBar;
    btnRestore: TButton;
    procedure btnLoadClick(Sender: TObject);
    procedure btnClearClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure lvActionsSelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure btnApplyClick(Sender: TObject);
    procedure btnRestoreClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnLoadClick(Sender: TObject);
var I: Integer;
    tmpAct: TAction;
begin
     lvActions.Clear;
     for I:=0 to actsMain.ActionCount-1 do
     begin
       tmpAct:=TAction(actsMain.Actions[I]);
       with lvActions.Items.Add do
       begin
         Data:=tmpAct;
         ImageIndex:=tmpAct.ImageIndex;
         Caption:=tmpAct.Caption;
         SubItems.Add(tmpAct.Hint);
       end;
     end;
end;

procedure TForm1.btnClearClick(Sender: TObject);
begin
     lvActions.Clear;
end;

procedure TForm1.btnSaveClick(Sender: TObject);
var I: Integer;
    tmpAct: TAction;
begin
     for I:=0 to lvActions.Items.Count-1 do
         with lvActions.Items[I] do
         begin
           tmpAct:=TAction(Data);
           tmpAct.ImageIndex:=ImageIndex;
           tmpAct.Caption:=Caption;
           tmpAct.Hint:=SubItems[0];
         end;
end;

procedure TForm1.lvActionsSelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
     if Item = nil then exit;
     txtCaption.Text:=Item.Caption;
     txtHint.Text:=Item.SubItems[0];
     udImage.Position:=Item.ImageIndex;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     udImage.Max:=Images.Count-1;
end;

procedure TForm1.btnApplyClick(Sender: TObject);
begin
     if lvActions.Selected = nil then exit;
     with lvActions.Selected do
     begin
       Caption:=txtCaption.Text;
       SubItems[0]:=txtHint.Text;
       ImageIndex:=udImage.Position;
     end;
end;

procedure TForm1.btnRestoreClick(Sender: TObject);
begin
     lvActionsSelectItem(lvActions, lvActions.Selected, true);
end;

end.



0
 
LVL 12

Expert Comment

by:Lee_Nover
ID: 7054999
ohh I forgot about Shortcut :)
well that's easy .. simply put a THotKey on the form and use it like any other edits in the example
0
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 
LVL 12

Accepted Solution

by:
Lee_Nover earned 500 total points
ID: 7055029
ok shortcuts added :)

the source from the above link or this :

-------------------------------------------------------


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ActnList, ComCtrls, ImgList;

type
  TForm1 = class(TForm)
    Images: TImageList;
    lvActions: TListView;
    actsMain: TActionList;
    btnLoad: TButton;
    btnClear: TButton;
    btnSave: TButton;
    pmMain: TPopupMenu;
    txtCaption: TEdit;
    Label1: TLabel;
    txtHint: TEdit;
    Label2: TLabel;
    txtImage: TEdit;
    Label3: TLabel;
    Action1: TAction;
    Action2: TAction;
    Action3: TAction;
    Action4: TAction;
    Action5: TAction;
    btnApply: TButton;
    udImage: TUpDown;
    Action11: TMenuItem;
    Action21: TMenuItem;
    Action31: TMenuItem;
    Action41: TMenuItem;
    Action51: TMenuItem;
    StatusBar1: TStatusBar;
    btnRestore: TButton;
    hkShortCut: THotKey;
    Label4: TLabel;
    procedure btnLoadClick(Sender: TObject);
    procedure btnClearClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure lvActionsSelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure btnApplyClick(Sender: TObject);
    procedure btnRestoreClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnLoadClick(Sender: TObject);
var I: Integer;
    tmpAct: TAction;
begin
     lvActions.Clear;
     for I:=0 to actsMain.ActionCount-1 do
     begin
       tmpAct:=TAction(actsMain.Actions[I]);
       with lvActions.Items.Add do
       begin
         Data:=tmpAct;
         ImageIndex:=tmpAct.ImageIndex;
         Caption:=tmpAct.Caption;
         SubItems.Add(tmpAct.Hint);
         SubItems.Add(IntToStr(tmpAct.ShortCut));
       end;
     end;
end;

procedure TForm1.btnClearClick(Sender: TObject);
begin
     lvActions.Clear;
end;

procedure TForm1.btnSaveClick(Sender: TObject);
var I: Integer;
    tmpAct: TAction;
begin
     for I:=0 to lvActions.Items.Count-1 do
         with lvActions.Items[I] do
         begin
           tmpAct:=TAction(Data);
           tmpAct.ImageIndex:=ImageIndex;
           tmpAct.Caption:=Caption;
           tmpAct.Hint:=SubItems[0];
           tmpAct.ShortCut:=StrToIntDef(SubItems[1], 0);
         end;
end;

procedure TForm1.lvActionsSelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
     if Item = nil then exit;
     with TAction(Item.Data) do
     begin
       txtCaption.Text:=Caption;
       txtHint.Text:=Hint;
       udImage.Position:=ImageIndex;
       hkShortCut.HotKey:=ShortCut;
     end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
     udImage.Max:=Images.Count-1;
end;

procedure TForm1.btnApplyClick(Sender: TObject);
begin
     if lvActions.Selected = nil then exit;
     with lvActions.Selected do
     begin
       Caption:=txtCaption.Text;
       SubItems[0]:=txtHint.Text;
       SubItems[1]:=IntToStr(hkShortCut.HotKey);
       ImageIndex:=udImage.Position;
     end;
end;

procedure TForm1.btnRestoreClick(Sender: TObject);
begin
     lvActionsSelectItem(lvActions, lvActions.Selected, true);
end;

end.
0
 

Author Comment

by:xenfung
ID: 7059549
Lee,

Nice code! BTW, how did you get such a custom URL like this?

http://lee.nover.has.his.evilside.org
0
 
LVL 12

Expert Comment

by:Lee_Nover
ID: 7059874
tnx, from a 'friend' :)
traded some hosts hehe
0

Featured Post

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
This is used to tweak the memory usage for your computer, it is used for servers more so than workstations but just be careful editing registry settings as it may cause irreversible results. I hold no responsibility for anything you do to the regist…

813 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now