I would use an "interface" type in this situation.

In the unit's "interface" section define the interface type and a function to create a new instance of the interface.

In the unit's implementation define all your classes including a class that provides the interface. The implementation of the function that creates a new instance of the interface should create and return a new instance of the class that provides the interface.

If you are using COM interfaces then you don't even need to explicitly destroy the interface as they are automatically deleted when all references go out of scope. if you use CORBA interfaces then your interface definition should include a method to free the interface.

On 07/03/2019 08:10, Dennis wrote:
unit frproxyserver;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, Grids,
  frBase;

type

  TMyStringGrid=class(TStringGrid) //how to I make this class visible only to this unit?
  public
  end;

  { TProxyServerFrame }

  TProxyServerFrame = class(TBaseFrame)
    Panel_Top: TPanel;
    StringGrid1: TMyStringGrid;
  private

  public

  end;

implementation

{$R *.lfm}

end.

=============
My reason is I don't want to pollute the name space but if I put the declaration of TMyStringGrid in the implementation section, it cannot be used by the field in the class declaration of TProxyServerFrame.

if there a compiler directive that I can put around
TMyStringGrid to make it only visible to the unit frproxyserver?

Dennis
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to