Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Customize Application ShortCuts

Posted on 2002-06-04
6
Medium Priority
?
212 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
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 12

Accepted Solution

by:
Lee_Nover earned 2000 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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
this video summaries big data hadoop online training demo (http://onlineitguru.com/big-data-hadoop-online-training-placement.html) , and covers basics in big data hadoop .
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…
Suggested Courses

886 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