{-----------------------------------------------------------------------------}
{ 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.