home *** CD-ROM | disk | FTP | other *** search
- { Netscape plugin form and plugin class }
-
- unit NPForm;
-
- interface
-
- uses
- Messages, Windows, Classes, Controls, NPPlugin, NPSubCls,Forms ;
-
- { TPluginForm - base class for forms that can be put into plugins }
-
- type
- TFormPlugin = class ; { forward declaration }
-
- TPluginForm = class( TForm )
- private
- FPlugin : TFormPlugin ;
- protected
- procedure Loaded ; override ;
- procedure SetPluginDefaults ; virtual ;
- procedure CreateParams( var Params : TCreateParams ) ; override ;
- public
- { ignore compiler warning for next line -
- the redeclaration of Create is intentional }
- constructor Create( AOwner : TComponent ;
- APlugin : TFormPlugin ) ; virtual ;
- property Plugin : TFormPlugin read FPlugin ;
- end ;
-
- TPluginFormClass = class of TPluginForm ;
-
- TFormPlugin = class( TSubclassedPlugin )
- private
- FPluginForm : TPluginForm ;
- protected
- procedure ResizePluginForm ; virtual ;
- function CreatePluginForm : TPluginForm ; virtual ;
- procedure WindowHandleChanged ; override ;
- procedure WindowChanged ; override ;
- procedure WndProc( var Message : TMessage ) ; override ;
- public
- property PluginForm : TPluginForm read FPluginForm ;
- end ;
-
- TPluginFormInfo = class
- private
- FFormClass : TPluginFormClass ;
- public
- constructor Create( AFormClass : TPluginFormClass ) ;
- property FormClass : TPluginFormClass read FFormClass ;
- end ;
-
- procedure RegisterPluginForm( const MimeTypes : string ;
- FormClass : TPluginFormClass ) ;
-
- implementation
-
- { TPluginForm }
-
- constructor TPluginForm.Create( AOwner : TComponent ;
- APlugin : TFormPlugin) ;
- begin
- FPlugin := APlugin ;
- inherited Create( AOwner ) ;
- SetPluginDefaults ;
- end ;
-
- procedure TPluginForm.Loaded ;
- begin
- inherited Loaded ;
- SetPluginDefaults ;
- end ;
-
- procedure TPluginForm.SetPluginDefaults ;
- begin
- BorderStyle := bsNone ;
- end ;
-
- procedure TPluginForm.CreateParams( var Params : TCreateParams ) ;
- begin
- inherited CreateParams( Params ) ;
-
- { set window parent and special plugin form create params }
- if Plugin.WindowHandle <> 0 then with Params do begin
- WndParent := Plugin.WindowHandle ;
- Style := WS_CHILD or WS_CLIPCHILDREN or WS_CLIPSIBLINGS ;
- X := 0 ;
- Y := 0 ;
- end ;
- end ;
-
- { TFormPlugin }
-
- procedure TFormPlugin.ResizePluginForm ;
- var ARect : TRect ;
- begin
- Windows.GetClientRect( WindowHandle, ARect ) ;
- PluginForm.SetBounds( 0, 0, ARect.Right, ARect.Bottom ) ;
- end ;
-
- function TFormPlugin.CreatePluginForm : TPluginForm ;
- begin
- Result := ( ExtraInfo as TPluginFormInfo ).FormClass.Create( Application, Self )
- as TPluginForm ;
- end ;
-
- procedure TFormPlugin.WindowHandleChanged ;
- begin
- inherited WindowHandleChanged ;
- if WindowHandle = 0 then exit ;
-
- { set the clip children flag in the plugin window style so that }
- { the background isn't erased where the form is going to be. }
- SetWindowLong( WindowHandle, GWL_STYLE,
- GetWindowLong( WindowHandle, GWL_STYLE ) or WS_CLIPCHILDREN ) ;
-
- { we have a new window handle - create a form and resize it to fit }
- FPluginForm := CreatePluginForm ;
- try
- ResizePluginForm ;
- FPluginForm.Show ;
- except
- FPluginForm.Free ;
- FPluginForm := NIL ;
- end ;
- end ;
-
- procedure TFormPlugin.WindowChanged ;
- begin
- inherited WindowChanged ;
-
- { make sure the plugin form fills up the plugin area }
- if PluginForm <> NIL then ResizePluginForm ;
- end ;
-
- procedure TFormPlugin.WndProc( var Message : TMessage ) ;
- begin
- { don't erase the background }
- with Message do if Msg = WM_ERASEBKGND then
- Result := 0 else inherited WndProc( Message ) ;
- end ;
-
- { TPluginFormInfo }
-
- constructor TPluginFormInfo.Create( AFormClass : TPluginFormClass ) ;
- begin
- inherited Create ;
- FFormClass := AFormClass ;
- end ;
-
- procedure RegisterFormPlugin( PluginClass : TPluginClass ;
- const MimeTypes : string ;
- FormClass : TPluginFormClass ) ;
- begin
- PluginClass.Register( MimeTypes, TPluginFormInfo.Create( FormClass ) ) ;
- end ;
-
- { RegisterPluginForm
- Utility routine - could just as easily call Register method directly. }
-
- procedure RegisterPluginForm( const MimeTypes : string ;
- FormClass : TPluginFormClass ) ;
- begin
- RegisterFormPlugin( TFormPlugin, MimeTypes, FormClass ) ;
- end ;
-
- end.
-