[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]

    {-----------------------------------------------------------------------------}
    { Design-time testing of TCommonDialog component descendants.                 }
    { Copyright 1996, Brad Stowers.  All Rights Reserved.                         }
    { This component can be freely used and distributed in commercial and private }
    { environments, provied this notice is not modified in any way and there is   }
    { no charge for it other than nomial handling fees.  Contact me directly for  }
    { modifications to this agreement.                                            }
    {-----------------------------------------------------------------------------}
    { Feel free to contact me if you have any questions, comments or suggestions  }
    { at bstowers@pobox.com or 72733,3374 on CompuServe.                          }
    { The lateset version will always be available on the web at:                 }
    {   http://www.pobox.com/~bstowers/delphi/                                    }
    {-----------------------------------------------------------------------------}
    { Date last modified:  May 17, 1997                                           }
    {-----------------------------------------------------------------------------}

    { ----------------------------------------------------------------------------}
    { TBrowseDirectory v1.02                                                      }
    { ----------------------------------------------------------------------------}
    { Description:                                                                }
    {   A component editor that allows testing of the TCommonDialog descendants   }
    {   at design time.  This allows you to set the varios options and then view  }
    {   the results without having to compile and run your application.  The name }
    {   "Component Editor" is a bit of a misnomer for this, but that's what it's  }
    {   called.  We add a menu item, 'Test Dialog', to the context menu (right    }
    {   click) the displays the dialog, and add the same functionality for double }
    {   clicking on the component.  If the TCommonDialog class had a pure virtual }
    {   method "Execute" that each descendant overrode like it should, this would }
    {   be much easier.  Because Execute is not defined in the ancestor, we have  }
    {   register for each component type we want to add this to instead of just   }
    {   registering it for TCommonDialog.  Beginning object oriented programmers  }
    {   learn from this:  Just because you can't see a need for it, doesn't mean  }
    {   that there isn't one.                                                     }
    { ----------------------------------------------------------------------------}
    { Revision History:                                                           }
    { 1.00:  + Initial release                                                    }
    { 1.01:  + Changed 'AnsiString' to 'String'.  Will now compile with no        }
    {          changes under Delphi 1.x.                                          }
    { 1.02:  + Updated for Delphi 3 compatibility.  If using with Delphi 3, the   }
    {          "Test" item will now show up on all TCommonDialog descendant       }
    {          components because Borland finally added an abstract Execute       }
    {          method to it.                                                      }
    { ----------------------------------------------------------------------------}

    unit DlgTest;

    interface

    uses DsgnIntf, Dialogs;

    type
      TCommonDialogEditor = class(TDefaultEditor)
      public
        procedure ExecuteVerb(Index : Integer); override;
        function GetVerb(Index : Integer): string; override;
        function GetVerbCount : Integer; override;
        procedure Edit; override;
      end;

    {$IFDEF VER100}
      { Just redeclare it so we can get at the Execute method, which is protected. }
      TMyCommonDialog = class(TCommonDialog)
      end;
    {$ENDIF}

    procedure Register;

    implementation

    {$IFDEF VER100}
    uses
      ExtDlgs;
    {$ENDIF}

    procedure TCommonDialogEditor.ExecuteVerb(Index: Integer);
    begin
      if Index <> 0 then Exit; { We only have one verb, so exit if this ain't it }
      Edit;  { Invoke the Edit function the same as if double click had happened }
    end;

    function TCommonDialogEditor.GetVerb(Index: Integer): String;
    begin
      Result := 'Test Dialog';  { Menu item caption for context menu }
    end;

    function TCommonDialogEditor.GetVerbCount: Integer;
    begin
      Result := 1;
    end;

    procedure TCommonDialogEditor.Edit;
    begin
    {$IFDEF VER100}
      if Component is TCommonDialog then
        TMyCommonDialog(Component).Execute
    {$ELSE}
      if Component is TColorDialog then
        TColorDialog(Component).Execute
      else if Component is TFindDialog then
        TFindDialog(Component).Execute
      else if Component is TReplaceDialog then
        TReplaceDialog(Component).Execute
      else if Component is TFontDialog then
        TFontDialog(Component).Execute
      else if Component is TOpenDialog then
        TOpenDialog(Component).Execute
      else if Component is TSaveDialog then
        TSaveDialog(Component).Execute
      else if Component is TPrintDialog then
        TPrintDialog(Component).Execute
      else if Component is TPrinterSetupDialog then
        TPrinterSetupDialog(Component).Execute;
    {$ENDIF}
    end;

    procedure Register;
    begin
      RegisterComponentEditor(TCommonDialog, TCommonDialogEditor);
    end;

    end.

[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]