home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 September / Chip_2002-09_cd1.bin / zkuste / delphi / kolekce / d56 / XMLCOMP.ZIP / test / FMain.pas < prev    next >
Pascal/Delphi Source File  |  2002-06-17  |  6KB  |  219 lines

  1. unit FMain;
  2.  
  3. interface
  4.  
  5. {$I DnXml.inc}
  6.  
  7. uses
  8.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  9.   StdCtrls, OleCtrls, SHDocVw, ExtCtrls, DnXml, ShellApi, TypInfo,
  10.   ComCtrls, DnTestModel, DnPerson {$IFDEF DNXML_D6}, Variants {$ENDIF};
  11.  
  12. type
  13.   TForm1 = class(TForm)
  14.     Panel1: TPanel;
  15.     Button1: TButton;
  16.     Button2: TButton;
  17.     OpenDialog1: TOpenDialog;
  18.     Panel2: TPanel;
  19.     Label1: TLabel;
  20.     Image1: TImage;
  21.     cbReadOnlyProps: TCheckBox;
  22.     DnXmlReader1: TDnXmlReader;
  23.     DnXmlWriter1: TDnXmlWriter;
  24.     DnXmlDictionary1: TDnXmlDictionary;
  25.     ListView1: TListView;
  26.     Splitter1: TSplitter;
  27.     Button3: TButton;
  28.     Label2: TLabel;
  29.     Button4: TButton;
  30.     dlgSave: TSaveDialog;
  31.     Button5: TButton;
  32.     DnTestModel1: TDnTestModel;
  33.     Panel3: TPanel;
  34.     WebBrowser1: TWebBrowser;
  35.     Memo1: TMemo;
  36.     Splitter2: TSplitter;
  37.     Button6: TButton;
  38.     procedure Button1Click(Sender: TObject);
  39.     procedure Button2Click(Sender: TObject);
  40.     procedure cbReadOnlyPropsClick(Sender: TObject);
  41.     procedure Button3Click(Sender: TObject);
  42.     procedure Label2Click(Sender: TObject);
  43.     procedure Button4Click(Sender: TObject);
  44.     procedure Button5Click(Sender: TObject);
  45.     procedure FormCreate(Sender: TObject);
  46.     procedure Button6Click(Sender: TObject);
  47.   private
  48.     procedure UpdateDictionaryList;
  49.     procedure PrintModel(aModel: TObject; aStrings: TStrings; aIndent: string);
  50.   public
  51.     { Public declarations }
  52.   end;
  53.  
  54. var
  55.   Form1: TForm1;
  56.  
  57. implementation
  58.  
  59. uses DnCountry;
  60.  
  61. {$R *.DFM}
  62.  
  63. procedure TForm1.Button1Click(Sender: TObject);
  64. begin
  65.   if dlgSave.Execute then
  66.   begin
  67.     DnXmlWriter1.TopNodeName := 'DnTestModel1';
  68.     DnXmlWriter1.ToXmlFile(dlgSave.Filename, DnTestModel1);
  69.     UpdateDictionaryList;
  70.     WebBrowser1.Navigate(dlgSave.Filename);
  71.   end;
  72. end;
  73.  
  74. procedure TForm1.Button2Click(Sender: TObject);
  75. begin
  76.   if OpenDialog1.Execute then
  77.   begin
  78.     WebBrowser1.Navigate(OpenDialog1.Filename);
  79.     DnXmlReader1.FromXmlFileAssign(OpenDialog1.Filename, DnTestModel1);
  80.     UpdateDictionaryList;
  81.     Memo1.Clear;
  82.     PrintModel(DnTestModel1, Memo1.Lines, '');
  83.   end;
  84. end;
  85.  
  86. procedure TForm1.UpdateDictionaryList;
  87. var i: Integer;
  88.     item: TListItem;
  89. begin
  90.   ListView1.Items.Clear;
  91.   for i := 0 to DnXmlDictionary1.Count - 1 do
  92.   begin
  93.     item := ListView1.Items.Add;
  94.     item.Caption := DnXmlDictionary1.Ids[i];
  95.     item.SubItems.Add(DnXmlDictionary1.Objects[i].ClassName);
  96.   end;
  97. end;
  98.  
  99. procedure TForm1.cbReadOnlyPropsClick(Sender: TObject);
  100. begin
  101.   DnXmlWriter1.StoreReadOnlyProps := cbReadOnlyProps.Checked;
  102. end;
  103.  
  104. procedure TForm1.Button3Click(Sender: TObject);
  105. begin
  106.   DnXmlDictionary1.Clear;
  107.   UpdateDictionaryList;
  108. end;
  109.  
  110. procedure TForm1.Label2Click(Sender: TObject);
  111. begin
  112.   ShellExecute(0, 'open', 'http://sourceforge.net/projects/xmlcomp/', nil, nil, 0);
  113. end;
  114.  
  115. procedure TForm1.Button4Click(Sender: TObject);
  116. var prevpropkinds: TTypeKinds;
  117. begin
  118.   if dlgSave.Execute then
  119.   begin
  120.     // for forms do not store child objects
  121.     prevpropkinds := DnXmlWriter1.PropKinds;
  122.     DnXmlWriter1.PropKinds := tkProperties - [tkClass];
  123.     try
  124.       DnXmlWriter1.TopNodeName := 'Form1';
  125.       DnXmlWriter1.ToXmlFile(dlgSave.FileName, Self);
  126.       UpdateDictionaryList;
  127.       WebBrowser1.Navigate(dlgSave.FileName);
  128.     finally
  129.       DnXmlWriter1.PropKinds := prevpropkinds;
  130.     end;
  131.   end;
  132. end;
  133.  
  134. procedure TForm1.Button5Click(Sender: TObject);
  135. var oldval: Boolean;
  136. begin
  137.   if OpenDialog1.Execute then
  138.   begin
  139.     oldval := DnXmlReader1.ExceptOnMissingProps;
  140.     DnXmlReader1.ExceptOnMissingProps := False; // objects were not written
  141.     try
  142.       DnXmlReader1.FromXmlFileAssign(OpenDialog1.Filename, Self);
  143.       UpdateDictionaryList;
  144.       WebBrowser1.Navigate(OpenDialog1.FileName);
  145.     finally
  146.       DnXmlReader1.ExceptOnMissingProps := oldval;
  147.     end;
  148.   end;
  149. end;
  150.  
  151. procedure TForm1.PrintModel(aModel: TObject; aStrings: TStrings; aIndent: string);
  152. var props: PPropList;
  153.     propcount,i: Integer;
  154. begin
  155.   if (aModel <> nil) and (aModel.ClassInfo <> nil) then
  156.   begin
  157.     propcount := GetTypeData(aModel.ClassInfo).PropCount;
  158.     GetMem(props, propcount * SizeOf(PPropInfo));
  159.     try
  160.       GetPropInfos(aModel.ClassInfo, props);
  161.       for i := 0 to propcount - 1 do
  162.       begin
  163.         aStrings.Add(aIndent + props[i].Name + ' = ' + VarToStr(GetPropValue(aModel, props[i].Name)));
  164.         if props[i].PropType^.Kind = tkClass then
  165.         begin
  166.           PrintModel(TObject(GetOrdProp(aModel, props[i])), aStrings, aIndent + '  ');
  167.         end;
  168.       end;
  169.     finally
  170.       FreeMem(props);
  171.     end;
  172.   end;
  173.   // mimic list storage
  174.   if aModel is TList then
  175.   begin
  176.     with TList(aModel) do
  177.     begin
  178.       for i := 0 to Count - 1 do
  179.       begin
  180.         aStrings.Add(aIndent + '  Item' + IntToStr(i) + ' = ' + IntToStr(Integer(Items[i])));
  181.         PrintModel(Items[i], aStrings, aIndent + '    ');
  182.       end;
  183.     end;
  184.   end;
  185. end;
  186.  
  187. procedure TForm1.FormCreate(Sender: TObject);
  188. begin
  189.   Memo1.Clear;
  190.   PrintModel(DnTestModel1, Memo1.Lines, '');
  191. end;
  192.  
  193. procedure TForm1.Button6Click(Sender: TObject);
  194. var person: TPerson;
  195.     nederland: TCountry;
  196. begin
  197.   nederland := DnTestModel1.AddCountry('Nederland');
  198.   DnTestModel1.AddCountry('Belgie');
  199.   DnTestModel1.AddCountry('France');
  200.   DnTestModel1.AddCountry('Deutschland');
  201.   DnTestModel1.AddCountry('Espagne');
  202.  
  203.   person := TPerson.Create(DnTestModel1);
  204.   person.Firstname  := 'Dave';
  205.   person.Middlename := 'de';
  206.   person.Lastname   := 'Jong';
  207.   person.Address.Street  := 'Somestreet';
  208.   person.Address.Number  := '42';
  209.   person.Address.Zipcode := '1234 AB';
  210.   person.Address.City    := 'Eindhoven';
  211.   person.Address.Country := nederland;
  212.   DnTestModel1.Persons.Add(person);
  213.  
  214.   Memo1.Clear;
  215.   PrintModel(DnTestModel1, Memo1.Lines, '');
  216. end;
  217.  
  218. end.
  219.