黃易群俠傳M脫機外掛應用程式黃易神行
2922
1

事件,函數,過程

mj001415 發表於 2009-3-11 15:46:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |
學習目標

瞭解事件的常用類型 學習過程和函數的定義 瞭解調試程式 瞭解單元程式的結構
正文

上篇大致給大家介紹了下控制項及控制項的屬性 定義 參雜的介紹了些變數的定義 及變數的作用域
本篇主要介紹事件 過程 和函數
那麼什麼是事件呢?
從上兩篇所講的我們知道
屬性是一個物件的性質,方法就是物件的動作,那事件就是物件的響應。
在上兩篇的例子中我們雙擊button1 在代碼區自動添加了幾行代碼


procedure TForm1.Button1Click(Sender: TObject);
begin

end;


procdure 過程

TForm1.Button1 對象名

TForm1.Button1Click 事件類型

begin

end;


語句塊 沒有什麼特別的意義你可以理解成開始和結束 也可以理解成標誌符
意思是中間的代碼是一個整體 也就是一塊的意思
這段代碼的意思是 我們對物件button1物件做了單點擊動作後 物件應該怎麼回應這個動作
如 我們在點擊button1 後 label1 會顯示 “hello world!” 這句代碼
代碼結構如下

procedure TForm1.Button1Click(Sender: TObject);
begin

label1.caption:='hello world!';

end;


當我們對物件的操作發生時 執行將label1的屬性caption 的值賦予hello world!



同樣的我們還是做個小程式,打開 delphi 7.0 很簡單 在表單上畫一個button1 一個label1

實現點擊按鈕 按鈕圖示上的名稱顯示開始再點下名稱顯示暫停 同時上面的label1提示下步操作。
將以下代碼添加到代碼區的end.上方

procedure TForm1.Button1Click(Sender: TObject);
begin
if t then
begin
button1.Caption:='暫停';

label1.caption:='已暫停,再點開點下面按鈕開始';
始';t:=false;
end else
begin
button1.caption:='開始';
t:=true;

label1.caption:='已開始,再點開點下面按鈕暫停';

end;
end;



在編譯指令

{$R *.dfm}

上方的

var
Form1: TForm1;

implementation



中間添加

t:boolean;
全部為

var
Form1: TForm1;
t:boolean;
implementation



好了 我們看看我們寫的對不對 在功能表欄點擊工程功能表欄�堛瑰邠dproject1語法
結果報錯過不去 顯示在這一行
怎麼回事呢?
不得不說些東西了,delphi7.0的所有變數、過程、函數、控制項、事件都必須先聲明後使用
我們可以看看代碼 區 在你剛打開delphi 時 是這樣的
在我們畫了兩個控制項button1 和label1 後

type 下面多了兩個控制項的定義

TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;



意思是定義三個控制項 分別是 表單類型

button類型

label1類型
(liwei2000大哥的代碼時 你就可以理解了 他的表單內都畫了什麼東西)
同樣的 在這��還可以將事件和過程也定義進去
在Label1:TLabel; 低下
寫上

procedure Button1Click(Sender: TObject);



細心的朋友會發現 怎麼和下面的事件語句不一樣?
這個
(procedureTForm1.Button1Click(Sender: TObject);)
這是由於 我們在前面定義了

TForm1 = class(TForm)

所以低下定義的時候不需要重複定義此表單了
再查下有無語法錯誤
好了 這次沒有錯誤了 F9運行下
呵呵完全沒有反應 和我們想像的不一樣!
沒關係 那是因為我們沒有將這個事件與控制項聯繫起來
在物件檢查器中 點物件
看到了嗎?
這�埵C出的都是這個物件的動作
單擊onchick 圖中1箭頭所指位置在後面值中的下拉功能表中 可以看到我們剛才定義的那個事件
選擇
現在再運行 看看是不是就可以了?
在這節中我們瞭解了一個單擊動作 怎麼從有事件代碼 到事件聲明 到與控制項聯繫,還知道了怎麼檢查語法 看完這節觸類旁通的 大家也應該知道怎麼調試別人的原代碼了吧?(複製粘貼,聲明在過程中沒有聲明的變數、過程、 函數、事件等等)
我們繼續
上面介紹了事件 其實事件就本質來講也可以理解成一個控制項可以響應的過程
而過程其實是一個無反回值得函數
我們先從 函數說起
函數是為了某種需要從主程序中分離出的語句塊
目的是為了減輕代碼工作量 增強代碼的可讀性
在介紹函數之前我們先來看看delphi7.0的程式結構

unit Unit1; 單元標頭區 前面是標誌後面是名稱

interface 公共區域 用來聲明和定義並且所聲明和定義的控制項、過程、函數、事件、變數等能被 其他單元所調用

uses uses子句 指名該項目所用到的原始檔案比如常用的windowsSysUtils 等 比如我們寫輔助程式時要用到的一些原始檔案等等
如果你複製別人的代碼 並且保證代碼無誤還出錯 麼你的程式有可能就是這�堥S有聲明了

implementation 私有區 在這個區域內聲明和定義不能被其他單元調用



const 常量聲明區

type 類型聲明區

var 變數聲明區
好了 知道了這些我們再回頭看函數
函數從作用範圍來看 分為公共函數和私有函數 公共函數意思是這段代碼 別的單元和程式也能調用
私有函數 則只能由本單元調用
從函數的定義情況來看 又分為內建函數 和自建函數,內建函數是delphi 7.0本身所帶的函數 不需要定義
自建函數則需要大家自己寫 自己定義 自己聲明
我們來看一個例子
我們點擊按鈕button1 後彈出對話方塊 輸入a b c 然後 edit1中顯示當前輸入的內容
edit2中顯示 當輸入a時顯示 不是我 b 對應 不是你 c 顯示難道是他?
這次我只給出代碼 剩下的請大家參照我上面所講的調試方法自己調試
提示:
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;

這�堨i以看出我都用了哪些控制項
然後將原代碼全部清空 把下面這段代碼粘貼上去
代碼:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;
Function func(m:string):string;
var
Form1: TForm1;

implementation



{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
t:string;
begin
t:=inputbox('輸入數位','請輸入a、b 、c' ,'a');
edit1.Text:='你輸入的是:' + t;
edit2.Text:=func(t);

end;

Function func(m:string):string;
begin
if m='a' then
begin
Result :='哈哈 這不是我';
end else
if m='b' then
begin
Result :='可能是你吧?';
end else
begin
Result :='難道是他?';
end;
end;


end.


說明:

inputbox('輸入數位','請輸入a、b 、c' ,'a');
用處是彈出一個輸入對話方塊 ()中是參數 並且都是字元型 所以用“' '”引號�堶悸漸b形引號括起來
第一個參數是用來設置對話方塊的標題欄
第二個參數是用來設置對話方塊的提示欄
第三個參數是輸入文本中的默認數值
上面代碼中
Function func(m:string):string;
就是一個帶參數的函數
Function 定義一個函數
func 函數名 你可以任意起
(m:string): 定義函數傳入參數的類型 其實也是聲明一個變數 但這個變數的作用是用來傳遞資料給func 這個函數的
:string 定義該函數返回值 的類型
本例中 Functionfunc(m:string):string;
用來判斷 傳入的資料是a ? b?c? 分別返回 一段話 哈哈不是我 可能是你吧? 難道是他
函數定義好後需要在上面的
interface
底下的
type
底下的

public
{ Public declarations }
end;
底下進行聲明
調用時 直接寫這個函數 func(t) 調用 並且不要忘了傳入一個值 t

函數應該有返回值 用來給 其他調用它的程式 一個信號 便於判斷 和操作
返回值 用
Result :=
確定
如果沒有返回值 調用此函數一般情況下也不會報錯
但是一般來說 程式師都喜歡將函數和過程分開便於讀懂程式 和標誌清楚
就上句所說 沒有返回值的函數就叫過程
一般用 procedure 來定義過程
因為 事件也是一個函數過程的定義 和函數的定義一樣
同樣的
procedure func(m:string)
定義到
public
{ Public declarations }
end;
底下
但是由於過程沒有返回值
所以 過程�堶�不能出現 Result :=語句
同樣的 過程沒有返回值
所以調用的時候也不能
edit2.Text:=func(t); 將過程的值賦給另一個變數
直接
func(t);
就可以了
附上 我畫的
總結上三篇:
通過上面三篇文章向大家簡要 介紹了 什麼是面向物件的編程語言 什麼是物件 什麼是屬性 什麼是方法(事件、過程、函數)以及變數的定義 變數的類型、及程式的結構介紹了幾個控制項的用法
怎麼調試程式 以及一些雜七雜八的東西,可能有些疏漏,並且語言也不是很嚴謹,所以請大家原諒。但是只要零起點的朋友能夠照著這個做了,相信一定能有所心得 ,並能瞭解到面向物件語言的編程 到底是在幹什麼有了這個認識
我想到以後能讓你改語言 或者深入研究 delphi 7.0 有所幫助!
收藏收藏 分享分享 讚讚 幹幹 分享分享 FB分享
回覆

使用道具 舉報


souying 該用戶已被刪除
souying 2009-7-9 09:56:41
提示: 作者被禁止或刪除 內容自動屏蔽
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊


手機版 | Archiver | 外掛聯合國

GMT+8, 2026-9-25 07:10 , Processed in 0.046876 second(s), 17 queries , Memcache On.

版權說明:
  本站不會製作、經銷、代理外掛程式。僅免費提供外掛程式下載前之掃毒及掃木馬等安全檢測驗證,協助會員遠離盜號危險程式。本站所有資料均來自網際網路收集整理,說明文字暨下載連結轉載自原程 式開發站。站上出現之公司名稱、遊戲名稱、程式等,商標及著作權,均歸各公司及程式原創所有,本站程式所有權歸外掛聯合國所有。本程式所有權歸外掛聯合國所有.......

回頂部
第二步?
第三步?