Delphi: сочетание клавиш для создания нового UNIT?

Есть ли в Delphi 10.3.3 IDE сочетание клавиш для создания нового UNIT? Или можно создать такое сочетание клавиш?

Переход через File -> New слишком громоздкий.


person user1580348    schedule 12.12.2019    source источник
comment
Разве самый верхний левый значок (непосредственно под меню ,File) не предназначен для создания нового модуля (в данный момент у меня нет под рукой IDE)? Я знаю, что это не сочетание клавиш, но это быстрее, чем щелкать меню.   -  person Delphi Coder    schedule 12.12.2019
comment
@DelphiCoder Нет, для меня это View Unit. Единственный новый — это несколько значков над новыми элементами, которые вызывают диалоговое окно для выбора типа нового элемента для создания. Наверняка не легче. Кроме того, их положение можно настроить.   -  person Jerry Dodge    schedule 12.12.2019
comment
@JerryDodge Спасибо, что сделали это более понятным.   -  person Delphi Coder    schedule 12.12.2019
comment
Я собирался предложить использовать эксперт GExperts IDE Menu Shortcuts, но, к сожалению, оказалось, что он не поддерживает те элементы меню, которые IDE добавляет динамически, все настраиваемые записи находятся в разделе «Файл» -> «Новый», включая «Файл» -> «Новый» -> «Единица».   -  person dummzeuch    schedule 12.12.2019
comment
Также кажется, что нет команды «Создать новый юнит» для размещения на панели инструментов в диалоговом окне НАСТРОЙКА.   -  person user1580348    schedule 12.12.2019


Ответы (3)


Поскольку главное меню позволяет использовать ALT ярлыки, вы можете сделать:

ALT + Ф, Н, У

Это быстро выбирает «Файл»> «Создать»> «Единица».

person Jerry Dodge    schedule 12.12.2019
comment
Я уже пробовал это. Но это должно быть сочетание клавиш с одним действием. - person user1580348; 12.12.2019
comment
@ user1580348 Тогда, я думаю, вам не повезло. Это самое быстрое сочетание клавиш, которое кажется возможным. - person Jerry Dodge; 12.12.2019
comment
Вы можете создать мастер сопоставления клавиш для одной цели. Сам ToolsAPI предоставляет способы создания новых модулей. - person TLama; 13.12.2019

В приведенном ниже коде показан минимальный подключаемый модуль IDE, который использует OTA для добавления горячей клавиши для открытия нового модуля. Как показано, он активируется с помощью Ctrl-Alt-U.

Он работает так: использует сервисы OTA для доступа к главному меню IDE и добавляет новый пункт меню с заголовком MyAdded для простоты идентификации, который, если он виден (а это не обязательно), будет отображаться справа от Help. в главном меню IDE.

Этот добавленный пункт меню имеет сочетание клавиш Ctrl-Alt-U. Его обработчик OnClick, MyAddedClick, выполняет метод ClickNewUnit, который итерирует File | Новое подменю, чтобы найти Unit - Delphi MenuItem и вызвать его ClickMethod, в результате чего IDE создаст и откроет новый блок.

Добавьте приведенный ниже модуль в новый файл .DPK с именем NewUnit.Dpk, скомпилируйте его, затем используйте Component | Установите пакеты для установки.

unit NewUnitu;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ToolsAPI, Menus;

type
  TNewUnit = class
  private
    procedure ClickNewUnit(Sender: TObject);
  public
    //Services: IOTAServices;
    IntaServices : INTAServices40;
    ModServices: IOTAModuleServices;
    Module : IOTAModule;
    AddedMenuItem : TMenuItem;
    MainMenu : TMainMenu;
    procedure MyAddedClick(Sender : TObject);
    constructor Create;
    destructor Destroy; override;
  end;

var
  NewUnit: TNewUnit;
 [...]

constructor TNewUnit.Create;
begin
  inherited Create;
  //Services := BorlandIDEServices as IOTAServices;  not needed
  IntaServices := BorlandIDEServices as INTAServices40;
  Assert(IntaServices <> Nil);

  MainMenu := IntaServices.GetMainMenu;

  AddedMenuItem := TMenuItem.Create(Nil);
  AddedMenuItem.Caption := 'MyAdded';
  AddedMenuItem.ShortCut := 49237;  // = Ctrl-Alt-U
  AddedMenuItem.OnClick := MyAddedClick;
  //  AddedMenuItem.Visible := False;
  MainMenu.Items.Add(AddedMenuItem);
end;

destructor TNewUnit.Destroy;
begin
  MainMenu.Items.Remove(AddedMenuItem);
  AddedMenuItem.Free;
  //Services := Nil;
  IntaServices := Nil;
  inherited Destroy;
end;

procedure TNewUnit.ClickNewUnit(Sender : TObject);
var
  MenuItem : TMenuItem;
  AMenuItem : TMenuItem;
  i,
  j,
  k : Integer;
  Done : Boolean;
begin
 // ShowMessage('In click new unit'); exit;    for debugging
  Done := False;
  for i := 0 to MainMenu.Items.Count - 1 do begin
    MenuItem := MainMenu.Items[i];
    if Pos('file', LowerCase(MenuItem.Caption)) > 0 then begin
      AMenuItem := MenuItem;
      for j := 0 to AMenuItem.Count - 1 do begin
        for k := 0 to AMenuItem.Items[j].Count - 1 do begin
          if Pos('unit', LowerCase(MenuItem.Items[j].Items[k].Caption)) > 0 then begin
            MenuItem.Items[j].Items[k].Click;
            Done := True;
            Break;
          end;
        end;
        if Done then Break;
      end;
    end;
    if Done then Break;
  end;
end;

procedure TNewUnit.MyAddedClick(Sender: TObject);
begin
  ClickNewUnit(Sender);
end;

initialization

  NewUnit := TNewUnit.Create;

finalization

  NewUnit.Free;

end.

Предостережения

  • Это было написано и протестировано в Delphi 10.2.2 Seattle, потому что у меня не установлен Rio.

  • Он отлично работает, если окно редактора кода открыто во время нажатия Ctrl-Alt-U. Было бы надежнее, если бы он проверял, открыто ли окно редактора кода, и, если нет, открывал бы его.

person MartynA    schedule 14.12.2019
comment
Отлично работает под Рио. Спасибо, что опубликовали это. - person Eric Fortier; 26.01.2020

Нет, такого ярлыка нет. Альтернативой является щелчок правой кнопкой мыши по проекту -> Add New -> Unit.

Существуют сторонние дополнения, такие как GExperts или CnPack, которые добавляют возможности макросов в IDE, позволяя вам автоматизировать многие такие задачи, но это не встроено в vanilla IDE. Вы также можете написать собственное расширение IDE, используя API Open Tools.

person J...    schedule 12.12.2019
comment
Макрос — это не сочетание клавиш. И поскольку в vanilla IDE нет явного пункта меню для создания нового блока, невозможно настроить этот пункт меню с помощью ярлыков меню GExperts IDE. - person user1580348; 12.12.2019
comment
@user1580348 user1580348 Я использовал эти два в качестве примеров - я не знаю, могут ли они делать то, что вы хотите, я просто использую их, чтобы показать, что сторонние надстройки IDE существуют и потенциально могут добавлять такие функции. Давать конкретные рекомендации для сторонних инструментов в любом случае здесь не по теме, так что это просто показать, что вы хотите, чтобы ваши варианты были такими. - person J...; 12.12.2019