Плагины для PascalABC.NET

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску

Среда PascalABC.NET позволяет расширять функционал с помощью плагинов. Ниже приведен пример простого плагина на паскале, который создает программу в редакторе и запускает ее:

{$apptype dll}

//для доступа к IVisualPascalABCPlugin, IVisualEnvironmentCompiler
{$reference PluginsSupport.dll}
//для доступа к IVisualEnvironmentCompiler.Compiler
{$reference Compiler.dll}

{$reference System.Windows.Forms.dll}
{$reference System.Drawing.dll}

//Ресурс - иконка кнопки
{$resource PABCTestPlugin_newfile.png}

unit PABCTestPlugin;

uses System.Collections.Generic,
     System.Drawing, 
     VisualPascalABCPlugins;

const NL = #13#10;

type
  //Тестовый плагин - должен иметь имя *_VisualPascalABCPlugin и реализовывать 
  //интерфейс VisualPascalABCPlugins.IVisualPascalABCPlugin
  //Этот плагин добавляет конпку на панель и в меню, по нажатию на которую:
  // 1. создается новый pas файл
  // 2. он открывается в оболочке
  // 3. он компилируется и запускается
  PABCTestPlugin_VisualPascalABCPlugin = class(IVisualPascalABCPlugin)
  private
    //интерфейс на оболочку компилятора
    compiler: IVisualEnvironmentCompiler;
    
    //для получения нового имени файла
    function GetNewFileName():string;
    begin
      var fileTemplate := 'C:\PABCWork.NET\NewProgram{0}.pas';
      var pasFile := '';
      var i := 1;
      repeat
        pasFile := string.Format(fileTemplate, i);
        i += 1;
      until(not System.IO.File.Exists(pasFile));
      result := pasFile;
    end;
    //обработчик нажатия на кнопку
    procedure Click1;
    begin
      //создаем файл
      var fileName := GetNewFileName;
      System.IO.File.WriteAllText(fileName, string.Format('begin'+NL+'Write(''Im new program "{0}" :)'');'+NL+'end.', fileName));
      //Открываем его в оболочке
      compiler.ExecuteAction(VisualEnvironmentCompilerAction.OpenFile, fileName);
      //Запускаем компиляцию и выполнение
      compiler.ExecuteAction(VisualEnvironmentCompilerAction.Run, nil);
    end;
  
  public
    //обязателен конструктор с одним параметром типа IVisualEnvironmentCompiler
    constructor(compiler: IVisualEnvironmentCompiler);
    begin
      self.compiler := compiler;
    end;
    //Обязательно
    function get_Name:string;
    begin
      result := 'PABC Test Plugin';
    end;
    //Обязательно
    function get_Version:string;
    begin
      result := '1.0';
    end;
    //Обязательно    
    function get_Copyright:string;
    begin
      result := 'PascalABCNet Team';
    end;
    //Обязательно
    //Визуальная оболочка с помощью этой функции получает спиок кнопок на панели и кнопок в меню:
    //Плагин должен добавить в соответвующий список необходимые кнопки.
    procedure GetGUI(MenuItems:List<IPluginGUIItem>; ToolBarItems:List<IPluginGUIItem>);
    begin
      //Грузим изображение из ресурса
      var img:Image := Image.FromStream(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream('PABCTestPlugin_newfile.png'));
      //Создаем кнопку
      var item1 := new PluginGUIItem('Новый файл', 'Создать новый файл', img, Color.Transparent, Click1);
      //Добавляем в меню
      MenuItems.Add(item1);
      //Добавляем на панель
      ToolBarItems.Add(item1);
    end;
    
  end;
  
end.

Скомпилированную dll-библиотеку плагина нужно затем поместить в папку PascalABC.NET. Также необходимо создать иконку PABCTestPlugin_newfile.png размером 16x16.