Delphi實現無窮無盡關不掉的對話框,整人程序啊。例如,當你訪問某一種網頁時,他會彈出無數的對話框,讓你一個勁地點下去,一直進行到幾十次,弄得你沒有脾氣。這究竟是什麼原因呢?通過下面的例子,我們便會對這個問題有一個全面的了解。我們用Delphi 來編寫一個這樣效果的可執行性程序。運行它後,會彈出一個又一個的對話框,直到最後一個對話框出現為止。這期間你無法關閉該程序,因為它屏蔽了“Ctrl+Alt+Delete”組合鍵。程序運行界面:
設計思想:本程序主要是在窗體的OnCreate 事件中,添加一系列對話框函數,並在每個對話框中給出設計的各種信息。同時調用相關的Windows API 函數來實現屏蔽系統的“Ctrl+Alt+Delete”組合鍵。
設計步驟:這個關不盡的對話框窗口首先通過一系列對話框函數實現生成對話框功能。InputBox(),ShowMessage(),InputQuery(),MessageDlg(),MessageDlgPos()等函數都可以實現產生對話框的功能。還需要調用Windows API 函數中的“系統”ParametersInfo 來實現屏蔽和恢復系統的功能鍵。
1.新建工程
(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。
(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。
(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。
2.修改窗口
(1)激活Form1 窗口,在“屬性”中設置該窗體的Caption 屬性為“教你整人”,Color 屬性設置為“clBtnFace”。
(2)在構件選項板上選擇“標准”頁上的Label 選項,將鼠標移到窗口中點擊,生產Label 控件,用鼠標調整其合適的大小和在窗體上的位置。
(3)選擇“標准”頁上的Button 選項,在窗體中添加一個按鈕,調整其合適的大小。在“屬性”中將其Caption 屬性分別設置為“退出”。
代碼分析:
(1)首先在程序啟動時屏蔽系統的功能鍵。
var temp:integer; begin SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @temp, 0); end;
(2)然後通過各種對話框函數,使產生主窗體之前生成一系列對話框。這些對話框函數應該添加在窗體的OnCreate 事件中。
procedure TForm1.FormCreate(Sender: TObject); var result:boolean; New String:string; dir:string; SELDIRHELP:integer; begin InputBox(’輸入你的IP 地址’, ’提示: ’,’輸入你的IP 地址’); showmessage(’你的計算機已被我控制,趕快關機!’); showmessage(’如果你不想關機,你必須按照我的要求來做!’); showmessage(’准備好了嗎?准備好了,我們就開始了!’); InputQuery(’Input Box’, ’趕快輸入你的姓名: ’, “新建”String); MessageDlg(’你的用戶名無效!!!’, mtInFormation,[mbOk], 0); showmessage(’你必須填寫你的真實資料!’); InputQuery(’Input Box’, ’趕快輸入你的姓名: ’, “新建”String); InputQuery(’Input Box’, ’趕快輸入你的姓名: ’, “新建”String); MessageDlgPos(’確認這是你的用戶名嗎?’,mtConfirmation, mbYesNoCancel, 0, 200, 200); InputBox(’輸入你的操作系統名稱’, ’提示: ’,’輸入你的操作系統名稱’); MessageDlg(’你必須輸入你的真實操作系統名稱!!!’, mtInFormation,[mbOk], 0); MessageDlgPos(’確認這是你的操作系統名稱嗎?’,mtConfirmation, mbYesNo_ Cancel, 0, 200, 200); showmessage(’下一步一定要找出你的系統文件位置’); Dir := ’C:\Windows’; SELDIRHELP:=1000; SelectDirectory(Dir, [sdAllowCreate, sdPerFormCreate, sdPrompt],SELDIRHELP); Label1.Caption:=’不要輕易向別人洩漏你的IP 哦!’; //產生最後一個窗體時 為Label1 賦值並設置其顏色 Label1.Font.Size:=18; Label1.Font.Color:=clred; end;
(3)當最後一個窗體生成後,點擊其中的“退出”按鈕,可以實現輸出信息、關閉窗口和取消系統功能鍵的屏蔽。
procedure TForm1.Button1Click(Sender: TObject); var temp:integer; begin showmessage(’這麼輕易就走了?’); close; SystemParametersInfo( SPI_SCREENSAVERRUNNING, 0, @temp, 0); end;
下面來看完整的程序代碼(Delphi無窮無盡關不掉的對話框):
vIEw source