a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Delphi > 正文

Delphi的組件讀寫機制(一)

2019-11-18 18:35:23
字體:
來源:轉載
供稿:網友
 

Delphi的組件讀寫機制(一)

一、流式對象(Stream)和讀寫對象(Filer)的介紹
 在面向對象程序設計中,對象式數據管理占有很重要的地位。在Delphi中,對對象式數據管理的支持方式是其一大特色。
 Delphi是一個面向對象的可視化設計與面向對象的語言相結合的集成開發環境。Delphi的核心是組件。組件是對象的一種。Delphi應用程序完全是由組件來構造的,因此開發高性能的Delphi應用程序必然會涉及對象式數據管理技術。

 對象式數據管理包括兩方面的內容:
● 用對象來管理數據
● 對各類數據對象(包括對象和組件)的管理

 Delphi將對象式數據管理類歸結為Stream對象(Stream)和Filer對象(Filer),并將它們應用于可視組件類庫(VCL)的方方面面。它們提供了豐富的在內存、外存和Windows資源中管理對象的功能,
 Stream對象,又稱流式對象,是TStream、THandleStream、TFileStream、TMemoryStream、TResourceStream和TBlobStream等的統稱。它們分別代表了在各種媒介上存儲數據的能力,它們將各種數據類型(包括對象和組件) 在內存、外存和數據庫字段中的管理操作抽象為對象方法,并且充分利用了面向對象技術的優點,應用程序可以相當容易地在各種Stream對象中拷貝數據。
 讀寫對象(Filer)包括TFiler對象、TReader對象和TWriter對象。TFiler對象是文件讀寫的基礎對象,在應用程序中使用的主要是TReader和TWriter。TReader和TWriter對象都直接從TFiler對象繼承。TFiler對象定義了Filer對象的基本屬性和方法。
  Filer對象主要完成兩大功能:
● 存取窗體文件和窗體文件中的組件
● 提供數據緩沖,加快數據讀寫操作

 為了對流式對象和讀寫對象有一個感性的認識,先來看一個例子。
a)寫文件
PRocedure TFomr1.WriteData (Sender: TObject); r;
Var
  FileStream:TFilestream;
  Mywriter:TWriter;
  i: integer
Begin
  FileStream:=TFilestream.create(‘c:/Test.txt’,fmopenwrite);//創建文件流對象
  Mywriter:=TWriter.create(FileStream,1024); //把Mywriter和FileStream聯系起來
  Mywriter. writelistbegin;  //寫入列表開始標志
  For i:=0 to Memo1.lines.count-1 do   
    Mywriter.writestring(memo1.lines[i]); //保存Memo組件中文本信息到文件中
  Mywriter.writelistend;          //寫入列表結束標志
  FileStream.seek(0,sofrombeginning); //文件流對象指針移到流起始位置
  Mywriter.free; //釋放Mywriter對象
  FileStream.free; //釋放FileStream對象
End;
 
b)讀文件
procedure TForm1.ReadData(Sender: TObject);
Var
  FileStream:TFilestream;
  Myreader:TReader;
Begin
  FileStream:=TFilestream.create(‘c:/Test.txt’,fmopenread);
  Myreader:=TRreader.create(FileStream,1024); //把Myreader和FileStream聯系起來
  Myreader.readlistbegin;  //把寫入的列表開始標志讀出來
  Memo1.lines.clear;  //清除Memo1組件的文本內容
  While not myreader.endoflist do //注意TReader的一個方法:endoflist
  Begin
    Memo1.lines.add(myreader.readstring); //把讀出的字符串加到Memo1組件中
  End;
  Myreader.readlistend; //把寫入的列表結束標志讀出來
  Myreader.free;  //釋放Myreader對象
  FileStream.free; //釋放FileStream對象
End;
 上面兩個過程,一個為寫過程,另一個為讀過程。寫過程通過TWriter,利用TFilestream把一個Memo中的內容(文本信息)存為一個保存在磁盤上的二進制文件。讀過程剛好和寫過程相反,通過TReader,利用TFilestream把二進制文件中的內容轉換為文本信息并顯示在Memo中。運行程序可以看到,讀過程忠實的把寫過程所保存的信息進行了還原。
 下圖描述了數據對象(包括對象和組件)、流式對象和讀寫對象之間的關系。
 
         圖(一)

 值得注意的是,讀寫對象如TFiler對象、TReader對象和TWriter對象等很少由應用程序編寫者進行直接的調用,它通常用來讀寫組件的狀態,它在讀寫組件機制中扮演著非常重要的角色。
對于流式對象Stream,很多參考資料上都有很詳細的介紹,而TFiler對象、TReader對象和TWriter對象特別是組件讀寫機制的參考資料則很少見,本文將通過對VCL原代碼的跟蹤而對組件讀寫機制進行剖析。

二、讀寫對象(Filer)與組件讀寫機制
 Filer對象主要用于存取Delphi的窗體文件和窗體文件中的組件,所以要清楚地理解Filer對象就要清楚Delphi 窗體文件(DFM文件)的結構。
  DFM文件是用于Delphi存儲窗體的。窗體是Delphi可視化程序設計的核心。窗體對應Delphi應用程序中的窗口,窗體中的可視組件對應窗口中的界面元素,非可視組件如TTimer和TOpenDialog,對應Delphi應用程序的某項功能。Delphi應用程序的設計實際上是以窗體的設計為中心。因此,DFM文件在Delphi應用設計中也占很重要的位置。窗體中的所有元素包括窗體自身的屬性都包含在DFM文件中。
  在Delphi應用程序窗口中,界面元素是按擁有關系相互聯系的,因此樹狀結構是最自然的表達形式;相應地,窗體中的組件也是按樹狀結構組織;對應在DFM文件中,也要表達這種關系。DFM文件在物理上,是以文本方式存儲的(在Delphi2.0版本以前是存儲為二進制文件的),在邏輯上則是以樹狀結構安排各組件的關系。從該文本中可以看清窗體的樹狀結構。下面是DFM文件的內容:
object Form1: TForm1
  Left = 197
  Top = 124
  ……
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 272
    ……
    Caption = 'Button1'
    TabOrder = 0
  end
  object Panel1: TPanel
    Left = 120
    ……
    Caption = 'Panel1'
    TabOrder = 1
    object CheckBox1: TCheckBox
      Left = 104
      ……
   Caption = 'CheckBox1'
      TabOrder = 0
    end
  end
end
 這個DFM文件就是TWriter通過流式對象Stream來生成的,當然這里還有一個二進制文件到文本信息文件的轉換過程,這個轉換過程不是本文要研究的對象,所以忽略這樣的一個過程。
 在程序開始運行的時候,TReader通過流式對象Stream來讀取窗體及組件,因為Delphi在編譯程序的時候,利用編譯指令{$R *.dfm}已經把DFM文件信息編譯到可執行文件中,因此TReader讀取的內容實際上是被編譯到可執行文件中的有關窗體和組件的信息。
 TReader和TWriter不僅能夠讀取和寫入Object Pascal中絕大部分標準數據類型,而且能夠讀寫List、Variant等高級類型,甚至能夠讀寫Perperties和Component。不過,TReader、TWriter自身實際上提供的功能很有限,大部分實際的工作是由TStream這個非常強大的類來完成的。也就是說TReader、TWriter實際上只是一個工具,它只是負責怎么去讀寫組件,至于具體的讀寫操作是由TStream來完成的。
 由于TFiler是TReader和TWriter的公共祖先類,因為要了解TReader和TWriter,還是先從TFiler開始。



上一篇:delphi一句話幫助

下一篇:Delphi的組件讀寫機制(三)

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

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 一区二区在线免费观看 | 国产一区二区三区在线 | 五月激情综合 | 日日夜夜狠狠 | 国产在线资源 | 亚洲一区二区中文字幕在线观看 | 一区精品视频 | 久久伊人影院 | 国产欧美精品一区二区色综合朱莉 | 国产精品久久久久久久久免费 | 黄a一级| 国产精品入口麻豆www | 一级欧美| 99精品网站 | 91综合网| 少妇无套高潮一二三区 | 夜本色| 亚洲毛片 | 天天干天天搞天天射 | 91精品一区二区三区久久久久久 | 日韩精品极品在线观看 | 国产精品久久久久久一区二区三区 | 激情欧美日韩一区二区 | 国产精品不卡一区 | 日本一区二区三区精品视频 | 国产成人av电影 | 天天操天天干天天干 | 性视频网站免费 | 国产一区二区三区久久久 | 色噜噜一区二区 | 精品国产影院 | 中文字幕亚洲第一 | 国产免费无遮挡 | 99热精品在线 | 亚洲v欧美 | 久久国产欧美日韩精品 | 日韩精品一区二区三区在线 | 97久久香蕉国产线看观看 | 欧美中文在线 | 午夜国产精品成人 | 久久99国产精品久久99大师 |