⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syneditkeycmdseditor.pas

📁 SynEditStudio delphi 代码编辑器
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{-------------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
the specific language governing rights and limitations under the License.

The Original Code is: SynEditKeyCmdsEditor.pas, released 2000-04-07.
The Original Code is based on the mwKeyCmdsEditor.pas file from the
mwEdit component suite by Martin Waldenburg and other developers, the Initial
Author of this file is Brad Stowers.
All Rights Reserved.

Contributors to the SynEdit and mwEdit projects are listed in the
Contributors.txt file.

Alternatively, the contents of this file may be used under the terms of the
GNU General Public License Version 2 or later (the "GPL"), in which case
the provisions of the GPL are applicable instead of those above.
If you wish to allow use of your version of this file only under the terms
of the GPL and not to allow others to use your version of this file
under the MPL, indicate your decision by deleting the provisions above and
replace them with the notice and other provisions required by the GPL.
If you do not delete the provisions above, a recipient may use your version
of this file under either the MPL or the GPL.

$Id: SynEditKeyCmdsEditor.pas,v 1.11 2004/11/25 14:06:27 maelh Exp $

You may retrieve the latest version of this file at the SynEdit home page,
located at http://SynEdit.SourceForge.net

Known Issues:
-------------------------------------------------------------------------------}

{$IFNDEF QSYNEDITKEYCMDSEDITOR}
unit SynEditKeyCmdsEditor;
{$ENDIF}

{$I SynEdit.inc}

interface

uses
{$IFDEF SYN_CLX}
  Qt,
  QGraphics,
  QControls,
  QForms,
  QDialogs,
  QComCtrls,
  QMenus,
  QStdCtrls,
  QExtCtrls,
  QButtons,
  QSynEditKeyCmds,
{$ELSE}
  Windows,
  Messages,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  ComCtrls,
  Menus,
  StdCtrls,
  Buttons,
  ExtCtrls,
  SynEditKeyCmds,
{$ENDIF}
  SysUtils,
  Classes;

type
  TSynEditKeystrokesEditorForm = class(TForm)
    pnlBottom: TPanel;
    lnlInfo: TLabel;
    lnlInfo2: TLabel;
    btnAdd: TButton;
    btnEdit: TButton;
    btnDelete: TButton;
    btnClear: TButton;
    btnReset: TButton;
    btnOK: TButton;
    btnCancel: TButton;
    pnlCommands: TPanel;
    KeyCmdList: TListView;
    procedure FormResize(Sender: TObject);
    procedure btnAddClick(Sender: TObject);
    procedure btnEditClick(Sender: TObject);
    procedure btnDeleteClick(Sender: TObject);
    procedure btnResetClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnClearClick(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
    procedure btnCancelClick(Sender: TObject);
    procedure KeyCmdListClick(Sender: TObject);
  private
    FKeystrokes: TSynEditKeystrokes;
    FExtended: Boolean;
    procedure SetKeystrokes(const Value: TSynEditKeyStrokes);
    procedure UpdateKeystrokesList;
    {**************}
    {$IFNDEF SYN_CLX}
    procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
      message WM_GETMINMAXINFO;
    {$ENDIF}
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    property Keystrokes: TSynEditKeyStrokes read FKeystrokes write SetKeystrokes;
    property ExtendedString: Boolean read FExtended write FExtended;
  end;

implementation

{$R *.dfm}

uses
{$IFDEF SYN_CLX}
  QSynEditKeyCmdEditor,
  QSynEditStrConst;
{$ELSE}
  SynEditKeyCmdEditor,
  SynEditStrConst;
{$ENDIF}

{ TSynEditKeystrokesEditorForm }

constructor TSynEditKeystrokesEditorForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FKeystrokes := NIL;
end;

destructor TSynEditKeystrokesEditorForm.Destroy;
begin
  if Assigned(FKeyStrokes) then FKeystrokes.Free;
  inherited Destroy;
end;

procedure TSynEditKeystrokesEditorForm.SetKeystrokes(const Value:
  TSynEditKeyStrokes);
begin
  if FKeystrokes = NIL then
    FKeystrokes := TSynEditKeyStrokes.Create(Self);
  FKeystrokes.Assign(Value);
  UpdateKeystrokesList;
end;

procedure TSynEditKeystrokesEditorForm.UpdateKeystrokesList;
var
  x: integer;
begin
  KeyCmdList.Items.BeginUpdate;
  try
    KeyCmdList.Items.Clear;
    for x := 0 to FKeystrokes.Count-1 do
    begin
      with KeyCmdList.Items.Add do
      begin
        if FExtended then
          Caption := ConvertCodeStringToExtended(EditorCommandToCodeString(FKeystrokes[x].Command))
        else Caption := EditorCommandToCodeString(FKeystrokes[x].Command);
        if FKeystrokes[x].ShortCut = 0 then
          SubItems.Add(SYNS_ShortCutNone)
        else
          if FKeystrokes[x].ShortCut2 = 0 then
          {$IFDEF SYN_CLX}
            SubItems.Add(QMenus.ShortCutToText(FKeystrokes[x].ShortCut))
          {$ELSE}
            SubItems.Add(Menus.ShortCutToText(FKeystrokes[x].ShortCut))
          {$ENDIF}
          else
          {$IFDEF SYN_CLX}
            SubItems.Add(QMenus.ShortCutToText(FKeystrokes[x].ShortCut)+ ' '+
              QMenus.ShortCutToText(FKeystrokes[x].ShortCut2));
          {$ELSE}
            SubItems.Add(Menus.ShortCutToText(FKeystrokes[x].ShortCut)+ ' '+
              Menus.ShortCutToText(FKeystrokes[x].ShortCut2));
          {$ENDIF}
      end;
    end;
  finally
    KeyCmdList.Items.EndUpdate;
  end;
end;

procedure TSynEditKeystrokesEditorForm.FormResize(Sender: TObject);
begin
  pnlBottom.Width := pnlBottom.Left + ClientWidth - 25;
  pnlBottom.Height := ClientHeight - 11;
  pnlCommands.Width := ClientWidth - 136;
  pnlCommands.Height := ClientHeight - 75;

  btnAdd.Left := pnlCommands.Left + pnlCommands.Width + 14;
  btnEdit.Left := pnlCommands.Left + pnlCommands.Width + 14;
  btnDelete.Left := pnlCommands.Left + pnlCommands.Width + 14;
  btnClear.Left := pnlCommands.Left + pnlCommands.Width + 14;
  btnReset.Left := pnlCommands.Left + pnlCommands.Width + 14;

  btnOK.Left := pnlCommands.Left + pnlCommands.Width + 14;
  btnOK.Top := pnlCommands.Top + pnlCommands.Height - 19;
  btnCancel.Left := pnlCommands.Left + pnlCommands.Width + 14;
  btnCancel.Top := pnlCommands.Top + pnlCommands.Height + 13;

  lnlInfo.Top := pnlCommands.Top + pnlCommands.Height + 11;
  lnlInfo2.Top := pnlCommands.Top + pnlCommands.Height + 27;
end;

{***************}
{$IFNDEF SYN_CLX}
procedure TSynEditKeystrokesEditorForm.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
begin
  inherited;
  Msg.MinMaxInfo.ptMinTrackSize := Point(300, 225);
end;
{$ENDIF}

procedure TSynEditKeystrokesEditorForm.btnAddClick(Sender: TObject);            //DDH 10/16/01 Begin (reworked proc)
var
  NewStroke: TSynEditKeyStroke;
  AForm : TSynEditKeystrokeEditorForm;

  Function AddKeyStroke: Boolean;
  VAR KeyLoc : Integer;
      TmpCommand: String;
  begin
    Result := False;
    KeyLoc := 0;
    if AForm.ShowModal = mrOK then
    begin
      Result := True;
      NewStroke := FKeystrokes.Add;
      NewStroke.Command := AForm.Command;
      try
        KeyLoc := TSynEditKeyStrokes(NewStroke.Collection).FindShortcut2(AForm.Keystroke, AForm.Keystroke2);
        NewStroke.ShortCut := AForm.Keystroke;
        NewStroke.ShortCut2 := AForm.Keystroke2;
      except
        on ESynKeyError do
          begin
            // Shortcut already exists in the collection!
            if FExtended then
              TmpCommand := ConvertCodeStringToExtended(EditorCommandToCodeString(TSynEditKeyStrokes(NewStroke.Collection).Items[KeyLoc].Command))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -