{****************************************************************** JEDI-VCL Demo Copyright (C) 2002 Project JEDI Original author: You may retrieve the latest version of this file at the JEDI-JVCL home page, located at http://jvcl.sourceforge.net The contents of this file are used with permission, subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/MPL-1_1Final.html Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. ******************************************************************} unit XMLSerializerMainFormU; { the Example shows saving/loading of a class into/from XML. Before saving, the class is initialized by the test data. coded by Xelby, 09.2001 } interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, JvgXMLSerializer, JvComponent; type TfglXMLSerializerDemo = class(TForm) bLoadXML: TButton; bSaveXML: TButton; JvgXMLSerializer: TJvgXMLSerializer; Memo1: TMemo; eTestFileName: TEdit; Label1: TLabel; bViewXML: TButton; procedure FormCreate(Sender: TObject); procedure bLoadXMLClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure bSaveXMLClick(Sender: TObject); procedure bViewXMLClick(Sender: TObject); procedure glXMLSerializerGetXMLHeader(Sender: TObject; var Value: String); private TestFileName: string; // File to be saved to XML public end; var fglXMLSerializerDemo: TfglXMLSerializerDemo; implementation uses testClasses, ShellApi; {$R *.dfm} var Catalogue: TCatalogue; // the class, which we will preserve and load procedure TfglXMLSerializerDemo.FormCreate(Sender: TObject); begin { we will use the local file test.xml} TestFileName := ExtractFilePath(ParamStr(0)) + 'Data\test.xml'; eTestFileName.Text := TestFileName; { TCatalogue - class which we will test} Catalogue := TCatalogue.Create(Self); end; procedure TfglXMLSerializerDemo.FormDestroy(Sender: TObject); begin Catalogue.Free; end; { Save object into XML } procedure TfglXMLSerializerDemo.bSaveXMLClick(Sender: TObject); var Fs: TFileStream; I: Integer; begin //We fill object with the any data Catalogue.Header := 'Catalog of descriptions of book news'; for I := 1 to 30 do with Catalogue.Documents.Add do begin DocIndex := I; Title := 'Title ' + IntToStr(I); Author := 'Author ' + IntToStr(I); PublicDate :=DateTimeToStr(Now); end; Catalogue.Footer := 'Created ' + DateToStr(date); Fs := TFileStream.Create(TestFileName, fmCreate); try JvgXMLSerializer.Serialize(Catalogue, Fs); finally Fs.Free; end; ShowMessage('Object has been saved to the file '#13#10 + TestFileName); end; { Initialization of object from XML } procedure TfglXMLSerializerDemo.bLoadXMLClick(Sender: TObject); var Fs: TFileStream; begin Catalogue.Documents.Clear; Fs := TFileStream.Create(TestFileName, fmOpenRead); try JvgXMLSerializer.DeSerialize(Catalogue, Fs); finally Fs.Free; end; ShowMessage('Object is loaded. Count: ' + IntToStr(Catalogue.Documents.Count)); end; { Open in browser } procedure TfglXMLSerializerDemo.bViewXMLClick(Sender: TObject); begin ShellExecute(0, 'open', PChar(TestFileName), nil, nil, SW_SHOW); end; { Standard title with the indication of coding for the Russian letters} procedure TfglXMLSerializerDemo.glXMLSerializerGetXMLHeader(Sender: TObject; var Value: String); begin Value := ''; end; end.