Nja, wir haben eh fast alle Komponenten nochmal bgeleitet, auch Edits (TEdit, bzw. TdxEdit), oder die DevExpressGrids.
Einmal um eigenen Funktionen hinzuzufügen, bzw. um so Komponenten-Bugfixes/Erweiterungen auf allen gefühlt 2 Millionen Forms verteilen zu können.
Delphi-Quellcode:
type
TMyQuery =
class(TDataSource)
private
FQuery: TPgQuery;
function GetActive: Boolean;
procedure SetActive(Value: Boolean);
function GetSQL: TStrings;
procedure AssignSQL(Value: TStrings);
public
constructor Create(AOwner: TComponent);
override;
published
property Active: Boolean
read GetActive
write SetActive
default False;
property SQL: TStrings
read GetSQL
write AssignSQL;
end;
procedure Register;
begin
RegisterComponents(IrgendeinName, [TMyQuery]);
end;
constructor TMyQuery.Create(AOwner: TComponent);
begin
inherited;
FQuery := TPgQuery.Create(Self);
FQuery.
Name := '
PgQuery';
// bei uns über .SetName auf Self.Name+'_Query' gesetzt ... noch schöner für's Debugging
end;
function TMyQuery.GetActive: Boolean;
begin
Result := FQuery.Active;
end;
procedure TMyQuery.SetActive(Value: Boolean);
begin
FQuery.Active := Value;
end;
function TMyQuery.GetSQL: TStrings;
begin
Result := FQuery.SQL;
end;
procedure TMyQuery.AssignSQL(Value: TStrings);
begin
// nicht FQuery.SQL := Value; (wird wollen ja nur den Inhalt ändern)
FQuery.SQL.Assign(Value);
end;
Und dann eben noch um eine Collection erweitert, wo TMyQuery als Subkomponenten für MasterDetail rein kommen, sowie StandardSQL (Komponente hat nur den SQLNamen und holt sich den
SQL.Text aus einer Tabelle), oder die Field.DisplayText und Formatierungen kommen im AfterOpen aus einer FieldAlias-Tabelle uvm.
Einige der Haupttabellen sind direkt als eigene TMyQuery-Nachfahren erstellt, wo
SQL und SubQueries vordefiniert sind.