home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 March / Chip_1999-03_cd.bin / zkuste / delphi / D234C13 / RALIB.ZIP / RALib / Lib / RADBReg.pas < prev    next >
Pascal/Delphi Source File  |  1998-09-08  |  5KB  |  143 lines

  1. {***********************************************************
  2.                 R&A Library
  3.        Copyright (C) 1996-98 R&A
  4.  
  5.        description : Register db-aware components
  6.  
  7.        programer   : black
  8.        e-mail      : blacknbs@chat.ru
  9.        www         : www.chat.ru\~blacknbs\ralib
  10. ************************************************************}
  11.  
  12. {$INCLUDE RA.INC}
  13.  
  14. unit RADBReg;
  15.  
  16. interface
  17.  
  18. uses Classes, DsgnIntf;
  19.  
  20. type
  21.  
  22.  {**************** from Delphi2\Lib\DBReg.pas }
  23.   TDBStringProperty = class(TStringProperty)
  24.   public
  25.     function GetAttributes: TPropertyAttributes; override;
  26.     procedure GetValueList(List: TStrings); virtual; abstract;
  27.     procedure GetValues(Proc: TGetStrProc); override;
  28.   end;
  29.  
  30.   TDataFieldProperty = class(TDBStringProperty)
  31.   public
  32.     function GetDataSourcePropName: string; virtual;
  33.     procedure GetValueList(List: TStrings); override;
  34.   end;
  35.  
  36.   TListFieldProperty = class(TDataFieldProperty)
  37.   public
  38.     function GetDataSourcePropName: string; override;
  39.   end;
  40.  
  41.   TDatabaseNameProperty = class(TDBStringProperty)
  42.   public
  43.     procedure GetValueList(List: TStrings); override;
  44.   end;
  45.  
  46. {################ from Delphi2\Lib\DBReg.pas }
  47.  
  48.  
  49. procedure Register;
  50.  
  51. implementation
  52.  
  53. uses TypInfo, DB, DBTables,
  54.   RADBUtil, RADBTreeView, RADBLookupTreeView, RADBMove, RADBCt;
  55.  
  56. {$R RADB.dcr}
  57.  
  58.  
  59. procedure Register;
  60. begin
  61.  {RADBCt unit}
  62.   RegisterComponents('R&&A DB', [TRASQLScript, TRADBRadioGroupS]);
  63.  {RADBTreeView unit}
  64.   RegisterComponents('R&&A DB', [TRADBTreeView]);
  65.   RegisterPropertyEditor(TypeInfo(string), TRADBTreeView, 'ItemField', TDataFieldProperty);
  66.   RegisterPropertyEditor(TypeInfo(string), TRADBTreeView, 'MasterField', TDataFieldProperty);
  67.   RegisterPropertyEditor(TypeInfo(string), TRADBTreeView, 'DetailField', TDataFieldProperty);
  68.   RegisterPropertyEditor(TypeInfo(string), TRADBTreeView, 'IconField', TDataFieldProperty);
  69.  
  70.  {RADBLookupTreeView unit}
  71.   RegisterComponents('R&&A DB', [TRADBLookupTreeView, TRADBLookupTreeViewCombo]);
  72.   RegisterPropertyEditor(TypeInfo(string), TRADBLookupTreeViewCombo, 'KeyField', TListFieldProperty);
  73.   RegisterPropertyEditor(TypeInfo(string), TRADBLookupTreeViewCombo, 'ListField', TListFieldProperty);
  74.   RegisterPropertyEditor(TypeInfo(string), TRADBLookupTreeViewCombo, 'MasterField', TListFieldProperty);
  75.   RegisterPropertyEditor(TypeInfo(string), TRADBLookupTreeViewCombo, 'DetailField', TListFieldProperty);
  76.   RegisterPropertyEditor(TypeInfo(string), TRADBLookupTreeViewCombo, 'IconField', TListFieldProperty);
  77.   RegisterPropertyEditor(TypeInfo(string), TRADBLookupTreeView, 'KeyField', TListFieldProperty);
  78.   RegisterPropertyEditor(TypeInfo(string), TRADBLookupTreeView, 'ListField', TListFieldProperty);
  79.   RegisterPropertyEditor(TypeInfo(string), TRADBLookupTreeView, 'MasterField', TListFieldProperty);
  80.   RegisterPropertyEditor(TypeInfo(string), TRADBLookupTreeView, 'DetailField', TListFieldProperty);
  81.   RegisterPropertyEditor(TypeInfo(string), TRADBLookupTreeView, 'IconField', TListFieldProperty);
  82.  
  83.  { RADBMove unit }
  84.   RegisterComponents('R&&A DB', [TRADBMove]);
  85.   RegisterPropertyEditor(TypeInfo(string), TRADBMove, 'Source', TDatabaseNameProperty);
  86.   RegisterPropertyEditor(TypeInfo(string), TRADBMove, 'Destination', TDatabaseNameProperty);
  87. end;
  88.  
  89. {**************** from Delphi2\Lib\DBReg.pas }
  90. function TListFieldProperty.GetDataSourcePropName: string;
  91. begin
  92.   Result := 'ListSource';
  93. end;
  94.  
  95. function TDBStringProperty.GetAttributes: TPropertyAttributes;
  96. begin
  97.   Result := [paValueList, paSortList, paMultiSelect];
  98. end;
  99.  
  100. procedure TDBStringProperty.GetValues(Proc: TGetStrProc);
  101. var
  102.   I: Integer;
  103.   Values: TStringList;
  104. begin
  105.   Values := TStringList.Create;
  106.   try
  107.     GetValueList(Values);
  108.     for I := 0 to Values.Count - 1 do Proc(Values[I]);
  109.   finally
  110.     Values.Free;
  111.   end;
  112. end;
  113.  
  114.  
  115. function TDataFieldProperty.GetDataSourcePropName: string;
  116. begin
  117.   Result := 'DataSource';
  118. end;
  119.  
  120. procedure TDataFieldProperty.GetValueList(List: TStrings);
  121. var
  122.   Instance: TComponent;
  123.   PropInfo: PPropInfo;
  124.   DataSource: TDataSource;
  125. begin
  126.   Instance := TComponent(GetComponent(0));
  127.   PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, GetDataSourcePropName);
  128.   if (PropInfo <> nil) and (PropInfo^.PropType^.Kind = tkClass) then
  129.   begin
  130.     DataSource := TObject(GetOrdProp(Instance, PropInfo)) as TDataSource;
  131.     if (DataSource <> nil) and (DataSource.DataSet <> nil) then
  132.       DataSource.DataSet.GetFieldNames(List);
  133.   end;
  134. end;
  135.  
  136. procedure TDatabaseNameProperty.GetValueList(List: TStrings);
  137. begin
  138.   Session.GetDatabaseNames(List);
  139. end;
  140. {################ from Delphi2\Lib\DBReg.pas }
  141.  
  142. end.
  143.