Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Delphi Preprocessor und Subprocessor?

  Alt 10. Aug 2003, 15:06
Das lässt sich doch recht schnell zusammen schreiben, vorausgesetzt man kennt sich mit der OpenTools API aus.

Delphi-Quellcode:
unit PrePostProcessor;
interface
uses
  SysUtils, ToolsAPI;
type
  TCompilerNotifier = class(TNotifierObject, IOTAIDENotifier)
  public
   // IOTAIDENotifier
    procedure FileNotification(NotifyCode: TOTAFileNotification; const FileName: string;
      var Cancel: Boolean); virtual;
    procedure BeforeCompile(const Project: IOTAProject;
      var Cancel: Boolean); overload; virtual;
    procedure AfterCompile(Succeeded: Boolean); overload; virtual;
   // IOTAIDENotifier50
    procedure BeforeCompile(const Project: IOTAProject; IsCodeInsight: Boolean;
      var Cancel: Boolean); overload; virtual;
    procedure AfterCompile(Succeeded: Boolean; IsCodeInsight: Boolean); overload; virtual;
  end;

implementation
{ TCompilerNotifier }

{ veraltete Methoden }
procedure TCompilerNotifier.BeforeCompile(const Project: IOTAProject; var Cancel: Boolean);
begin
end;

procedure TCompilerNotifier.AfterCompile(Succeeded: Boolean);
begin
end;

{ neue Methoden }
procedure TCompilerNotifier.BeforeCompile(const Project: IOTAProject; IsCodeInsight: Boolean; var Cancel: Boolean);
begin
  if SameText(ExtractFileExt(Project.FileName), '.bpg') then Exit; // This should never happen
  if IsCodeInsight then Exit;

// Project.FileName gibt den Dateinamen des Projekts an (.dpr).

{ // save all
  Cancel := not (BorlandIDEServices as IOTAModuleServices).SaveAll;
  if Cancel then Exit; }


end;

procedure TCompilerNotifier.AfterCompile(Succeeded: Boolean; IsCodeInsight: Boolean);
begin
  if not IsCodeInsight then
  
end;

procedure TCompilerNotifier.FileNotification(NotifyCode: TOTAFileNotification;
  const FileName: string; var Cancel: Boolean);
begin
  Cancel := False;
end;


var
  NotifierIndex: Integer;

{ CompilerNotifier registrieren }
initialization
  NotifierIndex := (BorlandIDEServices as IOTAServices).AddNotifier(TCompilerNotifier.Create);

finalization
  if NotifierIndex >= 0 then
    (BorlandIDEServices as IOTAServices).RemoveNotifier(NotifierIndex);

 // clear all IOTACustomMessages here, else Delphi unloads the dll and then
 // it wants to free the messages -> AccessViolation
  (BorlandIDEServices as IOTAMessageServices).ClearToolMessages;

end.
Das ganze musst du jetzt nur noch in ein DesignTime only Package verpacken, dass designide und rtl requires.
  Mit Zitat antworten Zitat