158 lines
4.3 KiB
ObjectPascal
158 lines
4.3 KiB
ObjectPascal
{******************************************************************
|
|
|
|
JEDI-VCL Demo
|
|
|
|
Copyright (C) 2002 Project JEDI
|
|
|
|
Original author:
|
|
|
|
Contributor(s):
|
|
|
|
You may retrieve the latest version of this file at the JEDI-JVCL
|
|
home page, located at http://jvcl.sourceforge.net
|
|
|
|
The contents of this file are used with permission, subject to
|
|
the Mozilla Public License Version 1.1 (the "License"); you may
|
|
not use this file except in compliance with the License. You may
|
|
obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1_1Final.html
|
|
|
|
Software distributed under the License is distributed on an
|
|
"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
implied. See the License for the specific language governing
|
|
rights and limitations under the License.
|
|
|
|
******************************************************************}
|
|
|
|
unit ufrmMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, JvPluginManager, ExtCtrls, JvComponent, JvPlgIntf;
|
|
|
|
type
|
|
TfrmMain = class(TForm, IUnknown, IMyMainAppInterface)
|
|
JvPluginManager1: TJvPluginManager;
|
|
Memo1: TMemo;
|
|
Panel1: TPanel;
|
|
butLoadPlugins: TButton;
|
|
lstPlugins: TListBox;
|
|
butShowPlug: TButton;
|
|
butUnload: TButton;
|
|
Splitter1: TSplitter;
|
|
procedure butLoadPluginsClick(Sender: TObject);
|
|
procedure butShowPlugClick(Sender: TObject);
|
|
procedure JvPluginManager1ErrorLoading(Sender: TObject; s: string);
|
|
procedure butUnloadClick(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
private
|
|
{ Private-Deklarationen }
|
|
|
|
public
|
|
{ Public-Deklarationen }
|
|
//
|
|
function GetPosition : TPoint;
|
|
procedure SetPosition(const NewPos : TPoint);
|
|
procedure DoSomethingSpecial(Name: String; OnClick: TNotifyEvent);
|
|
end;
|
|
|
|
var
|
|
frmMain: TfrmMain;
|
|
|
|
implementation
|
|
|
|
uses JvPlugin;
|
|
|
|
{$R *.DFM}
|
|
|
|
procedure TfrmMain.butLoadPluginsClick(Sender: TObject);
|
|
var
|
|
counter: integer;
|
|
Plug: TJvPlugin;
|
|
MyPlug: IMyPlugInInterface;
|
|
begin
|
|
butLoadPlugins.Enabled := False;
|
|
|
|
// Loading Plugins
|
|
Memo1.Lines.Add('Looking in ' + ExtractFilePath(Application.Exename) + ' for Plugins');
|
|
JvPluginManager1.LoadPlugins;
|
|
Memo1.Lines.Add(IntToStr(JvPluginManager1.PluginCount) + ' plugins loaded.');
|
|
|
|
// Check if plugins have correct interface
|
|
counter := 0;
|
|
while counter < JvPluginManager1.PluginCount do
|
|
begin
|
|
Plug := JvPluginManager1.Plugins[counter];
|
|
if Plug.GetInterface(IMyPlugInInterface, MyPlug) then
|
|
begin
|
|
Memo1.Lines.Add(IntToStr(counter) + ' : ' + Plug.Description + ' V ' + Plug.PluginVersion);
|
|
lstPlugins.Items.Add(Plug.Description + ' V ' + Plug.PluginVersion);
|
|
|
|
Plug.Configure;
|
|
MyPlug.Init(Self); // make the plugin aware of the main app
|
|
Inc(counter);
|
|
end
|
|
else
|
|
begin
|
|
Memo1.Lines.Add('Warning : Plugin ' + Plug.Description + ' has unknown interface - unloaded!');
|
|
JvPluginManager1.UnloadPlugin(counter);
|
|
end;
|
|
end;
|
|
if (lstPlugins.ItemIndex < 0) then
|
|
lstPlugins.ItemIndex := 0;
|
|
end;
|
|
|
|
procedure TfrmMain.butShowPlugClick(Sender: TObject);
|
|
var
|
|
MyPlug: IMyPlugInInterface;
|
|
begin
|
|
if (lstPlugins.ItemIndex < 0) or
|
|
(lstPlugins.ItemIndex > lstPlugins.Items.Count) then
|
|
Exit;
|
|
|
|
JvPluginManager1.Plugins[lstPlugins.ItemIndex].GetInterface(IMyPlugInInterface, MyPlug);
|
|
MyPlug.ShowPlug(self);
|
|
end;
|
|
|
|
procedure TfrmMain.JvPluginManager1ErrorLoading(Sender: TObject;
|
|
s: string);
|
|
begin
|
|
Memo1.Lines.Add(s);
|
|
end;
|
|
|
|
procedure TfrmMain.butUnloadClick(Sender: TObject);
|
|
begin
|
|
while JvPluginManager1.PluginCount <> 0 do
|
|
JvPluginManager1.UnloadPlugin(0);
|
|
|
|
lstPlugins.Clear;
|
|
|
|
butLoadPlugins.Enabled := True;
|
|
end;
|
|
|
|
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
|
|
begin
|
|
butUnloadClick(nil);
|
|
end;
|
|
|
|
procedure TfrmMain.DoSomethingSpecial(Name: String; OnClick: TNotifyEvent);
|
|
begin
|
|
ShowMessageFmt('DoSomethingSpecial was called with "%s" as the Name parameter',[Name]);
|
|
end;
|
|
|
|
function TfrmMain.GetPosition: TPoint;
|
|
begin
|
|
Result := ClientOrigin;
|
|
end;
|
|
|
|
procedure TfrmMain.SetPosition(const NewPos: TPoint);
|
|
begin
|
|
Top := NewPos.Y;
|
|
Left := NewPos.X;
|
|
end;
|
|
|
|
end.
|
|
|