Announcement

Collapse
No announcement yet.

Experten erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Experten erstellen

    Hallo,

    wie kann ich einen Experten für die Delphi IDE erstellen?
    Wie sind die einzelnen Schritte ?

    besten Dank im vorraus DJ

  • #2
    Solltest Du Dich immer noch für die Expertenprogrammierung interessieren hier das Grundskelett. Den Experten mußt Du dann in der Registry eintragen.

    HKEY_Current_USER/Software/Borland/Delphi/X.0/Experts

    X steht hier für Deine Version.

    library ExpertCreator;

    uses
    ShareMem,
    ExptIntf,
    ToolIntf,
    VirtIntf,
    SysUtils,
    ExpExec in 'ExpExec.pas',// eine zusätzliche Unit
    Classes,
    Forms,
    ExpCreateForm in 'ExpCreateForm.pas' {Form1},
    IDEZugriff in 'IDEZugriff.pas';

    {$R *.RES}

    const ExpertName='Experten-Creator';
    Autor='Dr. Steffen Kriegel';
    Kommentar='Experte zum Erzeugen neuer Experten';

    type
    { Expertenklasse }
    TExpCreator=class(TIExpert)
    function GetName:String;override;
    function GetComment:String;override;
    function GetStyle:TExpertStyle;override;
    function GetState:TExpertState;override;
    function GetMenuText:String;override;
    function GetIDString:String;override;
    function GetAuthor:String;override;
    procedure RunExpert(Sender:TIMenuItemIntf);
    constructor Create;
    destructor destroy;override;
    procedure Execute;override;
    private
    NewMenuItem:TIMenuItemIntf;
    end;

    procedure HandleException;

    begin
    ToolServices.RaiseException(ReleaseException);
    end;

    { Expertenmethoden }

    function TExpCreator.GetStyle:TExpertStyle;

    begin
    try
    Result:=esAddIn;
    except
    HandleException;
    end;
    end;

    function TExpCreator.GetState:TExpertState;

    begin
    try
    Result:=[esEnabled];
    except
    HandleException;
    end;
    end;

    function TExpCreator.GetMenuText:String;

    begin
    try
    Result:=ExpertName;
    except
    HandleException;
    end;
    end;

    function TExpCreator.GetIDString:String;

    begin
    try
    Result:=ExpertName;
    except
    HandleException;
    end;
    end;

    constructor TExpCreator.Create;

    var MainMenu:TIMainMenuIntf;
    MainMenuItems, ComponentMenu:TIMenuItemIntf;

    begin
    inherited Create;
    MainMenu:=nil;
    MainMenuItems:=nil;
    ComponentMenu:=nil;
    NewMenuItem:=nil;
    try
    try
    MainMenu:=ToolServices.GetMainMenu;
    MainMenuItems:=MainMenu.GetMenuItems;
    ComponentMenu:=MainMenuItems.GetItem(6);
    NewMenuItem:=ComponentMenu.InsertItem
    (0,ExpertName,'TExpCreator','',0,0,0,[mfVisible,mfEnabled],RunExpert);

    finally
    ComponentMenu.Free;
    MainMenuItems.Free;
    MainMenu.Free;
    end;
    except
    Toolservices.RaiseException(ReleaseException);
    end;
    end;

    procedure TExpCreator.RunExpert;

    begin
    try
    ExecuteExpert(ToolServices);
    except
    HandleException;
    end;
    end;

    destructor TExpCreator.Destroy;

    begin
    NewMenuItem.Free;
    inherited Destroy;
    end;

    function TExpCreator.GetAuthor:String;

    begin
    try
    Result:=Autor;
    except
    HandleException;
    end;
    end;

    function TExpCreator.GetName:String;

    begin
    try
    Result:=ExpertName;
    except
    HandleException;
    end;
    end;

    function TExpCreator.GetComment:String;

    begin
    try
    Result:=Kommentar;
    except
    HandleException;
    end;
    end;

    procedure TExpCreator.Execute;

    begin
    try
    ExecuteExpert(ToolServices);//macht was
    except
    HandleException;
    end;
    end;

    procedure DoneExpert;

    begin
    end;

    function InitExpert(ToolServices:TIToolServices;
    RegisterProc:TExpertRegisterProc;
    var Terminate:TExpertTerminateProc):Boolean;
    stdcall;export;

    begin
    Result:=ExptIntf.ToolServices=nil;
    if not Result then Exit;
    ExptIntf.ToolServices:=ToolServices;
    if ToolServices<>nil then
    Application.Handle:=ToolServices.GetParentHandle;
    Terminate:=DoneExpert;
    RegisterProc(TExpCreator.Create);
    end;

    exports

    InitExpert name ExpertEntryPoint resident;

    begin
    end.

    Über Toolservices kannst Du Zugriff auf d

    Comment

    Working...
    X