Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перечисление всех форм в IDE Delphi с использованием OpenToolsAPI для DLL-экспортера

Delphi , Синтаксис , API реализация

При разработке экспортеров для Delphi IDE, особенно при переходе от BPL к DLL, возникает необходимость перечисления всех форм, отображаемых в среде разработки. Один из способов - использование свойства Screen.Forms, однако это работает только для BPL-экспортеров. В случае DLL-экспортеров необходимо использовать другие подходы, например, OpenToolsAPI (OTA).

Почему Screen.Forms не подходит для DLL-экспортеров?

Свойство Screen.Forms предназначено для работы с глобальными данными VCL, к которым есть доступ из BPL-экспортеров. При использовании DLL-экспортера необходимо убедиться, что ваш DLL использует ту же инстанцию VCL, что и IDE. Это достигается путем компиляции DLL с опцией линкера "use runtime packages".

Использование OpenToolsAPI для перечисления форм

OpenToolsAPI предоставляет набор интерфейсов и классов для работы с IDE Delphi. Один из способов перечисления форм - использование нотификаторов, которые позволяют отслеживать открытие форм в IDE. Ниже приведен пример кода, который демонстрирует, как можно использовать нотификатор для получения списка открытых форм:

type
  TFormNotifier = class(TNotifierObject, IOTAIDENotifier)
  public
    procedure FileNotification(NotifyCode: TOTAFileNotification; const FileName: String; var Cancel: Boolean);
  end;

procedure RegisterIdeNotifier;
var
  Services: IOTAServices;
begin
  if BorlandIDEServices <> nil then
  begin
    Services := BorlandIDEServices as IOTAServices;
    Services.AddNotifier(TFormNotifier.Create);
  end;
end;

procedure RemoveIdeNotifier;
var
  Services: IOTAServices;
begin
  if IdeNotifierIndex <> -1 then
  begin
    Services := BorlandIDEServices as IOTAServices;
    Services.RemoveNotifier(IdeNotifierIndex);
  end;
end;

{ TFormNotifier }
procedure TFormNotifier.FileNotification(NotifyCode: TOTAFileNotification; const FileName: String; var Cancel: Boolean);
begin
  if BorlandIDEServices <> nil then
    if (NotifyCode = ofnFileOpening) then
    begin
      // Здесь можно реализовать логику для перечисления форм
    end;
end;

initialization
  RegisterIdeNotifier;
finalization
  RemoveIdeNotifier;
end.

Также можно использовать процедуру GetOpenForms, которая перечисляет все открытые формы в IDE, используя OpenToolsAPI:

procedure GetOpenForms(List: TStrings);
var
  Services: IOTAModuleServices;
  I, J: Integer;
  Module: IOTAModule;
  Editor: IOTAEditor;
  FormEditor: IOTAFormEditor;
begin
  if (BorlandIDEServices <> nil) and (List <> nil) then
  begin
    Services := BorlandIDEServices as IOTAModuleServices;
    for I := 0 to Services.ModuleCount - 1 do
    begin
      Module := Services.Modules[I];
      for J := 0 to Module.ModuleFileCount - 1 do
      begin
        Editor := Module.ModuleFileEditors[J];
        if Assigned(Editor) then
        begin
          if Supports(Editor, IOTAFormEditor, FormEditor) then
            List.AddObject(FormEditor.FileName, Pointer(FormEditor.GetRootComponent));
        end;
      end;
    end;
  end;
end;

Важно отметить, что указатель в StringList является интерфейсом IOTAComponent, и для получения экземпляра TForm потребуется дополнительная обработка.

Заключение

Использование OpenToolsAPI позволяет разработчикам экспортеров для Delphi IDE получать доступ к информации о формах, открытых в среде разработки, что особенно полезно при работе с DLL-экспортерами. Приведенные примеры кода демонстрируют, как можно перечислить все открытые формы и отслеживать их изменение.

Создано по материалам из источника по ссылке.

Использование OpenToolsAPI для перечисления всех форм в IDE Delphi с целью создания DLL-экспортера.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: API реализация ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 11:42:45/0.013866186141968/1