Hola waly2k1
La verdad es que utilizo Firebird 1.5. Y este es un poco del código del componente para que te hagas una idea:
Código Delphi
[-]
published
property Caption: string read FCaption write SetCaption;
property CharCase: TEditCharCase read FCharCase write SetCharCase default ecUpperCase;
property FormColor: TColor read FFormColor write FFormColor default clBtnFace;
property IBDatabase: TIBDatabase read FIBDatabase write SetIBDatabase;
property IBTransaction: TIBTransaction read FIBTransaction write SetIBTransaction;
property ProcedureName: string read FProcedureName write SetProcedureName;
end;
Como puedes ver ProcedureName es un string pero tengo definida la propiedad de la siguiente manera
Código Delphi
[-]
TStoredProcedureProperty = class(TStringProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure GetValues(Proc: TGetStrProc); override;
end;
procedure Register;
begin
RegisterComponents('TabComponente', [TFormSeleccion]);
RegisterPropertyEditor(TypeInfo(string), TFormSeleccion, 'ProcedureName', TStoredProcedureProperty);
end;
function TStoredProcedureProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paValueList, paSortList];
end;
procedure TStoredProcedureProperty.GetValues(Proc: TGetStrProc);
var
StoredProc: TIBStoredProc;
i: Integer;
NamesList: TStrings;
begin
StoredProc := TIBStoredProc.Create(nil);
try
StoredProc.Database := (GetComponent(0) as TFormSeleccion).IBDatabase;
StoredProc.Transaction := (GetComponent(0) as TFormSeleccion).IBTransaction;
NamesList := StoredProc.StoredProcedureNames;
for I := 0 to NamesList.Count - 1 do
Proc(NamesList[i]);
finally
StoredProc.Free;
end;
end;
De esta forma en mi componente aparece una lista desplegable con los procedimientos almacenados.
Por cierto, en tu ejemplo no he visto nada de DBGridColumns dinámicas. Porque me gustaría que estuviesen todas las propiedades de una TColumn.