久久免费视频91,青青草原影院伊人,国产剧情在线播放一区二区,亚欧日韩欧美一区

<menu id="meme2"><acronym id="meme2"></acronym></menu>
  • <dfn id="meme2"><code id="meme2"></code></dfn>
    <tbody id="meme2"><td id="meme2"></td></tbody>
  • <menu id="meme2"><acronym id="meme2"></acronym></menu>
  • 首頁(yè) 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
    2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
    MPA考試 | 中科院
    四六級(jí) | 職稱英語(yǔ) | 商務(wù)英語(yǔ) | 公共英語(yǔ) | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
    新概念英語(yǔ) | 成人英語(yǔ)三級(jí) | 申碩英語(yǔ) | 攻碩英語(yǔ) | 職稱日語(yǔ) | 日語(yǔ)學(xué)習(xí) | 法語(yǔ) | 德語(yǔ) | 韓語(yǔ)
    計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
    華為認(rèn)證 | Java認(rèn)證
    公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問(wèn) | 導(dǎo)游資格
    報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷員 | 國(guó)際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
    人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
    駕駛員 | 網(wǎng)絡(luò)編輯
    衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
    會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱 | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
    注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國(guó)際內(nèi)審師
    一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
    質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
    設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
    城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測(cè)繪師 | 注冊(cè)計(jì)量師
    繽紛校園 | 實(shí)用文檔 | 英語(yǔ)學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

    2011等考Delphi:開發(fā)Delphi對(duì)象式數(shù)據(jù)管理功能

    在本章中將介紹Stream對(duì)象和Filer對(duì)象的實(shí)現(xiàn)原理、應(yīng)用方法以及在超媒體系統(tǒng)中的應(yīng)用。這對(duì)于運(yùn)用Delphi 開發(fā)高級(jí)應(yīng)用是很重要的。

      下面是存取操作的擴(kuò)展示范:

      var

      FileStream: TStream;

      I: Integer;

      begin

      FileStream := TFileStream.Create('OverView.Crd', fmOpenWrite);

      With TWriter.Create(FileStream, 4096) do

      try

      for I := 0 to DesignWin.ControlCount - 1 do

      begin

      WriteInteger(MMID[i]);

      WriteRootComponent(DesignWin.Controls[i]);

      { 寫相應(yīng)媒體擴(kuò)展信息 }

      ……

      end;

      WriteListEnd;

      finally.

      Free;

      end;

      FileStream.Free;

      end;

      WriteInteger(MMID[i])語(yǔ)句是寫入媒體標(biāo)識(shí)。

      下面是相應(yīng)的讀擴(kuò)展DFM的程序:

      var

      PropInfo: PPropInfo;

      Method : TMethod;

      FileStream: TStream;

      I: Integer;

      begin

      FileStream := TFileStream.Create('OverView.Crd', fmOpenRead);

      With TReader.Create(FileStream, 4096) do

      try

      while not EndOfList do

      begin

      case ReadInteger of

      IDText: begin

      Ctrl := TControl(ReadRootComponent(nil));

      PropInfo := GetPropInfo(Ctrl.ClassInfo, 'OnClick');

      Method.Code:= Self.MethodAddress(MethodName);

      Method.Data := Self;

      if Method.Code <> nil then

      SetMethodProp(Ctrl, PropInfo, Method);

      DesignWin.InsertControl(Ctrl);

      end;

      IDImage:

      ……

      end;

      ……

      WriteListEnd;

      end;

      finally.

      Free;

      end;

      FileStream.Free;

      end;

      SetMethodProp過(guò)程是用于重新聯(lián)接控制和它的事件處理過(guò)程。類似的功能還可以用TReader對(duì)象的OnFindMethod事件的處理過(guò)程來(lái)實(shí)現(xiàn)。

      實(shí)現(xiàn)腳本語(yǔ)言擴(kuò)展的基本方法與存取擴(kuò)展類似,但它還要加擴(kuò)展媒體信息轉(zhuǎn)換為文本,并插入到部件的腳本描述中。

      20.3.2 數(shù)據(jù)庫(kù)BLOB字段應(yīng)用

      Delphi VCL提供了TBlobStream對(duì)象支持對(duì)數(shù)據(jù)庫(kù)BLOB字段的存取。Delphi 的TBlobStream對(duì)象的作用在于一方面可以使Delphi應(yīng)用程序充分利用多媒體數(shù)據(jù)庫(kù)的數(shù)據(jù)管理能力。另一方面又能利用Delphi Object Pascal的程序設(shè)計(jì)能力給關(guān)系型多媒體數(shù)據(jù)庫(kù)提供底層控制能力和全方位的功能擴(kuò)展余地。

      20.3.2.1 TBlobStream的使用

      TBlobStream對(duì)象用一個(gè)TBlobField類型的對(duì)象作為參數(shù)來(lái)創(chuàng)建與BLOB字段相聯(lián)的BLOB流,接著就可用流的存取方法在BLOB字段中存取數(shù)據(jù)。

      var

      BlobStream: TBlobStream;

      I: Integer;

      begin

      BlobStream := TBlobStream.Create(TBlobField(CardTable.Fields[10], bmWrite);

      With TWriter.Create(BlobStream, 4096) do

      try

      for I := 0 to DesignWin.ControlCount - 1 do

      begin

      WriteInteger(MMID[i]);

      WriteRootComponent(DesignWin.Controls[i]);

      { 寫相應(yīng)媒體擴(kuò)展信息 }

      ……

      end;

      WriteListEnd;

      finally.

      Free;

      end;

      BlobStream.Free;

      CardTable.Post;

      end;

      Fields變量是表示數(shù)據(jù)庫(kù)記錄的字段數(shù)組,F(xiàn)ields[10]正是數(shù)據(jù)庫(kù)的BLOB 字段。CardTable的Post方法將數(shù)據(jù)庫(kù)的修改反饋到數(shù)據(jù)庫(kù)的物理存儲(chǔ)上。

      上面這段程序是超媒體卡片存儲(chǔ)的部分源程序,我們就是將卡片保存在數(shù)據(jù)庫(kù)BLOB字段中,實(shí)現(xiàn)將超文本和關(guān)系數(shù)據(jù)庫(kù)兩種數(shù)據(jù)管理方式結(jié)合起來(lái)。讀卡片的程序如下:

      var

      PropInfo: PPropInfo;

      Method: TMethod;

      Blobtream: TStream;

      I: Integer;

      begin

      BlobStream := TBlobStream.Create(TBlobField(CardTable.Fields[10]), bmRead);

      With TReader.Create(BlobStream, 4096) do

      try

      while not EndOfList do

      begin

      case ReadInteger of

      IDText: begin

      Ctrl := TControl(ReadRootComponent(nil));

      PropInfo := GetPropInfo(Ctrl.ClassInfo, 'OnClick');

      Method.Code:= Self.MethodAddress(MethodName);

      Method.Data := Self;

      if Method.Code <> nil then

      SetMethodProp(Ctrl, PropInfo, Method);

      DesignWin.InsertControl(Ctrl);

      end;

      IDImage:

      ……

      end;

      ……

      WriteListEnd;

      end;

      finally.

      Free;

      end;

      FileStream.Free;

      end;

      20.3.2.2 BLOB字段與圖形圖像

      在多媒體數(shù)據(jù)庫(kù)中處理得比較多的是圖形圖像,因此早期的多媒體數(shù)據(jù)庫(kù)在擴(kuò)展關(guān)系數(shù)據(jù)庫(kù)時(shí)往往是增加一個(gè)圖像字段。BLOB字段是以二進(jìn)制數(shù)據(jù)存儲(chǔ)方式,因此它完全可以表達(dá)圖形圖像數(shù)據(jù)。

      在TBlobField對(duì)象中提供了LoadFromBitMap和SaveToBitMap方法存取位圖數(shù)據(jù)。它們?cè)趯?shí)現(xiàn)上都是使用BlobStream對(duì)象。

      procedure TBlobField.LoadFromBitmap(Bitmap: TBitmap);

      var

      BlobStream: TBlobStream;

      Header: TGraphicHeader;

      begin

      BlobStream := TBlobStream.Create(Self, bmWrite);

      try

      if (DataType = ftGraphic) or (DataType = ftTypedBinary) then

      begin

      Header.Count := 1;

      Header.HType := $0100;

      Header.Size := 0;

      BlobStream.Write(Header, SizeOf(Header));

      Bitmap.SaveToStream(BlobStream);

      Header.Size := BlobStream.Position - SizeOf(Header);

      BlobStream.Position := 0;

      BlobStream.Write(Header, SizeOf(Header));

      end else

      Bitmap.SaveToStream(BlobStream);

      finally

      BlobStream.Free;

      end;

      end;

      procedure TBlobField.SaveToBitmap(Bitmap: TBitmap);

      var

      BlobStream: TBlobStream;

      Size: Longint;

      Header: TGraphicHeader;

      begin

      BlobStream := TBlobStream.Create(Self, bmRead);

      try

      Size := BlobStream.Size;

      if Size >= SizeOf(TGraphicHeader) then

      begin

      BlobStream.Read(Header, SizeOf(Header));

      if (Header.Count <> 1) or (Header.HType <> $0100) or

      (Header.Size <> Size - SizeOf(Header)) then

      BlobStream.Position := 0;

      end;

      Bitmap.LoadFromStream(BlobStream);

      finally

      BlobStream.Free;

      end;

      end;

      程序中按兩種方式存取數(shù)據(jù),對(duì)于位圖數(shù)據(jù),數(shù)據(jù)的起點(diǎn)是流的Potition為0處,對(duì)于圖形或其它類型的Blob數(shù)據(jù),則以流的Position為SizeOf(Header) + 1處開始, 即多了個(gè)頭信息。

      20.3.2.3 BLOB字段與文本

      Delphi BLOB字段中增加了大型文本的處理能力?梢栽赥BlobField和Strings中自由地交換數(shù)據(jù)。

      procedure TBlobField.LoadFromStrings(Strings: TStrings);

      var

      BlobStream: TBlobStream;

      begin

      BlobStream := TBlobStream.Create(Self, bmWrite);

      try

      Strings.SaveToStream(BlobStream);

      finally

      BlobStream.Free;

      end;

      end;

      procedure TBlobField.SaveToStrings(Strings: TStrings);

      var

      BlobStream: TBlobStream;

      begin

      BlobStream := TBlobStream.Create(Self, bmRead);

      try

      Strings.LoadFromStream(BlobStream);

      finally

      BlobStream.Free;

      end;

      end;

      20.3.2.4 BLOB字段與Stream對(duì)象

      因?yàn)镈elphi中,BLOB字段是通過(guò)BLOB流來(lái)訪問(wèn)的,所以可以很容易地在BLOB字段和Stream對(duì)象之間傳遞數(shù)據(jù)。為此,TBlobField對(duì)象提供了LoadFromStream和SaveToStream方法。

      procedure TBlobField.LoadFromStream(Stream: TStream);

      var

      BlobStream: TBlobStream;

      begin

      BlobStream := TBlobStream.Create(Self, bmWrite);

      try

      BlobStream.CopyFrom(Stream, 0);

      finally

      BlobStream.Free;

      end;

      end;

      procedure TBlobField.SaveToStream(Stream: TStream);

      var

      BlobStream: TBlobStream;

      begin

      BlobStream := TBlobStream.Create(Self, bmRead);

      try

      Stream.CopyFrom(BlobStream, 0);

      finally

      BlobStream.Free;

      end;

      end;

      20.3.3 存取嵌入在OleContainer對(duì)象中的OLE服務(wù)器的數(shù)據(jù)

      對(duì)象鏈接和嵌入(Object Linking and Embedding,簡(jiǎn)稱OLE),是一組服務(wù)功能,它提供了一種用來(lái)源于不同應(yīng)用程序的信息創(chuàng)建復(fù)合文檔的強(qiáng)有力方法。

      通過(guò)把圖像、圖形、表格、聲音、注解、文件和其它表示手段描述成對(duì)象,用它能在不同軟件廠家提供的應(yīng)用程序中更為容易地交換合成和處理數(shù)據(jù)它是應(yīng)用程序的集成更為容易。OLE2.0支持直觀編輯。用戶不需切換到不同窗口就能在文檔中直接對(duì)對(duì)象進(jìn)行操作,改進(jìn)了操作環(huán)境。用戶不用再關(guān)注應(yīng)用程序和操作環(huán)境,只需關(guān)注于使用對(duì)象技術(shù)的數(shù)據(jù)和文件,便能完成全部工作。

      OLE已成為操作系統(tǒng)功能上的一大標(biāo)準(zhǔn),各大軟商紛紛在開發(fā)工具中支持OLE 2.0規(guī)范。Delphi 2.0提供了OleContainer對(duì)象支持OLE窗戶應(yīng)用程序的開發(fā)。

      盡管通過(guò)OLE可以用來(lái)源于不同應(yīng)用程序的信息創(chuàng)建復(fù)合文檔,充分體現(xiàn)以任務(wù)、以文檔為中心的思想,但是很難分解來(lái)自其它應(yīng)用程序中的嵌入數(shù)據(jù),以進(jìn)行特殊的處理。

      例如,一套多媒體電子文檔管理系統(tǒng),系統(tǒng)需要數(shù)據(jù)庫(kù)管理功能文檔編輯功能,全文檢索功能等。在文檔編輯功能的實(shí)現(xiàn)上,如果能利用中文Word 或?qū)懽职逯惖膹?qiáng)大的編輯排版功能,就可以省卻重新開發(fā)一個(gè)文檔編輯的費(fèi)用,使用具有直觀編輯的OLE復(fù)合文檔嵌入Word的DOC數(shù)據(jù)或RTF數(shù)據(jù)當(dāng)然是最佳的選擇。 但問(wèn)題在于全文檢索系統(tǒng)要求能直接在文檔中搜索關(guān)鍵字,因此要求將文檔數(shù)據(jù)從OLE嵌入數(shù)據(jù)或文檔中的本地?cái)?shù)據(jù)中分離出來(lái)。

      Delphi 2.0的OleContainer部件支持存儲(chǔ)OLE對(duì)象數(shù)據(jù)。OLE對(duì)象數(shù)據(jù)包括兩部分:OLE類描述信息和OLE服務(wù)器嵌入數(shù)據(jù)。一般說(shuō)來(lái),OLE服務(wù)器嵌入數(shù)據(jù)是以服務(wù)器支持的數(shù)據(jù)格式存儲(chǔ)的; 比方說(shuō),中文Word 6.0的嵌入數(shù)據(jù)的格式就是Word 6.0文檔的格式。因此,要將文檔數(shù)據(jù)從OLE 嵌入式文檔中分離出來(lái)就是要訪問(wèn)第二部分?jǐn)?shù)據(jù)。

      我們分析了Delphi 2.0的OleContainer對(duì)象存取復(fù)合文檔的程序,得到分離數(shù)據(jù)的方法。

      讓我們來(lái)看一段OleContainer對(duì)象存儲(chǔ)數(shù)據(jù)的程序:

      procedure TOleContainer.SaveToStream(Stream: TStream);

      var

      DataHandle: HGlobal;

      Buffer: Pointer;

      Header: TStreamHeader;

      R: TRect;

      ……

      begin

      ……

      try

      ……

      if FOldStreamFormat then

      begin

      R := BoundsRect;

      Header.PartRect.Left := R.Left;

      Header.PartRect.Top := R.Top;

      Header.PartRect.Right := R.Right;

      Header.PartRect.Bottom := R.Bottom;

      end else

      begin

      Header.Signature := StreamSignature;

      Header.DrawAspect := FDrawAspect;

      end;

      Header.DataSize := GlobalSize(DataHandle);

      Stream.WriteBuffer(Header, SizeOf(Header));

      Buffer := GlobalLock(DataHandle);

      try

      Stream.WriteBuffer(Buffer^, Header.DataSize);

      finally

      GlobalUnlock(DataHandle);

      end;

      finally

      ReleaseObject(TempStorage);

      ReleaseObject(TempLockBytes);

      end;

      end;

      程序中,OleContainer對(duì)象執(zhí)行了兩次往流中寫數(shù)據(jù)的操作。

      Stream.WriteBuffer(Header, Size(Header));

      Stream.WriteBuffer(Buffer^, Header.DataSize);

      前一語(yǔ)句是寫入OLE類描述信息,后一句語(yǔ)句是寫入OLE服務(wù)器的嵌入數(shù)據(jù)。Header是TStreamHeader記錄類型的變量。TStreamHeader記錄的定義如下:

      TStreamHeader = record

      case Integer of

      0: ( { 新版OLE對(duì)象 }

      Signature: Integer;

      DrawAspect: Integer;

      DataSize: Integer);

      1: ( { 舊版OLE對(duì)象 }

      PartRect: TSmallRect);

      end;

      因此讀OLE服務(wù)器嵌入數(shù)據(jù)時(shí),要跳過(guò)文件頭的TStreamHeader記錄。下面就是如何分離OLE服務(wù)器嵌入數(shù)據(jù)的程序:

      var

      Stream : TMemoryStream;

      FileStream : TFileStream;

      begin

      Stream := TMemoryStream.Create;

      FileStream := TFileStream.Create('TEST.DOC', fmCreate) ;

      with OleContainer1 do

      if (State <> osEmpty) then

      SaveToStream(Stream);

      Stream.Seek(Sizeof(TStreamHeader), 0);

      FileStream.CopyFrom(Stream, Stream.Size - SizeOf(TStreamHeader));

      Stream.Free;

      FileStream.Free;

      end;

      OleContainer1包含的服務(wù)器對(duì)象是中文Word 6.0,程序中將分離出的數(shù)據(jù)存儲(chǔ)在磁盤文件“TEST.DOC”上。如果希望存儲(chǔ)在不同的媒介上,可以使用相應(yīng)的Stream對(duì)象,分離的方法類似。但是,這種方法并非對(duì)所有的OLE服務(wù)器數(shù)據(jù)都適用,如Windows 95 附件中的寫字板(WordPad)就不行。

    上一頁(yè)  1 2 3 4 5 6 7 8 9  下一頁(yè)
      相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試試題及答案解析專題
           預(yù)告:名師解析2010年9月計(jì)算機(jī)等級(jí)考試試題答案
           2010年9月計(jì)算機(jī)等級(jí)考試成績(jī)查詢時(shí)間及入口
           2010年9月計(jì)算機(jī)等考成績(jī)查詢短信免費(fèi)提醒開通
    文章搜索
    版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。