麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

Delphi中初始化.Ini文件的讀寫

2019-11-18 18:56:28
字體:
來源:轉載
供稿:網友

Windows中的應用程序極大多數擁有自己的初始化文件,如PowerBuilder、Office及Cstar等。因此初始化文件的讀寫是每個高級程序員必須掌握的技術。雖然初始化文件的讀寫也可用Object Pascal中的文本文件一樣讀寫,但因初始化文件不同于一般的文本文件,它有自己固定的格式(見下面的初始化文件是ucdos中提供的rdfnt.ini文件),如果用文本文件的方式讀寫,不僅格式轉換十分繁瑣,且很容易出現錯誤,為了方便程序員讀寫初始化文件中的數據,Delphi中向用戶提供了一個TIniFile類,通過TiniFile類就可十分方便地讀寫初始化文件。

Ucdosrdfnt.ini文件的內容為:

[True Type fonts directory]

Dir=C:WINDOWSSYSTEM

 

[True Type fonts list]

ARIAL.TTF=64

ARIALBD.TTF=65

ARIALI.TTF=66

ARIALBI.TTF=67

TIMES.TTF=68

TIMESBD.TTF=69

TIMESI.TTF=70

TIMESBI.TTF=71

COUR.TTF=72

COURBD.TTF=73

COURI.TTF=74

COURBI.TTF=75

 

[Use All True Type fonts]

All=0

 

TiniFile類不是一個Delphi的部件,因此不能在DelphiVCL模板中找到,它在Delphi 系統中的inifiles單元中定義,因此要使用TiniFile類,必須在使用該類的單元文件中用Uses  inifiles指令明確地說明。

TiniFile類中定義了許多成員函數,這里介紹幾個使用頻率較高的成員函數:

    Create()

    函數定義為:  constructor Create(const FileName: string);

該函數建立TiniFile類的對象。參數FileName是要讀寫的初始化文件名。

若讀寫的文件在Windows的目錄里(如system.ini文件),則可以直接寫文件名而不必指定路徑,否則就必須指定路徑(如d:ucdos dfnt.ini)。

如按以下規則在規定的目錄中存在該文件,則打開該初始化文件;否則在規定的目錄里創建該初始化文件。

    ReadSections()

    過程定義為:  PRocedure ReadSections(Strings: TStrings);

該過程將從所建立的TiniFile類的對象(即與之關聯的初始化文件)中讀取所有的節點名(即用[]括號括起的那部分,如rdfnt.ini文件中的[True Type fonts list])存入字符串列表中。參數Strings即為字符串列表的變量名。

    ReadSectionValues()

    過程定義為:  procedure ReadSectionValues(const Section: string; Strings: TStrings);

    該過程將參數Section的值所對應的節點(如rdfnt.ini文件中的[True Type fonts list])中的各個關鍵字(如ARIALBI.TTF)及其所含的值(如ARIALBI.TTF關鍵字值為67)讀入參數Strings指明的字符串列表中。

    ReadSection()

過程定義為:  procedure ReadSection(const Section: string; Strings: TStrings);

該過程將參數Section的值所對應的節點中的各個關鍵字讀入參數Strings指明的字符串列表中。與ReadSectionValues()不同的是它沒有讀取各個關鍵字的對應值。

    ReadString()

    函數定義為:  function ReadString(const Section, Ident, Default: string): string;

該函數返回以參數Section的值為節點名、參數Ident的值為關鍵字名所對應的關鍵字值(如[True Type fonts list]節中ARIALBI.TTF關鍵字的值為67)。當指定的節點或節內的關鍵字不存在時,則函數返回參數Default的缺省值。返回的值是一個字符串型數據。

當指定節點中關鍵字值的數據類型不是字符串時,則可用ReadInteger()成員函數讀取一個整型值,用ReadBool()成員函數讀取一個布爾值。

    WriteString()

過程定義為:  procedure WriteString(const Section, Ident, Value: string);

該過程將參數Section的值為節點名、參數Ident的值為關鍵字名的關鍵字值設置為參數Value的值。該過程設置的是字符串型數據。

當指定節點和關鍵字均存在時,則用Value的值替代原值;如指定節點不存在,則在關聯的初始化文件中自動增加一個節點,該節點的值為參數Section的值,并在該節點下自動增加一個關鍵字,關鍵字名為參數Ident的值,該關鍵字對應的值為參數Value的值;若節點存在,但關鍵字不存在,則在該節點下自動增加一個關鍵字,關鍵字名為參數Ident的值,該關鍵字對應的值為參數Value的值。

若要設置整型值,可調用WriteInteger()成員函數;用WriteBool()成員函數設置布爾值。

知道了以上函數的作用,要建立或讀寫一個初始化文件就不難了。下面以一個實際例子說明初始化文件的讀取方法,步驟如下:


  在需要讀寫初始化文件的窗體(Form)上放置名為SectionComboBoxIdentComboBox的兩個組合式列表框,其中SectionComboBox存放節點名,IdentComboBox存放所選擇節點的關鍵字名。一個名為IdentValueEdit的輸入框,存放對應關鍵字的值。名為CmdChang的修改命令鈕可以用來修改關鍵字的值,修改后用名為CmdSave的存儲命令鈕將修改后的關鍵字的值存入關聯的初始化文件。窗體對應的單元名設為IniUnit,窗體名設為IniForm,窗體布局如下圖一所示:

 


  IniUnit單元的interface部分用uses inifiles;說明要引用的TiniFile類所定義的單元名。并在變量說明部分定義TiniFile類的對象,如

var  IniFile:  TiniFile;

  建立窗體的OnCreate事件過程。使用TIniFile類的Create成員函數創建TIniFile對象,用該對象讀寫d:ucdos目錄中的rdfnt.ini初始化文件,并將該初始化文件中的所有節點通過ReadSections() 成員函數讀入SectionComboBox組合式列表框中,用ReadSection()成員函數將第一個節點中的所有關鍵字讀入IdentComboBox 組合式列表框,用ReadString()成員函數將第一個關鍵字的值送入IdentValueEdit輸入框。

  建立SectionComboBox組合式列表框的OnChange事件過程。當該選擇列表框中的不同項目(即不同的節點名)時,用ReadSection()成員函數將選節點中的所有關鍵字讀入IdentComboBox 組合式列表框,并用ReadString()成員函數將第一個關鍵字的值送入IdentValueEdit輸入框。

  建立IdentComboBox組合式列表框的OnChange事件過程。當該選擇列表框中的不同項目(即不同的關鍵字名)時,用ReadString()成員函數將該關鍵字的值送入IdentValueEdit輸入框。

  建立命令鈕CmdChang的OnClick事件過程。使IdentValueEdit輸入框中的內容可以修改(不按該命令鈕,IdentValueEdit輸入框是不能修改的),并設置命令鈕CmdSave有效,可以將修改后的關鍵字值存入關聯的初始化文件中。

  建立命令鈕CmdSaveOnClick事件過程。如果關鍵字值已改變,則調用WriteString()成員函數將修改后的關鍵字的值存盤。

  建立窗體的OnDestroy事件過程。當窗體失效時,將建立的TIniFile對象釋放,以釋放該對象所戰用的系統資源。

至此,運行該工程,初始化文件的讀寫已能順利進行。當然還可以使用EraseSection()成員函數刪除指定的節,也可用DeleteKey()成員函數刪除指定的關鍵字,因篇幅有限,這里就不詳細介紹了,有興趣的可參考Delphi的使用幫助。

下面是該單元的源程序代碼:

unit IniUnit;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, inifiles;

 

type

  TIniForm = class(TForm)

    SectionComboBox: TComboBox;

    Label1: TLabel;

    CmdSave: TButton;

    CmdChang: TButton;

    IdentComboBox: TComboBox;

    IdentValueEdit: TEdit;

    Label2: TLabel;

    Label3: TLabel;

    procedure FormCreate(Sender: TObject);

    procedure SectionComboBoxChange(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    procedure CmdChangClick(Sender: TObject);

    procedure CmdSaveClick(Sender: TObject);

    procedure IdentComboBoxChange(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  IniForm: TIniForm;

{ Delphi中通過TIniFile類讀寫Windows的初始化文件 }

  IniFile:      TIniFile;

 

implementation

 

{$R *.DFM}

 

procedure TIniForm.FormCreate(Sender: TObject);

begin

{ 使用TIniFile類的Create成員函數建立TIniFile

象,該對象用來讀寫d:ucdos目錄中的rdfnt.ini文件,

如果讀寫的文件在Windows的目錄里(如system.ini),

則可以直接寫文件名而不必指定路徑 }

  IniFile:=TIniFile.Create('d:ucdos dfnt.ini');

{ TIniFile對象關聯的初始化文件system.ini中的所

有節(即用[]括號括起的那部分)的節名送入下拉式組

合列表框SectionComboBox }

  SectionComboBox.Clear;

  IniFile.ReadSections(SectionComboBox.Items);

{ 選擇system.ini文件的第一個節名 }

  SectionComboBox.ItemIndex:=0;

  SectionComboBoxChange(Sender);

  CmdSave.Enabled:=False;

end;

 

{ 將組合列表框IniComboBox中所選擇節中對應的各個

變量及對應的值送入多行文本編輯器IniMemo }

procedure TIniForm.SectionComboBoxChange(Sender: TObject);

begin

  IdentComboBox.Clear;

  IniFile.ReadSection(SectionComboBox.Text,

                  IdentComboBox.Items);

  IdentComboBox.ItemIndex:=0;

  IdentComboBoxChange(Sender);

end;

 

procedure TIniForm.IdentComboBoxChange(Sender: TObject);

begin

  IdentValueEdit.Enabled:=False;

  { 將選擇的關鍵字值讀入 }

  IdentValueEdit.Text:=

      IniFile.ReadString(SectionComboBox.Text,

      IdentComboBox.Text,');

end;

 

procedure TIniForm.CmdChangClick(Sender: TObject);

begin

  CmdSave.Enabled:=True;

  IdentValueEdit.Enabled:=True;

  IdentValueEdit.SetFocus;

end;

 

procedure TIniForm.CmdSaveClick(Sender: TObject);

begin

  if IdentValueEdit.Modified then begin

    IniFile.WriteString(SectionComboBox.Text,

                        IdentComboBox.Text,

                        IdentValueEdit.Text);

  end;

  IdentValueEdit.Enabled:=False;

  CmdSave.Enabled:=False;

end;

 

procedure TIniForm.FormDestroy(Sender: TObject);

begin

  IniFile.Free;  { 釋放創建的對象 }

end;

 

end.

以上方法在Windows 95下用Delphi 3.0調試通過。

上一篇:DELPHI的原子世界

下一篇:Delphi開發者快速解決問題的兩大網絡利器

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 欧美成人一区二区三区 | 亚洲成人涩涩 | 精品久久久久久久久久久久包黑料 | 久草视频在线资源 | lutube成人福利在线观看 | 久久久久久久久久久久免费 | 久久超 | 看免费av | 毛片视频在线免费观看 | 国产呻吟| 毛片大全| 成人精品久久 | 久久久久久久久久久久久九 | 日韩电影av在线 | 久久伊 | 久久国产亚洲视频 | 国产一级毛片网站 | 国产亚洲精品综合一区91 | 欧美a级大胆视频 | 亚洲第一男人天堂 | 亚洲精品无码不卡在线播放he | 国产亚洲精品久久午夜玫瑰园 | 久久久三级免费电影 | 国产美女视频一区二区三区 | 国产精品久久久久永久免费 | 黄色网址在线视频 | 久久99网| 亚洲国产精品99 | 日韩视频―中文字幕 | 国产超碰人人做人人爱 | 欧美激情性色生活片在线观看 | 素人视频在线观看免费 | 亚洲第一成人在线观看 | 精品国产一区二区三区四区在线 | 夏目友人帐第七季第一集 | 免费毛片a线观看 | 精品国产一区二区三区久久久 | 久久精品黄 | 国产亚洲精品综合一区91 | 狠狠99| 久久96国产精品久久秘臀 |