home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2005 May
/
CMCD0505.ISO
/
Software
/
Shareware
/
Comunicatii
/
netmansuite
/
setup.exe
/
Samples
/
Delphi
/
Plugin.dpr
< prev
next >
Wrap
Text File
|
2001-05-24
|
7KB
|
235 lines
library Plugin;
uses
SysUtils,
Classes,
Windows,
stdctrls,
forms,
PluginTypes in 'PluginTypes.pas',
PluginPreferences in 'PluginPreferences.pas' {fmPluginPreferences},
PluginProperties in 'PluginProperties.pas' {fmPluginProperties};
{$R *.RES}
// declaration some variables need to works plugin
var
iPrefsValue : integer;
iPropsValue : integer;
resourcestring
SBadParameters = 'Bad Parameters';
SSuccess = 'Success';
SValueLess = 'The properties value is less then the preferences value';
//------------------------------------------------------------------------------
procedure BeginEditProperties( var pPluginData : KHW_PLUGIN_DATA );stdcall;
var
rect:trect;
begin
if not Assigned( fmPluginProperties )
then
fmPluginProperties := TfmPluginProperties.CreateParented( pPluginData.m_wndParent );
with fmPluginProperties do
begin
// fill controls data
// check data size, if 0 then no allocated data
if ( pPluginData.m_iDataLen = sizeof(integer) )
then
begin
Edit1.Text := intToStr(PInteger(pPluginData.m_pData)^);
iPropsValue := PInteger(pPluginData.m_pData)^;
end
else
begin
Edit1.Text := '0';
iPropsValue := 0;
end;
Edit2.Text := IntToStr(iPrefsValue);
// set border style to bsNone
BorderStyle := bsNone;
// adjust form size to tabsheet page size
Windows.GetWindowRect( pPluginData.m_wndParent, rect );
fmPluginProperties.SetBounds(0,0,rect.Right,rect.Bottom);
// show form on tab page 0,0 corner
Visible := TRUE;
end;
end;
//------------------------------------------------------------------------------
procedure GetProperties ( var pPluginData : KHW_PLUGIN_DATA);stdcall;
begin
// check if data is allocated, and free
if (pPluginData.m_iDataLen > 0 )
then
begin
freemem(pPluginData.m_pData,pPluginData.m_iDataLen);
pPluginData.m_pData := nil;
pPluginData.m_iDataLen := 0;
end;
// allocate memory for data
getmem(pPluginData.m_pData , sizeof(integer));
pPluginData.m_iDataLen := sizeof(integer);
// store data to structure
try
// if value not convert
iPropsValue := StrToInt(fmPluginProperties.Edit1.Text);
except
// do nothing
end;
PInteger(pPluginData.m_pData)^ := iPropsValue;
StrCopy(pPluginData.m_szDisplayString, Pchar(Format('%d >= %d ?',[iPropsValue,iPrefsValue])));
end;
//------------------------------------------------------------------------------
procedure EndEditProperties;stdcall;
begin
// free plugin form
if Assigned(fmPluginProperties)
then
begin
fmPluginProperties.Free;
fmPluginProperties := NIL;
end;
end;
//------------------------------------------------------------------------------
procedure BeginEditPreferences( const hwndParent : HWND );stdcall;
var
rect :TRect;
begin
if not Assigned( fmPluginPreferences )
then
fmPluginPreferences := TfmPluginPreferences.CreateParented( hwndParent );
with fmPluginPreferences do
begin
// fill controls data
Edit1.text := IntToStr( iPrefsValue );
// set border style to bsNone
BorderStyle := bsNone;
// adjust form size to tabsheet page size
Windows.GetWindowRect( hwndParent, rect );
fmPluginPreferences.SetBounds(0,0,rect.Right,rect.Bottom);
// show form on tab page 0,0 corner
Visible := TRUE;
end;
end;
//------------------------------------------------------------------------------
procedure EndEditPreferences;stdcall;
begin
// free plugin form
if Assigned(fmPluginPreferences)
then
begin
fmPluginPreferences.Free;
fmPluginPreferences := NIL;
end;
end;
//------------------------------------------------------------------------------
function CheckServer( var pPluginData : KHW_PLUGIN_CHECK_DATA ) : integer;stdcall;
begin
result := 0;
if ((pPluginData.m_iDataLen > 0) and
(pPluginData.m_iDataLen <> sizeof(integer)))
then
begin
getmem( pPluginData.m_szError, Length(SBadParameters) );
StrCopy(pPluginData.m_szError, PChar(SBadParameters));
exit;
end;
if (PInteger(pPluginData.m_pData)^ >= iPrefsValue)
then
begin
getmem( pPluginData.m_szError, Length(SSuccess) );
StrCopy(pPluginData.m_szError, PChar(SSuccess));
result := 1;
end
else
begin
getmem( pPluginData.m_szError, Length(SValueLess) );
StrCopy(pPluginData.m_szError, PChar(SValueLess));
end;
end;
//------------------------------------------------------------------------------
procedure GetInfo( var pPluginInfo : KHW_PLUGIN_INFO );stdcall;
begin
with pPluginInfo do
begin
m_dVersion := 2.6;
m_iID := iPluginID;
m_szName := 'Sample Delphi plugin';
m_szCheckName := 'Sample Delphi plugin';
m_szPropertiesTabTitle := 'Sample Delphi';
m_szPreferencesTabTitle := 'Sample Delphi';
end;
end;
// this function call automatically Alchemy Eye for clean heap memory
// allocated plugin
procedure ReleaseMemory( const pMemory : pointer; const iSize : integer);stdcall;
begin
freemem(pMemory,iSize);
end;
//------------------------------------------------------------------------------
procedure SavePreferences;stdcall;
begin
if fmPluginPreferences.Edit1.Text = ''
then
MessageBox(0,PChar('Please enter integer value!'),PChar('Alchemy eye'),MB_ICONERROR)
else
begin
WritePrivateProfileString(PChar('General'),
PChar('Preferences value'),
PChar(fmPluginPreferences.Edit1.Text),
Pchar(ExtractFileDir( Application.ExeName ) + '\plugin'+IntToStr(iPluginID)+'.ini'));
try
iPrefsValue := StrToInt( fmPluginPreferences.Edit1.Text );
except
// do nothing
end;
end;
end;
//------------------------------------------------------------------------------
function LibraryEvent( lbState : Integer ):boolean;
begin
result := TRUE;
if (lbState = DLL_PROCESS_ATTACH) or
(lbState = DLL_THREAD_ATTACH)
then
begin
iPrefsValue := GetPrivateProfileInt(PChar('General'),
PChar('Preferences value'),
0,
Pchar(ExtractFileDir( Application.ExeName ) + '\plugin'+IntToStr(iPluginID)+'.ini'));
end;
end;
// Declare exports function
exports
GetInfo name 'GetInfo',
BeginEditProperties name 'BeginEditProperties',
GetProperties name 'GetProperties',
EndEditProperties name 'EndEditProperties',
BeginEditPreferences name 'BeginEditPreferences',
EndEditPreferences name 'EndEditPreferences',
SavePreferences name 'SavePreferences',
ReleaseMemory name 'ReleaseMemory',
// NOTE: CheckServer-type plugin!
CheckServer name 'CheckServer';
begin
DllProc := @LibraryEvent;
end.