<del id="dhfrq"></del>

    1. <tr id="dhfrq"></tr>
      成人午夜激情在线观看,国产精品一线天粉嫩av,99精品国产综合久久久久五月天 ,一卡2卡三卡4卡免费网站,国产高清在线男人的天堂,五月天国产成人AV免费观看,67194熟妇在线观看线路,成人无码潮喷在线观看
      現在位置:范文先生網>理工論文>計算機信息技術>利用Delphi編寫Windows控制面板組件及實例

      利用Delphi編寫Windows控制面板組件及實例

      時間:2023-02-21 00:10:32 計算機信息技術 我要投稿
      • 相關推薦

      利用Delphi編寫Windows控制面板組件及實例

        張 建 軍(中國人民解放軍合肥炮兵學院研究生系97級)
        
        韓 瑩 (中保財險安徽省銅陵市分公司計財部)
        
        關鍵詞:
        
        在Windows95/NT/98操作系統中,控制面板(Control Panel)提供了定制Windows的操作方法,通過它可以完成設置打印機、顯示、網絡、添加新硬件等功能。通常控制面板包含20多個組件(*.CPL),分別負責系統某一方面的設置。鼠標雙擊任一組件圖標,控制面板調用相應程序,彈出對話框,允許設置系統參數。確認修改后系統參數保存在Windows注冊表或某一配置文件(*.INI)中。
        
        一、控制面板組件基礎知識
        
        控制面板是一個Windows應用程序C:\WINDOWS\CONTROL.EXE,其配置文件是C:\WINDOWS\CONTROL.INI.控制面板組件是一些動態鏈接庫,其擴展名不是DLL,而是CPL.通常,控制面板組件保存在C:\WINDOWS\SYSTEM\目錄下。在CONTROL.INI中有一個[MMCPL]節,該節可指定由CONTROL.EXE調用的動態鏈接庫,其格式一般為:
        
        …
        
        [MMCPL]
        
        uniqueName=D:\PROJECT1.DLL(這里假設PROJECT1為用戶編寫的控制面板組板文件
        
        名,其訪問路徑可由讀者自行確定)
        
        …
        
        采用此方法,PROJECT1.DLL不必存放在C:\WINDOWS\SYSTEM\目錄下,擴展名不必改為CPL.CONTROL.EXE運行后按以下順序調用這些動態鏈接庫:
        
        在C:\WINDOWS\SYSTEM\目錄下調用MAIN.INI.
        
        已加載并輸出CplApplet()函數的可安裝驅動程序。
        
        在CONTROL.INI[MMCPL]節中指定的DLL.
        
        在C:\WINDOWS\SYSTEM\目錄下調用CPL.
        
        因此,編寫控制面板組件近似于編寫普通DLL.通常一個CPL支持控制面板中的一個組件(即一個圖標),也可支持多個組件。本文介紹利用Delphi編寫CPL、擴充控制面板組件(一個CPL支持一個或多個組件)的方法。
        
        二、控制面板組件工作流程
        
        1、每個CPL文件必須輸出一個CplApplet函數,與CONTROL.EXE之間傳遞、處理消息。CplApplet函數的原形是:
        
        type
        
        TCPLApplet = function (hwndCPl: THandle; uMsg: DWORD;
        
        lParam1, lParam2: Longint): Longint; stdcall;
        
        其中,hwndCPl是控制面板窗口句柄,uMsg是消息標識,lParam1、lParam2是兩個附加參數,具體意義視uMsg的值而定。
        
        2、當CONTROL.EXE把各CPL(或DLL)調入內存時,CONTROL.EXE立刻向CPLApplet發送一條CPL_INIT消息,要求CPL執行全局初始化并分配內存。CPL_INIT是唯一可以返回調用失敗的消息。如果初始化成功,CPL返回非零,否則返回零。如果CPL返回零,控制面板終止與CPL通信并卸載此CPL(或DLL)。
        
        3、CPL_INIT消息處理結束后,CONTROL.EXE立刻向CPLApplet發送一條CPL_GETCOUNT消息,CPL返回支持的組件數。
        
        4、CPL_GETCOUNT消息處理結束后,CONTROL.EXE立刻向CPLApplet發送一條CPL_NEWINQUIRE消息,CPL_NEWINQUIRE每次發送一條,以取得每個組件的圖標、名稱、提示內容(顯示在控制面板的狀態欄)等信息。lParam1是指定對話框的數值,該值應在0到(CPL_GETCOUNT - 1)之間。如果CPL_NEWINQUIRE處理成功,返回0.
        
        說明:
        
        ◆在Windows3.X系統中,CONTROL.EXE發送的是CPL_INQUIRE消息。為向下兼容,該消息被保留。基于Win32的CPL應使用CPL_NEWINQUIRE.
        
        ◆通過判斷lParam1的值,可對一個CPL支持的多個組件的圖標、名稱、提示內容等進行控制。
        
        5、控制面板顯示所有查找到的組件圖標。鼠標雙擊任一組件圖標,控制面板向其CPL發送一條CPL_DBLCLK消息,CPL顯示相應對話框,供用戶改變系統設置。
        
        說明:
        
        ◆通過檢測lParam1的值,可判斷用戶雙擊的是一個CPL支持的多個組件中的哪個圖標,并運行相應程序。
        
        6、控制面板關閉時,向每個組件發送一條CPL_STOP消息,然后對每個CPL發送一條CPL_EXIT消息,CPL釋放內存并卸載。
        
        三、控制面板組件編寫實例
        
        1、編程步驟:
        
        在Delphi IDE中選取菜單File-New-DLL-OK.
        
        ②在Project1中添加如圖所示Form1、Form2……,根據需要設計窗體界面。為簡略起見,本文僅以Form1為例。
        
        ③Form1主要代碼:(為編寫基于Win32的CPL,本文以讀寫Windows注冊表為例)
        
        在uses子句添加:Registry.//引用注冊表單元
        
        在type部分聲明變量:
        
        var
        
        Form1: TForm1;
        
        KeyHandle : HKEY;
        
        ValSize : longint;
        
        Option1 : Integer;
        
        Option2 : Integer;
        
        TForm1.FormActivate代碼://打開Windows注冊表,讀取某特定鍵值
        
        procedure TForm1.FormActivate(Sender: TObject);
        
        begin
        
        RegOpenKeyEx(HKEY_CURRENT_CONFIG,
        
        'Software\Microsoft\windows\CurrentVersion\',
        
        0, KEY_ALL_ACCESS, KeyHandle);
        
        ValSize := SizeOf(Option1);
        
        RegQueryValueEx(KeyHandle,'WinA', nil, nil, @Option1,
        
        @ValSize);
        
        ValSize := SizeOf(Option2);
        
        RegQueryValueEx(KeyHandle,'WinB', nil, nil, @Option2,
        
        @ValSize);
        
        with Form1 do begin
        
        case Option1 of
        
        0: RadioGroup1.ItemIndex:=0;
        
        1: Radiogroup1.ItemIndex:=1;
        
        2: Radiogroup1.ItemIndex:=2;
        
        3: Radiogroup1.ItemIndex:=3;
        
        end;
        
        case Option2 of
        
        0: Radiogroup2.ItemIndex:=0;
        
        1: Radiogroup2.ItemIndex:=1;
        
        2: Radiogroup2.ItemIndex:=2;
        
        3: Radiogroup2.ItemIndex:=3;
        
        end;
        
        end;
        
        end;
        
        TForm1.CancelClick代碼://關閉Form1,返回控制面板
        
        procedure TForm1.CancelClick(Sender: TObject);
        
        begin
        
        close;
        
        end;
        
        TForm1.ApplyClick代碼://設置注冊表鍵值
        
        procedure TForm1.ApplyClick(Sender: TObject);
        
        begin
        
        with Form1 do begin
        
        Option1:=Radiogroup1.ItemIndex;
        
        Option2:=Radiogroup2.ItemIndex;
        
        end;
        
        RegSetValueEx(KeyHandle,'WinA', 0, REG_BINARY, @Option1, SizeOf(Option1));
        
        RegSetValueEx(KeyHandle,'WinB', 0, REG_BINARY, @Option2, SizeOf(Option2));
        
        end;
        
        TForm1.FormClose代碼://關閉注冊表
        
        procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
        
        begin
        
        RegCloseKey(KeyHandle);
        
        end;
        
        ④修改Project1代碼如下:
        
        library Project1;
        
        uses
        
        Cpl,
        
        Windows,
        
        Forms,
        
        Unit1 in 'Unit1.pas' {Form1},
        
        Unit2 in 'Unit2.pas' {Form2};
        
        {$R *.RES}
        
        procedure ExecuteApp;
        
        {$E dll}
        
        begin
        
        Application.Initialize;
        
        Application.CreateForm(TForm1, Form1);
        
        Application.Run;
        
        end;
        
        procedure ExecuteApp2;
        
        {$E dll}
        
        begin
        
        Application.Initialize;
        
        Application.CreateForm(TForm2, Form2);
        
        Application.Run;
        
        end;
        
        function CPlApplet(hwndCPl: THandle; uMsg: DWORD;
        
        lParam1, lParam2: LongInt):LongInt;stdcall;
        
        var
        
        NewCplInfo:PNewCplInfo;
        
        begin
        
        Result:=0;
        
        case uMsg of
        
        CPL_INIT:
        
        Result:=1;
        
        CPL_GETCOUNT:
        
        Result:=2;
        
        CPL_NEWINQUIRE:
        
        begin
        
        NewCplInfo:=PNewCplInfo(lParam2);
        
        with NewCplInfo^ do
        
        begin
        
        dwSize:=SizeOf(TNewCplInfo);
        
        dwFlags:=0;
        
        dwHelpContext:=0;
        
        lData:=0;
        
        if lParam1=0 then
        
        begin
        
        szName:=‘新的控制面板組件';
        
        hIcon:=LoadIcon(HInstance,'ICON’);
        
        szInfo:=‘這是一個嘗試';
        
        end
        
        else
        
        begin
        
        szName:=’新的控制面板組件2';
        
        hIcon:=LoadIcon(HInstance,'ICON2‘);
        
        szInfo:=’這是一個嘗試2';
        
        end;
        
        szHelpFile:='';
        
        end;
        
        end;
        
        CPL_DBLCLK:
        
        begin
        
        if lParam1=0 then
        
        ExecuteApp
        
        else
        
        ExecuteApp2;
        
        end;
        
        else Result:=0;
        
        end;
        
        end;
        
        exports
        
        CPlApplet;
        
        begin
        
        end.
        
        ⑤選取菜單Project桹ptions桝pplication,在Target file extension中輸入:DLL.在Load Icon中選擇DLL圖標。
        
        ⑥選取菜單Run桺arameters,在Host application中選擇一主程序。例如:D:\PROGRAM FILES\BORLAND\DELPHI3\HELP\TOOLS\HCW.EXE.
        
        ⑦按F9運行程序,生成Project1.dll.
        
        ⑧將Project1.dll改名為Project1.cpl,存入C:\WINDOWS\SYSTEM\目錄下。或者,在CONTROL.INI的[MMCPL]中添加:
        
        uniqueName=D:\PROJECT1.DLL(具體視DLL所在路徑而定)
        
        ⑨啟動控制面板,可以看到③中指定的圖標(一個或多個)已出現在控制面板中,鼠標雙擊圖標,彈出相應的Form1、Form2……
        
        說明:
        
        編程時也可將有關參數存放在某一INI文件中,操作方法不再贅述。
        
        其它應用程序可通過操作INI文件或Windows注冊表得到所需參數。
        
        ◆本文所述編寫DLL方法同樣適用于VC、BC、C++Builder等開發工具,但應注意語法、變量、函數原型等不同要求。
        
        以上程序在Delphi3.0/4.0、簡體中文Windows 95/NT/98環境中調試通過。
        
        一九九九年五月十日
        
        作者通信地址:(230031)安徽省合肥市炮兵學院研究生系97級 張建軍(收)
        
        作者電話: 0551-5560324(張建軍宿舍)
        
        0551-5562566轉68750、68210(研究生系值班室)
        
        作者Email: **

      【利用Delphi編寫Windows控制面板組件及實例】相關文章:

      利用Delphi全面控制Windows任務欄08-06

      在Delphi中巧用Windows 的API函數08-06

      利用TDC組件實現對WEB頁面的交互操作08-06

      利用Delphi 3.0開發微機數據采集與處理軟件系統04-12

      Delphi拖放編程08-06

      硬件密碼組件與軟件密碼組件的比較研究08-06

      DELPHI報表的動態生成08-06

      利用注冊表對WINDOWS 98進行管理與維護08-06

      利用C Builder自定義Windows窗體“系統菜單”08-09

      主站蜘蛛池模板: 色九月亚洲综合网| 成全影视大全在线观看| 亚欧美日韩香蕉在线播放视频 | 精品黄色av一区二区三区| 久久久久亚洲av成人网址| 青青草原国产AV福利网站| 国产综合久久99久久| 国产一区二区一卡二卡| 国产二区三区不卡免费| 色猫咪av在线网址| 久久精品国产99久久久古代| 日本道不卡一二三区视频| 自拍偷自拍亚洲精品情侣| 亚洲乱码一区二区三区视色| 国产目拍亚洲精品区一区| 国产精品综合色区在线观| 国产在线无码精品无码| 久久av无码精品人妻出轨| 高潮迭起av乳颜射后入| 国产亚洲精品成人aa片新蒲金| 狠狠色丁香婷婷综合尤物| 人妻精品动漫h无码| 亚洲成在人线AⅤ中文字幕| 天美传媒xxxxhd videos3| 成在人线av无码免费高潮水老板| 国产精品一区二区久久不卡| 一二三四免费中文字幕| 无码天堂亚洲国产AV| 日本一高清二区视频久二区| 日本熟妇XXXX潮喷视频| 日韩精品亚洲专在线电影| 欧美高清狂热视频60一70| 日本一区不卡高清更新二区| 亚洲AVAV天堂AV在线网阿V| 免费无码成人AV片在线| 人人人澡人人肉久久精品| 日本大片免A费观看视频三区| 国产成人综合在线女婷五月99播放| 在线看无码的免费网站| 国产不卡一区二区四区| 欧洲一区二区中文字幕|