La verdad es que no tengo ningún problema en mostraros todo el código, es más a continuación os muestro el que me habeis solicitado. Por otra parte, con lo que me comentas de no poner del Fichero DBView en el modulo de Diseño, resulta, que si no, no me deja continuar.....
Pero bueno, vamos a mostrar algo de código
en el fichero
DBView.pas tengo esto:
Código:
{ TFieldItem }
TFieldItem = class(TCollectionItem)
private
FName: String;
FColTitle: String;
FDefaultSearch: Boolean;
FSize: Integer;
protected
function GetDisplayName: String; Override;
public
procedure Assign(Source: TPersistent);
procedure SetDefaultSearch (Value: Boolean);Virtual;
procedure Edit;
published
property Name: String read FName write FName;
property ColTitle: String read FColTitle write FColTitle;
property DefaultSearch:Boolean read FDefaultSearch write SetDefaultSearch;
property Size: Integer read FSize write FSize;
end;
{ TFieldList }
TFieldList = class(TCollection)
private
FOwner: TPersistent;
protected
public
function GetOwner: TPersistent; Override;
procedure Edit;
constructor Create(AOwner: TPersistent);
destructor Destroy; override;
procedure Add(AName: String; ADefaultSearch:Boolean; AColTitle: String;
ASize: Integer);
procedure Clear;
function GetItem(Index: Integer): TFieldItem;
procedure SetItem(Index: Integer; Value: TFieldItem);
property Items[Index: Integer]: TFieldItem read GetItem write SetItem; default;
published
end;
TDBViewer = class(TComponent)
private
FDataSet: TDataSet;
FReturnParams: Integer;
FReturnValues: array of Variant;
FFieldDefs: TFieldList;
FFormTitle : String;
FFormWidth: Integer;
FFormHeight:Integer;
FEditColor: TColor;
FGridColor: TColor;
FDataLink: TFieldDataLink;
function GetDataField: string;
function GetDataSource: TDataSource;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
public
procedure Assign(Source: TPersistent);
procedure SetDataSet(Value: TDataSet); virtual;
procedure SetReturnParams(Value: Integer); virtual;
function GetDataSet: TDataSet; virtual;
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure Execute;
function ReturnParamValues (Param:Integer):Variant;
procedure Edit;
published
property FieldDefs: TFieldList read FFieldDefs write FFieldDefs;
property DataSet: TDataSet read GetDataSet write SetDataSet;
property ReturnParams: Integer read FReturnParams Write SetReturnParams default 1;
property FormTitle: String read FFormTitle Write FFormTitle;
property FormHeight: Integer read FFormHeight Write FFormHeight;
property FormWidth: Integer read FFormWidth Write FFormWidth;
property EditColor: TColor read FEditColor Write FEditColor;
property GridColor: TColor read FGridColor write FGridColor;
end;
TFieldDefsProperty = class (TComponentEditor)
private
procedure executeVerb (index:Integer);Override;
function GetVerb (Index:Integer):String;override;
function GetVerbCount:Integer; Override;
end;
esto está en el
DBViewReg.pas
Código:
unit DBViewReg;
interface
procedure Register;
implementation
uses
Classes,
{$IFDEF VER130}DsgnIntf{$ELSE}DesignIntf, DesignEditors{$ENDIF},
FiltEdit, DBView;
procedure Register;
begin
RegisterComponents('DBViewer', [TDBViewer]);
RegisterComponentEditor (TDBViewer,TFieldDefsProperty)
end;
end.
y por último, esto es lo que tengo en el
frmView.pas
Código:
type
TfrmVisor = class(TForm)
dsDataSource: TDataSource;
dbGrid: TDBGrid;
pTop: TPanel;
gbBuscar: TGroupBox;
cbFields: TComboBox;
eSearch: TEdit;
procedure FillcbFields;
procedure Inicializar;
procedure dbGridColEnter(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure dbGridDblClick(Sender: TObject);
procedure eSearchChange(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
public
FDataSet: TDataSet;
FReturnParams: Integer;
FReturnValues: array of Variant;
FColTitles: TStringList;
FDefaultSearch: TFieldItem;
FFieldDefs: TFieldList;
end;
var
frmVisor: TfrmVisor;