- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 

XML-fil istället för INI-fil Kategori: Filer
Inlagt: 2005-05-11
Läst: 1521
Inlagt av: Staffan Berg
Beskrivning
Detta exempel visar hur du istället för att använda en ini-fil som lagringsplats kan använda XML-formatet och TXMLDocument-klassen. Exemplet fungerar i Delphi 7.
Kod
unit uCiaXml; 
 
interface 
 
uses 
 Forms, SysUtils, Windows, XmlIntf, XMLDoc; 
 
type 
 TXMLConfig = class 
 private 
  FModified: Boolean; 
  FFileName: string ; 
  FXMLDoc: TXMLDocument; 
  FBackup: Boolean; 
  function GetVersion: string ; 
 public 
  constructor Create(const FileName: string ); overload; 
  constructor Create; overload; 
  destructor Destroy; override; 
  procedure Save; 
  function ReadString(const Section, Key, default: string ): string ; 
  procedure WriteString(const Section, Key, Value: string ); 
  function ReadInteger(const Section, Key: string ; default: Integer): Integer; 
  procedure WriteInteger(const Section, Key: string ; Value: Integer); 
  function ReadBoolean(const Section, Key: string ; default: Boolean): Boolean; 
  procedure WriteBoolean(const Section, Key: string ; Value: Boolean); 
  property Backup: Boolean read FBackup write FBackup; 
  property Version: string read GetVersion; 
 end; 
 
implementation 
 
{ TXMLConfig } 
 
constructor TXMLConfig.Create(const FileName: string ); 
begin 
 inherited Create; 
 FBackup     := True; 
 FFileName    := FileName; 
 FXMLDoc     := TXMLDocument.Create(Application); 
 FXMLDoc.Options := [doNodeAutoIndent]; 
 if FileExists(FFileName) then 
  FXMLDoc.LoadFromFile(FFileName) 
 else  
 begin 
  FXMLDoc.Active := True; 
  FXMLDoc.AddChild('Configuration'); 
 end; 
end; 
 
constructor TXMLConfig.Create; 
begin 
 Create(ChangeFileExt(Application.Exename, '_cfg.xml')); 
end; 
 
destructor TXMLConfig.Destroy; 
begin 
 Save; 
 FXMLDoc.Destroy; 
 inherited; 
end; 
 
function TXMLConfig.GetVersion: string ; 
begin 
 Result := '1.00'; 
end; 
 
function TXMLConfig.ReadBoolean(const Section, Key: string ; default: Boolean): Boolean; 
begin 
 Result := Boolean(ReadInteger(Section, Key, Integer(default))); 
end; 
 
function TXMLConfig.ReadInteger(const Section, Key: string ; default: Integer): Integer; 
begin 
 Result := StrToInt(ReadString(Section, Key, IntToStr(default))); 
end; 
 
function TXMLConfig.ReadString(const Section, Key, default: string ): string ; 
var 
 Node: IXMLNode; 
begin 
 Node := FXMLDoc.DocumentElement.ChildNodes.FindNode(Section); 
 if Assigned(Node) and Node.HasAttribute(Key) then 
  Result := Node.Attributes[Key] 
 else 
  Result := default; 
end; 
 
procedure TXMLConfig.Save; 
begin 
 if not FModified then 
  Exit; 
 if FBackup then 
 
  CopyFile(PChar(FFileName), PChar(FFileName + '.bak'), False); 
 FXMLDoc.SaveToFile(FFileName); 
 FModified := False; 
end; 
 
procedure TXMLConfig.WriteBoolean(const Section, Key: string ; Value: Boolean); 
begin 
 WriteInteger(Section, Key, Integer(Value)); 
end; 
 
procedure TXMLConfig.WriteInteger(const Section, Key: string ; Value: Integer); 
begin 
 WriteString(Section, Key, IntToStr(Value)); 
end; 
 
procedure TXMLConfig.WriteString(const Section, Key, Value: string ); 
var 
 Node: IXMLNode; 
begin 
 if ReadString(Section, Key, '') = Value then 
  Exit; 
 Node := FXMLDoc.DocumentElement.ChildNodes.FindNode(Section); 
 if not Assigned(Node) then 
  Node := FXMLDoc.DocumentElement.AddChild(Section); 
 Node.Attributes[Key] := Value; 
 FModified := True; 
end; 
 
end. 

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -