亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lc_bcb_105.txt

?? c++ builder 的一些txt文檔
?? TXT
?? 第 1 頁 / 共 3 頁
字號:
 
10.4.2 窗體重用實例 
 
  下面我們通過一個具體的實例來說明窗體重用的設計過程。我們在一個名為passform.dll 的文件中儲存了一個口令設置窗口和一個口令檢查窗口。而后在一個Delphi 編寫的程序和一個VB編寫的程序中進行調用。事實證明這種方法是完全可行的。 
         
10.4.2.1  窗體重用DLLs的設計 
 
  窗體重用DLLs的設計依照(10.4.1)中介紹的步驟進行。DLLs中的兩個窗體 SetPassWordForm和GetPassWordForm分別用于設置和檢查口令。它們的設計界面如圖所示。 
 
                 
                        圖10.3  口令設置窗口SetPassWordForm設計界面 
 
                   
                        圖10.4  口令檢查窗口GetPassWordForm設計界面 
 
  窗體類TSetPassWordForm定義了兩個數據成員Verified和PassWord,用于記錄口令確認狀態和設置的口令。TSetPassWordForm的定義如下: 
         
    type 
          TSetPassWordForm = class(TForm) 
            Label1: TLabel; 
            Edit1: TEdit; 
            OKBtn: TBitBtn; 
            CancelBtn: TBitBtn; 
            procedure FormCreate(Sender: TObject); 
            procedure Edit1KeyPress(Sender: TObject; var Key: Char); 
          private 
            { Private declarations } 
            Verified: Boolean; 
          public 
            { Public declarations } 
            PassWord: PChar; 
          end; 
 
  窗口生成時,對數據成員和部件狀態進行初始化: 
 
        procedure TSetPassWordForm.FormCreate(Sender: TObject); 
        begin 
      Verified := False; 
      PassWord := StrAlloc(40); 
      OKBtn.Enabled := False; 
      Label1.Caption := 'Please Input PassWord:'; 
        end; 
 
  按鈕OKBtn在程序啟動時Enabled屬性設置為False,直到口令被正確設置后Enabled屬性才恢復為True。這樣就保證了只有口令被正確設置后,口令設置窗口才能正常關閉。否則只能按Cancel按鈕取消。 
  在口令設置代碼單元中定義了一個輸出函數SetPassWord,用于生成口令設置窗口并返回設置的口令: 
 
        function SetPassWord(PWord: PChar): Boolean; 
        var 
          SetPassWordForm: TSetPassWordForm; 
        begin 
          Result := False; 
          SetPassWordForm := TSetPassWordForm.Create(Application); 
          try 
            with SetPasswordForm do 
              if ShowModal = mrOK then 
              begin 
                StrCopy(PWord,StrUpper(Password)); 
                Result := True; 
              end; 
          finally 
            SetPasswordForm.Free; 
          end; 
        end; 
 
  口令成功設置,把PassWord的值拷貝給PWord輸出,并返回True。應該注意的是由于  
PWord本身就是指針類型,指向一個字符串的地址,因而雖然PWord用于輸出,但在參數表中仍為傳值參數,而不是傳址參數。另外調用函數StrCopy,要求PWord在傳入前已分配內存,否則會導致一個一般保護錯。try...finally用于保護窗口所占用內存資源在任何情況下都能正常釋放,讀 
者可參看第十二章。 
  在口令設置窗口中,為了確保用戶記住了設置的口令,在用戶輸入并按回車鍵后,要求用戶再次輸入進行確認。只有用戶重新輸入的字符串與原設置口令相同,口令設置窗口才能正常關閉  
。否則將原設置口令清空,要求用戶再次輸入。以上功能的實現在編輯框的OnKeyPress事件處理過程中。 
 
        procedure TSetPassWordForm.Edit1KeyPress(Sender: TObject; var Key: Char); 
        begin 
          if Edit1.text = '' then Exit; 
          if Key = #13 then 
          begin 
            if Verified then 
              if StrPas(PassWord) = Edit1.text then 
              begin 
                OKBtn.Enabled := True; 
                Edit1.Enabled := False; 
                OKBtn.SetFocus; 
              end 
              else 
              begin 
                Verified := False; 
                MessageDlg('PassWord is InValid.',mtWarning,[mbOK],0); 
                Edit1.text := ''; 
                PassWord := ''; 
                Label1.Caption := 'Please Input PassWord:'; 
              end 
              else 
              begin 
                Verified := True; 
                StrPCopy(PassWord,Edit1.text); 
                Edit1.text := ''; 
                Label1.caption := 'Please Verify PassWord:'; 
              end; 
            Key := #0; 
          end; 
        end; 
 
  口令檢查窗口的實現相對簡單,只定義了一個輸出函數GetPassWord,用于生成口令檢查窗口并返回口令檢查的結果。 
 
        function GetPassword(Password: PChar): Boolean; 
        var 
          GetPasswordForm: TGetPasswordForm; 
        begin 
          Result := False; 
          GetPasswordForm := TGetPasswordForm.Create(Application); 
          try 
            with GetPasswordForm do 
              if ShowModal = mrOK then 
                if UpperCase(Edit1.Text) <> StrPas(StrUpper(Password)) then 
                  MessageDlg('Invalid Password', mtWarning, [mbOK], 0) 
                else 
                  Result := True; 
          finally 
            PasswordForm.Free; 
          end; 
        end; 
 
  PassWord為輸入的參數,不能為空,由調用以上函數的程序負責維護。 
  窗口中用戶輸入口令時回顯在屏幕上的字符由編輯框的PassWordChar屬性確定。 
  在DLLs的工程文件中,把兩個輸出函數寫到exports子句中。 
 
        library PassForm; 
 
        uses 
        GetPass in 'GETPASS.PAS' {PasswordForm}, 
        Setpass in 'SETPASS.PAS' {SetPassWordForm}; 
 
        exports 
        GetPassword,SetPassWord; 
 
        begin 
        end. 
 
 
10.4.2.2        Delphi應用程序調用重用窗體 
 
  在Delphi應用程序中調用重用窗體,首先必須包含passform.dll的兩個輸出函數: 
 
        function GetPassword(Password: PChar): Boolean; 
                far; external 'c:\dlls\PassForm'; 
        function SetPassword(PassWord: PChar): Boolean; 
                far; external 'c:\dlls\PassForm'; 
 
  這位于程序單元的implementation部分。 
  而后在過程中調用相應函數實現口令的設置和檢查。程序運行后的界面如圖。 
         
          
 
                        圖10.5  Delphi應用程序調用重用窗體運行界面 
 
  口令設置部分的實現代碼為: 
 
        procedure TForm1.SetButtonClick(Sender: TObject); 
        begin 
          PassWord := StrAlloc(40); 
          if SetPassWord(PassWord) = False then 
         MessageDlg('PassWord is not set',mtInformation,[mbOK],0);    
        end; 
 
  首先為口令字符串分配內存。當口令設置窗體按Cancel按鈕取消時,顯示相應的信息。 
  口令檢查部分的實現代碼為: 
 
        procedure TForm1.TestButtonClick(Sender: TObject); 
        begin 
          if PassWord = nil then 
          begin 
            MessageDlg('Set password first', mtInformation, [mbOK], 0); 
            SetButton.SetFocus; 
            Exit; 
          end; 
          if GetPassword(PassWord) then 
              Label1.Caption := 'You are Wellcome !' 
          else 
              Label1.Caption := 'Sorry,You are InValid User.'; 
        end; 
 
  根據口令檢查的結果,在標簽框中顯示相應的信息。 
 
10.4.2.3 VB應用程序調用重用窗體 
 
  VB是微軟公司極力推薦的一個可視化開發工具。它雖然并不支持動態鏈接庫的創建,但可以調用標準的Windows API動態鏈接庫和用其它語言編寫的動態鏈接庫。為了驗證所生成DLLs的普適性,我們用VB開發了一個簡單的程序來調用passform.dll中儲存的窗體。 
  VB程序的運行界面如圖,和(10.5)的Delphi程序基本一致。 
 
                 
 
                        圖10.6  VB應用程序調用重用窗體運行界面 
 
  下面是VB程序的完整代碼,和Delphi程序的對應部分基本一致。 
 
        Option Explicit 
        Declare Function GetPassWord Lib "c:\dlls\passform.dll" (ByVal PassWord As String)                                                                                                                                      As      Integer 
        Declare Function SetPassWord Lib "c:\dlls\passform.dll" (ByVal PassWord As String)                                                                                                                                      As Integer 
 
        Dim PassWord As String * 40 
         
        Sub Check_Click () 
         If PassWord = "" Then 
            MsgBox ("Enter sample password first") 
            SetPass.SetFocus 
          Else 
            If GetPassWord(PassWord) Then 
              StatusLbl.Caption = "You are Welcome!" 
            Else 
              StatusLbl.Caption = "Sorry,You are Invalid User." 
            End If 
         End If 
        End Sub 
         
        Sub SetPass_Click () 
            If SetPassWord(PassWord) = 0 Then 
              MsgBox ("PassWord is not Set.") 
            End If 
        End Sub 
 
  有關VB編程的一些具體問題,讀者可參看有關的VB參考書。 
  
10.4.3 小結 
 
  本章我們討論的是動態鏈接庫編程。許多可視化開發工具(如Visual Basic)不支持 DLLs的創建,而Delphi在這里又有上乘的表現。特別是窗體重用機制是Delphi對Windows下DLLs編程的一個重大改進。在一般的DLLs編程中也體現了Delphi快捷、方便的特點。動態鏈接庫是  
Windows下程序組織的一種重要方式,使用動態鏈接庫可以極大地保護用戶在不同開發工具、不同時期所做的工作。利用動態鏈接庫,用戶可以逐步去構筑自己的程序模塊庫,為今后的工作積累素材。 
  
                                         [上一篇] [下一篇]
           [本討論區] [返回首頁] [分類討論區] [全部討論區]   討論區
--
※ 來源:.西北網絡中心兵馬俑 BBS 站 bbs.xanet.edu.cn.[FROM: 202.117.1.151]
 
  返回首頁
  分類討論區
  全部討論區
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

亚洲色图欧美在线| 国产在线播精品第三| 久久国产生活片100| 日韩一区二区三区视频在线| 青青草国产精品97视觉盛宴| 精品视频一区二区三区免费| 欧美色图天堂网| 欧美日韩大陆在线| 日韩一二三区不卡| 26uuu欧美| 国产精品青草综合久久久久99| 国产精品久久99| 中文字幕在线不卡| 樱桃国产成人精品视频| 亚洲精品成人在线| 亚洲在线视频免费观看| 日韩精品一级中文字幕精品视频免费观看| 婷婷综合另类小说色区| 免费在线看成人av| 国产精品18久久久久久久久| 99r国产精品| 欧美日韩国产123区| 日韩精品一区二区三区老鸭窝| 精品对白一区国产伦| 国产农村妇女毛片精品久久麻豆 | 成人性生交大片免费看视频在线| 国产精品一区二区在线看| 国产91高潮流白浆在线麻豆 | 91精品国产麻豆| 久久精品人人做人人综合 | 亚洲国产视频直播| 免费看日韩精品| av网站免费线看精品| 欧美日本精品一区二区三区| 国产欧美一二三区| 亚洲午夜久久久久| 国产九九视频一区二区三区| 在线视频国内一区二区| 久久亚洲二区三区| 亚洲精品乱码久久久久久日本蜜臀| 日韩高清在线电影| 99视频有精品| 欧美va亚洲va在线观看蝴蝶网| 综合久久久久综合| 久久丁香综合五月国产三级网站| www.亚洲激情.com| 日韩欧美一卡二卡| 一区二区三区在线视频免费 | 99久久er热在这里只有精品15| 欧美色综合影院| 国产精品免费久久久久| 日韩电影在线一区二区| 91免费版在线看| 久久女同互慰一区二区三区| 天天综合日日夜夜精品| 国产成人啪午夜精品网站男同| 欧美日韩mp4| 亚洲天堂福利av| 丁香婷婷综合五月| 精品88久久久久88久久久| 午夜一区二区三区视频| 91美女福利视频| 国产精品久久久久一区| 国产很黄免费观看久久| 精品久久久久久久久久久久包黑料 | 国产精品美女久久久久久久| 韩国中文字幕2020精品| 欧美一区二区免费观在线| 亚洲高清免费一级二级三级| 在线精品观看国产| 成人欧美一区二区三区黑人麻豆| 国产激情91久久精品导航 | 国产精品传媒入口麻豆| 国产一区二区三区最好精华液| 日韩亚洲欧美成人一区| 亚洲国产成人高清精品| 色狠狠综合天天综合综合| 国产精品日韩精品欧美在线| 成人国产电影网| 国产精品久久久久久久久动漫| 成人爱爱电影网址| 国产精品久久久久久久裸模| av福利精品导航| 亚洲另类春色国产| 在线观看一区不卡| 亚洲高清在线精品| 91精品国产色综合久久不卡蜜臀 | 成人美女在线观看| 国产精品私人自拍| 成人av网在线| 亚洲制服丝袜在线| 6080日韩午夜伦伦午夜伦| 亚洲第一激情av| 日韩亚洲欧美综合| 国内精品伊人久久久久av影院| 久久久夜色精品亚洲| 国产激情91久久精品导航| 国产精品理论片在线观看| 色婷婷综合久久久久中文 | 自拍偷自拍亚洲精品播放| av电影天堂一区二区在线 | 日韩avvvv在线播放| 日韩精品一区二区三区四区视频| 国产乱一区二区| 亚洲另类在线视频| 日韩视频免费观看高清完整版| 精品一区二区三区影院在线午夜| 久久久国产午夜精品 | 亚洲国产一区视频| 精品久久人人做人人爱| eeuss鲁片一区二区三区| 亚洲一区二区三区国产| 精品福利一区二区三区| 91精品福利视频| 国模娜娜一区二区三区| 亚洲色图在线播放| 日韩一区二区三区电影 | 亚洲欧美日韩精品久久久久| 欧美日韩免费电影| 国产成都精品91一区二区三| 性做久久久久久免费观看| 国产欧美精品一区二区色综合| 欧美日韩中文精品| 高清不卡一区二区| 石原莉奈在线亚洲三区| 国产精品五月天| 欧美电影免费观看高清完整版在线观看| 99久久99久久精品免费看蜜桃| 美国av一区二区| 一区二区三区欧美日韩| 久久久亚洲精华液精华液精华液| 在线免费不卡视频| 国产成人免费av在线| 免费在线看成人av| 一级精品视频在线观看宜春院 | 日韩一卡二卡三卡四卡| 91片黄在线观看| 国产aⅴ综合色| 久久激情综合网| 视频在线观看一区二区三区| 日韩理论片一区二区| 国产精品无人区| 国产亚洲综合色| 精品国产一区二区三区不卡 | 成人av先锋影音| 国产精品一区免费在线观看| 精品一区二区免费看| 日韩电影免费在线看| 午夜私人影院久久久久| 午夜精品久久久久久久| 亚洲精品国产一区二区精华液 | 中文字幕二三区不卡| 欧美精品一区在线观看| 欧美岛国在线观看| 日韩欧美高清在线| 精品精品国产高清a毛片牛牛 | 亚洲视频免费看| 日韩一区中文字幕| 亚洲日本乱码在线观看| 亚洲六月丁香色婷婷综合久久| 国产精品福利电影一区二区三区四区| 久久久久久久电影| 欧美激情一区二区三区在线| 国产精品久久久久久久久快鸭| 中文字幕在线观看不卡| 亚洲视频免费看| 亚洲午夜三级在线| 日欧美一区二区| 美女视频黄a大片欧美| 国产一区三区三区| 丁香网亚洲国际| 91久久一区二区| 69久久夜色精品国产69蝌蚪网| 日韩一区二区三区免费观看| 欧美r级在线观看| 国产女人18水真多18精品一级做| 国产精品久久久久久久蜜臀| 一二三四社区欧美黄| 免费观看日韩av| 国产成人啪免费观看软件| 一本大道av伊人久久综合| 欧美日韩高清影院| 26uuu久久天堂性欧美| 国产精品不卡在线| 亚洲成人免费看| 国产精品99久久久久久久女警 | av在线不卡免费看| 精品视频免费在线| 久久在线观看免费| 亚洲综合在线观看视频| 日韩精品乱码av一区二区| 国产一区欧美二区| 91久久奴性调教| 久久久久久一级片| 一区二区久久久久| 国产成人在线看| 欧美日本韩国一区二区三区视频| 国产日产亚洲精品系列| 图片区小说区区亚洲影院| 成人深夜视频在线观看|