home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 May / CMCD0505.ISO / Software / Shareware / Comunicatii / netmansuite / setup.exe / Samples / Delphi / Plugin.dpr < prev    next >
Text File  |  2001-05-24  |  7KB  |  235 lines

  1. library Plugin;
  2.  
  3. uses
  4.   SysUtils,
  5.   Classes,
  6.   Windows,
  7.   stdctrls,
  8.   forms,
  9.   PluginTypes in 'PluginTypes.pas',
  10.   PluginPreferences in 'PluginPreferences.pas' {fmPluginPreferences},
  11.   PluginProperties in 'PluginProperties.pas' {fmPluginProperties};
  12.  
  13. {$R *.RES}
  14.  
  15. //  declaration some variables need to works plugin
  16. var
  17.     iPrefsValue : integer;
  18.     iPropsValue : integer;
  19.  
  20. resourcestring
  21.     SBadParameters = 'Bad Parameters';
  22.     SSuccess       = 'Success';
  23.     SValueLess     = 'The properties value is less then the preferences value';
  24.  
  25. //------------------------------------------------------------------------------
  26. procedure BeginEditProperties( var pPluginData : KHW_PLUGIN_DATA );stdcall;
  27. var
  28.     rect:trect;
  29. begin
  30.     if not Assigned( fmPluginProperties )
  31.     then
  32.         fmPluginProperties := TfmPluginProperties.CreateParented( pPluginData.m_wndParent );
  33.  
  34.     with fmPluginProperties do
  35.     begin
  36.     //  fill controls data
  37.     //  check data size, if 0 then no allocated data
  38.         if ( pPluginData.m_iDataLen = sizeof(integer) )
  39.         then
  40.         begin
  41.             Edit1.Text  := intToStr(PInteger(pPluginData.m_pData)^);
  42.             iPropsValue := PInteger(pPluginData.m_pData)^;
  43.         end
  44.         else
  45.         begin
  46.             Edit1.Text  := '0';
  47.             iPropsValue := 0;
  48.         end;
  49.  
  50.         Edit2.Text := IntToStr(iPrefsValue);
  51.  
  52.     //  set border style to bsNone
  53.         BorderStyle := bsNone;
  54.     //  adjust form size to tabsheet page size
  55.         Windows.GetWindowRect( pPluginData.m_wndParent, rect );
  56.         fmPluginProperties.SetBounds(0,0,rect.Right,rect.Bottom);
  57.     //  show form on tab page 0,0 corner
  58.         Visible := TRUE;
  59.     end;
  60. end;
  61. //------------------------------------------------------------------------------
  62. procedure GetProperties ( var pPluginData : KHW_PLUGIN_DATA);stdcall;
  63. begin
  64. //  check if data is allocated, and free
  65.     if (pPluginData.m_iDataLen > 0 )
  66.     then
  67.     begin
  68.         freemem(pPluginData.m_pData,pPluginData.m_iDataLen);
  69.         pPluginData.m_pData    := nil;
  70.         pPluginData.m_iDataLen := 0;
  71.     end;
  72.  
  73. //  allocate memory for data
  74.     getmem(pPluginData.m_pData , sizeof(integer));
  75.     pPluginData.m_iDataLen := sizeof(integer);
  76.  
  77. //  store data to structure
  78.     try
  79.     //  if value not convert
  80.         iPropsValue := StrToInt(fmPluginProperties.Edit1.Text);
  81.     except
  82.     //  do nothing
  83.     end;
  84.     PInteger(pPluginData.m_pData)^ := iPropsValue;
  85.  
  86.     StrCopy(pPluginData.m_szDisplayString, Pchar(Format('%d >= %d ?',[iPropsValue,iPrefsValue])));
  87. end;
  88. //------------------------------------------------------------------------------
  89. procedure EndEditProperties;stdcall;
  90. begin
  91.     //  free plugin form
  92.     if Assigned(fmPluginProperties)
  93.     then
  94.     begin
  95.         fmPluginProperties.Free;
  96.         fmPluginProperties := NIL;
  97.     end;
  98. end;
  99. //------------------------------------------------------------------------------
  100. procedure BeginEditPreferences( const hwndParent : HWND );stdcall;
  101. var
  102.     rect :TRect;
  103. begin
  104.     if not Assigned( fmPluginPreferences )
  105.     then
  106.         fmPluginPreferences := TfmPluginPreferences.CreateParented( hwndParent );
  107.  
  108.     with fmPluginPreferences do
  109.     begin
  110.     //  fill controls data
  111.         Edit1.text := IntToStr( iPrefsValue );
  112.  
  113.     //  set border style to bsNone
  114.         BorderStyle := bsNone;
  115.     //  adjust form size to tabsheet page size
  116.         Windows.GetWindowRect( hwndParent, rect );
  117.         fmPluginPreferences.SetBounds(0,0,rect.Right,rect.Bottom);
  118.     //  show form on tab page 0,0 corner
  119.         Visible := TRUE;
  120.     end;
  121. end;
  122. //------------------------------------------------------------------------------
  123. procedure EndEditPreferences;stdcall;
  124. begin
  125.     //  free plugin form
  126.     if Assigned(fmPluginPreferences)
  127.     then
  128.     begin
  129.         fmPluginPreferences.Free;
  130.         fmPluginPreferences := NIL;
  131.     end;
  132. end;
  133. //------------------------------------------------------------------------------
  134. function CheckServer( var pPluginData : KHW_PLUGIN_CHECK_DATA ) : integer;stdcall;
  135. begin
  136.     result := 0;
  137.  
  138.     if ((pPluginData.m_iDataLen > 0) and
  139.         (pPluginData.m_iDataLen <> sizeof(integer)))
  140.     then
  141.     begin
  142.         getmem( pPluginData.m_szError, Length(SBadParameters) );
  143.         StrCopy(pPluginData.m_szError, PChar(SBadParameters));
  144.         exit;
  145.     end;
  146.  
  147.     if (PInteger(pPluginData.m_pData)^ >= iPrefsValue)
  148.     then
  149.     begin
  150.         getmem( pPluginData.m_szError, Length(SSuccess) );
  151.         StrCopy(pPluginData.m_szError, PChar(SSuccess));
  152.         result := 1;
  153.     end
  154.     else
  155.     begin
  156.         getmem( pPluginData.m_szError, Length(SValueLess) );
  157.         StrCopy(pPluginData.m_szError, PChar(SValueLess));
  158.     end;
  159.  
  160. end;
  161. //------------------------------------------------------------------------------
  162. procedure GetInfo( var pPluginInfo : KHW_PLUGIN_INFO );stdcall;
  163. begin
  164.     with pPluginInfo do
  165.     begin
  166.         m_dVersion              := 2.6;
  167.         m_iID                   := iPluginID;
  168.         m_szName                := 'Sample Delphi plugin';
  169.         m_szCheckName           := 'Sample Delphi plugin';
  170.         m_szPropertiesTabTitle  := 'Sample Delphi';
  171.         m_szPreferencesTabTitle := 'Sample Delphi';
  172.     end;
  173. end;
  174. //  this function call automatically Alchemy Eye for clean heap memory
  175. //  allocated plugin
  176. procedure ReleaseMemory( const pMemory : pointer; const iSize : integer);stdcall;
  177. begin
  178.     freemem(pMemory,iSize);
  179. end;
  180. //------------------------------------------------------------------------------
  181. procedure SavePreferences;stdcall;
  182. begin
  183.     if fmPluginPreferences.Edit1.Text = ''
  184.     then
  185.         MessageBox(0,PChar('Please enter integer value!'),PChar('Alchemy eye'),MB_ICONERROR)
  186.     else
  187.     begin
  188.         WritePrivateProfileString(PChar('General'),
  189.                                 PChar('Preferences value'),
  190.                                 PChar(fmPluginPreferences.Edit1.Text),
  191.                                 Pchar(ExtractFileDir( Application.ExeName ) + '\plugin'+IntToStr(iPluginID)+'.ini'));
  192.  
  193.  
  194.         try
  195.             iPrefsValue := StrToInt( fmPluginPreferences.Edit1.Text );
  196.         except
  197.         // do nothing
  198.         end;
  199.     end;
  200. end;
  201. //------------------------------------------------------------------------------
  202. function LibraryEvent( lbState : Integer ):boolean;
  203. begin
  204.     result := TRUE;
  205.  
  206.     if  (lbState = DLL_PROCESS_ATTACH) or
  207.         (lbState = DLL_THREAD_ATTACH)
  208.     then
  209.     begin
  210.         iPrefsValue := GetPrivateProfileInt(PChar('General'),
  211.                                             PChar('Preferences value'),
  212.                                             0,
  213.                         Pchar(ExtractFileDir( Application.ExeName ) + '\plugin'+IntToStr(iPluginID)+'.ini'));
  214.     end;
  215. end;
  216. //  Declare exports function
  217. exports
  218.     GetInfo name 'GetInfo',
  219.  
  220.     BeginEditProperties name 'BeginEditProperties',
  221.     GetProperties       name 'GetProperties',
  222.     EndEditProperties   name 'EndEditProperties',
  223.  
  224.     BeginEditPreferences name 'BeginEditPreferences',
  225.     EndEditPreferences   name 'EndEditPreferences',
  226.     SavePreferences      name 'SavePreferences',
  227.  
  228.     ReleaseMemory   name 'ReleaseMemory',
  229.  
  230. //  NOTE: CheckServer-type plugin!
  231.     CheckServer name 'CheckServer';
  232. begin
  233.     DllProc := @LibraryEvent;
  234. end.
  235.