home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / Runimage / Delphi50 / Source / Property Editors / CDSEDIT.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-08-11  |  4.5 KB  |  170 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Visual Component Library         }
  5. {                                                       }
  6. {       Copyright (c) 1995, 1999 Inprise Corporation    }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit CDSEdit;
  11.  
  12. interface
  13.  
  14. uses SysUtils, Windows, Messages, Classes, Graphics, Controls,
  15.   Forms, Dialogs, StdCtrls, Buttons, DB, DBClient, DsgnIntf;
  16.  
  17. type
  18.   TClientDataForm = class(TForm)
  19.     GroupBox1: TGroupBox;
  20.     DataSetList: TListBox;
  21.     OkBtn: TButton;
  22.     CancelBtn: TButton;
  23.     HelpBtn: TButton;
  24.     procedure FormCreate(Sender: TObject);
  25.     procedure OkBtnClick(Sender: TObject);
  26.     procedure HelpBtnClick(Sender: TObject);
  27.     procedure DataSetListDblClick(Sender: TObject);
  28.     procedure DataSetListKeyPress(Sender: TObject; var Key: Char);
  29.   private
  30.     FDataSet: TClientDataSet;
  31.     FDesigner: IFormDesigner;
  32.     procedure CheckComponent(const Value: string);
  33.     function Edit: Boolean;
  34.   end;
  35.  
  36. function EditClientDataSet(ADataSet: TClientDataSet; ADesigner: IFormDesigner): Boolean;
  37. function LoadFromFile(ADataSet: TClientDataSet): Boolean;
  38. procedure SaveToFile(ADataSet: TClientDataSet);
  39.  
  40. implementation
  41.  
  42. uses DsnDBCst, TypInfo, LibHelp, DBConsts, Consts, Provider;
  43.  
  44. {$R *.DFM}
  45.  
  46. function EditClientDataSet(ADataSet: TClientDataSet; ADesigner: IFormDesigner): Boolean;
  47. begin
  48.   with TClientDataForm.Create(Application) do
  49.   try
  50.     Caption := Format(SClientDataSetEditor, [ADataSet.Owner.Name, DotSep, ADataSet.Name]);
  51.     FDataSet := ADataSet;
  52.     FDesigner := ADesigner;
  53.     Result := Edit;
  54.   finally
  55.     Free;
  56.   end;
  57. end;
  58.  
  59. function LoadFromFile(ADataSet: TClientDataSet): Boolean;
  60. begin
  61.   with TOpenDialog.Create(nil) do
  62.   try
  63.     Title := sOpenFileTitle;
  64.     DefaultExt := 'cds';
  65.     Filter := SClientDataFilter;
  66.     Result := Execute;
  67.     if Result then ADataSet.LoadFromFile(FileName);
  68.   finally
  69.     Free;
  70.   end;
  71. end;
  72.  
  73. procedure SaveToFile(ADataSet: TClientDataSet);
  74. begin
  75.   with TSaveDialog.Create(nil) do
  76.   try
  77.     Options := [ofOverwritePrompt];
  78.     DefaultExt := 'cds';
  79.     Filter := SClientDataFilter;
  80.     if Execute then ADataSet.SaveToFile(FileName);
  81.   finally
  82.     Free;
  83.   end;
  84. end;
  85.  
  86. procedure TClientDataForm.CheckComponent(const Value: string);
  87. var
  88.   DataSet: TDataSet;
  89. begin
  90.   DataSet := TDataSet(FDesigner.GetComponent(Value));
  91.   if (DataSet.Owner <> FDataSet.Owner) then
  92.     DataSetList.Items.Add(Concat(DataSet.Owner.Name, '.', DataSet.Name))
  93.   else
  94.     if AnsiCompareText(DataSet.Name, FDataSet.Name) <> 0 then
  95.       DataSetList.Items.Add(DataSet.Name);
  96. end;
  97.  
  98. function TClientDataForm.Edit: Boolean;
  99. begin
  100.   DataSetList.Clear;
  101.   FDesigner.GetComponentNames(GetTypeData(TDataSet.ClassInfo), CheckComponent);
  102.   if DataSetList.Items.Count > 0 then
  103.   begin
  104.     DataSetList.Enabled := True;
  105.     DataSetList.ItemIndex := 0;
  106.     OkBtn.Enabled := True;
  107.     ActiveControl := DataSetList;
  108.   end else
  109.     ActiveControl := CancelBtn;
  110.   Result := ShowModal = mrOK;
  111. end;
  112.  
  113. procedure TClientDataForm.OkBtnClick(Sender: TObject);
  114. var
  115.   DataSet: TDataSet;
  116.   DSProv: TDataSetProvider;
  117. begin
  118.   try
  119.     if DataSetList.ItemIndex >= 0 then
  120.     begin
  121.       Screen.Cursor := crHourGlass;
  122.       try
  123.         with DataSetList do
  124.           DataSet := FDesigner.GetComponent(Items[ItemIndex]) as TDataSet;
  125.         if (DataSet is TClientDataSet) then
  126.           FDataSet.Data := TClientDataSet(DataSet).Data
  127.         else
  128.         begin
  129.           DSProv := TDataSetProvider.Create(nil);
  130.           try
  131.             DSProv.DataSet := DataSet;
  132.             FDataSet.Data := DSProv.Data
  133.           finally
  134.             DSProv.Free;
  135.           end;
  136.         end;
  137.       finally
  138.         Screen.Cursor := crDefault;
  139.       end;
  140.     end
  141.     else
  142.       FDataSet.Data := varNull;
  143.   except
  144.     ModalResult := mrNone;
  145.     raise;
  146.   end;
  147. end;
  148.  
  149. procedure TClientDataForm.FormCreate(Sender: TObject);
  150. begin
  151.   HelpContext := hcDAssignClientData;
  152. end;
  153.  
  154. procedure TClientDataForm.HelpBtnClick(Sender: TObject);
  155. begin
  156.   Application.HelpContext(HelpContext);
  157. end;
  158.  
  159. procedure TClientDataForm.DataSetListDblClick(Sender: TObject);
  160. begin
  161.   if OkBtn.Enabled then OkBtn.Click;
  162. end;
  163.  
  164. procedure TClientDataForm.DataSetListKeyPress(Sender: TObject; var Key: Char);
  165. begin
  166.   if (Key = #13) and OkBtn.Enabled then OkBtn.Click;
  167. end;
  168.  
  169. end.
  170.