在线现看午夜福利片|女人16久久免费视频|鲁丝片一区鲁丝片二区鲁丝|一区二区三区欧美在线

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

            2011計算機等級考試Delphi講義:字符串列表應(yīng)用

            本章介紹多文本界面(MDI)、多頁面界面(MPI)技術(shù);VCL庫中TMemo,TEdit 控件以及有關(guān)文本編輯的常用對話框的使用。

              SearchMemo代碼如下:

              unit Search;

              interface

              uses WinProcs, SysUtils, StdCtrls, Dialogs;

              const

              WordDelimiters: set of Char = [#0..#255] - ['a'..'z','A'..'Z','1'..'9','0'];

              function SearchMemo(Memo: TCustomEdit;

              const SearchString: String;

              Options: TFindOptions): Boolean;

              function SearchBuf(Buf: PChar; BufLen: Integer;

              SelStart, SelLength: Integer;

              SearchString: String;

              Options: TFindOptions): PChar;

              implementation

              function SearchMemo(Memo: TCustomEdit;

              const SearchString: String;

              Options: TFindOptions): Boolean;

              var

              Buffer, P: PChar;

              Size: Word;

              begin

              Result := False;

              if (Length(SearchString) = 0) then Exit;

              Size := Memo.GetTextLen;

              if (Size = 0) then Exit;

              Buffer := StrAlloc(Size + 1);

              try

              Memo.GetTextBuf(Buffer, Size + 1);

              P := SearchBuf(Buffer, Size, Memo.SelStart,

              Memo.SelLength,SearchString, Options);

              if P <> nil then

              begin

              Memo.SelStart := P - Buffer;

              Memo.SelLength := Length(SearchString);

              Result := True;

              end;

              finally

              StrDispose(Buffer);

              end;

              end;

              function SearchBuf(Buf: PChar; BufLen: Integer;

              SelStart, SelLength: Integer;

              SearchString: String;

              Options: TFindOptions): PChar;

              var

              SearchCount, I: Integer;

              C: Char;

              Direction: Shortint;

              CharMap: array [Char] of Char;

              function FindNextWordStart(var BufPtr: PChar): Boolean;

              begin { (True XOR N) is equivalent to

              (not N) }

              Result := False; { (False XOR N) is equivalent

              to (N) }

              { When Direction is forward (1), skip non

              delimiters, then skip delimiters. }

              { When Direction is backward (-1), skip delims, then

              skip non delims }

              while (SearchCount > 0) and

              ((Direction = 1) xor (BufPtr^ in

              WordDelimiters)) do

              begin

              Inc(BufPtr, Direction);

              Dec(SearchCount);

              end;

              while (SearchCount > 0) and

              ((Direction = -1) xor (BufPtr^ in

              WordDelimiters)) do

              begin

              Inc(BufPtr, Direction);

              Dec(SearchCount);

              end;

              Result := SearchCount > 0;

              if Direction = -1 then

              begin { back up one char, to leave ptr on first non

              delim }

              Dec(BufPtr, Direction);

              Inc(SearchCount);

              end;

              end;

              begin

              Result := nil;

              if BufLen <= 0 then Exit;

              if frDown in Options then

              begin

              Direction := 1;

              Inc(SelStart, SelLength); { start search past end of

              selection }

              SearchCount := BufLen - SelStart - Length(SearchString);

              if SearchCount < 0 then Exit;

              if Longint(SelStart) + SearchCount > BufLen then

              Exit;

              end

              else

              begin

              Direction := -1;

              Dec(SelStart, Length(SearchString));

              SearchCount := SelStart;

              end;

              if (SelStart < 0) or (SelStart > BufLen) then Exit;

              Result := @Buf[SelStart];

              { Using a Char map array is faster than calling

              AnsiUpper on every character }

              for C := Low(CharMap) to High(CharMap) do

              CharMap[C] := C;

              if not (frMatchCase in Options) then

              begin

              AnsiUpperBuff(PChar(@CharMap), sizeof(CharMap));

              AnsiUpperBuff(@SearchString[1],

              Length(SearchString));

              end;

              while SearchCount > 0 do

              begin

              if frWholeWord in Options then

              if not FindNextWordStart(Result) then Break;

              I := 0;

              while (CharMap[Result[I]] = SearchString[I+1]) do

              begin

              Inc(I);

              if I >= Length(SearchString) then

              begin

              if (not (frWholeWord in Options)) or

              (SearchCount = 0) or

              (Result[I] in WordDelimiters) then

              Exit;

              Break;

              end;

              end;

              Inc(Result, Direction);

              Dec(SearchCount);

              end;

              Result := nil;

              end;

              end.

              4.4.3 替換對話框部件

              替換對話框部件為應(yīng)用程序提供替換對話框。如圖4.9。它包括查找對話框的所有功能,此外還允許使用者更換被選中的字符串。FindText 屬性是應(yīng)用程序需查找的字符串。ReplaceText屬性是被選中字符的替換字符串。Options 屬性決定對話框的顯示方式。其值如表4.3所示。

              與查找對話框一樣,替換對話框亦有OnFind 事件。用戶輸入查找字符串并按FindNext按鈕時,發(fā)生OnFind 事件。用戶選擇Replace 或ReplacAll 時, 對話框發(fā)生OnRelpace事件,要替換的字符串存入ReplaceText屬性中,要編寫相應(yīng)的代碼以支持替換功能。

              表4.3 替換對話框的Options屬性的取值及含義

             

              例程中TEditForm.Replace方法響應(yīng)OnReplace事件,Replace方法首先判斷控制中被

              選中字符串是否與替換字符串相等,如果不等則進行替換。而后根據(jù)Options中的方式循

              環(huán)進行查找替換。直至無匹配字符串為止。其代碼如下:

              procedure TEditForm.Replace(Sender: TObject);

              var

              Found: Boolean;

              begin

              with ReplaceDialog1 do

              begin

              if AnsiCompareText(Memo1.SelText, FindText) = 0 then

              Memo1.SelText := ReplaceText;

              Found := SearchMemo(Memo1, FindText, Options);

              while Found and (frReplaceAll in Options) do

              begin

              Memo1.SelText := ReplaceText;

              Found := SearchMemo(Memo1, FindText, Options);

              end;

              if (not Found) and (frReplace in Options) then

              ShowMessage('Cannot find "' + FindText + '".');

              end;

              end;

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