精品国产亚洲一区二区三区,男女作爱在线观看免费网站,欧美的又大又长做禁片A片,97国产精品人妻无码久久久

  • 相關(guān)軟件
    >Delphi中初始化.Ini文件的讀寫 創(chuàng)建者:webmaster 更新時間:2005-07-02 01:34

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

    Ucdos中rdfnt.ini文件的內(nèi)容為:

    [True Type fonts directory]

    Dir=C:\WINDOWS\SYSTEM

     

    [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的部件,因此不能在Delphi的VCL模板中找到,它在Delphi 系統(tǒng)中的inifiles單元中定義,因此要使用TiniFile類,必須在使用該類的單元文件中用Uses  inifiles指令明確地說明。

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

      ⑴  Create()

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

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

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

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

      ⑵  ReadSections()

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

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

      ⑶  ReadSectionValues()

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

        該過程將參數(shù)Section的值所對應(yīng)的節(jié)點(如rdfnt.ini文件中的[True Type fonts list])中的各個關(guān)鍵字(如ARIALBI.TTF)及其所含的值(如ARIALBI.TTF關(guān)鍵字值為67)讀入?yún)?shù)Strings指明的字符串列表中。

      ⑷  ReadSection()

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

    該過程將參數(shù)Section的值所對應(yīng)的節(jié)點中的各個關(guān)鍵字讀入?yún)?shù)Strings指明的字符串列表中。與ReadSectionValues()不同的是它沒有讀取各個關(guān)鍵字的對應(yīng)值。

      ⑸  ReadString()

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

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

    當(dāng)指定節(jié)點中關(guān)鍵字值的數(shù)據(jù)類型不是字符串時,則可用ReadInteger()成員函數(shù)讀取一個整型值,用ReadBool()成員函數(shù)讀取一個布爾值。

      ⑹  WriteString()

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

    該過程將參數(shù)Section的值為節(jié)點名、參數(shù)Ident的值為關(guān)鍵字名的關(guān)鍵字值設(shè)置為參數(shù)Value的值。該過程設(shè)置的是字符串型數(shù)據(jù)。

    當(dāng)指定節(jié)點和關(guān)鍵字均存在時,則用Value的值替代原值;如指定節(jié)點不存在,則在關(guān)聯(lián)的初始化文件中自動增加一個節(jié)點,該節(jié)點的值為參數(shù)Section的值,并在該節(jié)點下自動增加一個關(guān)鍵字,關(guān)鍵字名為參數(shù)Ident的值,該關(guān)鍵字對應(yīng)的值為參數(shù)Value的值;若節(jié)點存在,但關(guān)鍵字不存在,則在該節(jié)點下自動增加一個關(guān)鍵字,關(guān)鍵字名為參數(shù)Ident的值,該關(guān)鍵字對應(yīng)的值為參數(shù)Value的值。

    若要設(shè)置整型值,可調(diào)用WriteInteger()成員函數(shù);用WriteBool()成員函數(shù)設(shè)置布爾值。

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









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


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

    var  IniFile:  TiniFile;

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

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

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

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

    ⒎  建立命令鈕CmdSave的OnClick事件過程。如果關(guān)鍵字值已改變,則調(diào)用WriteString()成員函數(shù)將修改后的關(guān)鍵字的值存盤。

    ⒏  建立窗體的OnDestroy事件過程。當(dāng)窗體失效時,將建立的TIniFile對象釋放,以釋放該對象所戰(zhàn)用的系統(tǒng)資源。

    至此,運行該工程,初始化文件的讀寫已能順利進行。當(dāng)然還可以使用EraseSection()成員函數(shù)刪除指定的節(jié),也可用DeleteKey()成員函數(shù)刪除指定的關(guān)鍵字,因篇幅有限,這里就不詳細介紹了,有興趣的可參考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成員函數(shù)建立TIniFile對

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

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

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

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

    { 將TIniFile對象關(guān)聯(lián)的初始化文件system.ini中的所

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

    合列表框SectionComboBox中 }

      SectionComboBox.Clear;

      IniFile.ReadSections(SectionComboBox.Items);

    { 選擇system.ini文件的第一個節(jié)名 }

      SectionComboBox.ItemIndex:=0;

      SectionComboBoxChange(Sender);

      CmdSave.Enabled:=False;

    end;


    { 將組合列表框IniComboBox中所選擇節(jié)中對應(yīng)的各個

    變量及對應(yīng)的值送入多行文本編輯器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;

      { 將選擇的關(guān)鍵字值讀入 }

      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;  { 釋放創(chuàng)建的對象 }

    end;


    end.
    以上方法在Windows 95下用Delphi 3.0調(diào)試通過。
    相關(guān)文章
    本頁查看次數(shù):