黃易群俠傳M脫機外掛應用程式黃易神行
2656
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('輸入數位','請輸入ab 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('輸入數位','請輸入ab 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, 2024-11-22 16:16 , Processed in 0.054968 second(s), 16 queries , Memcache On.

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

回頂部
第二步?
第三步?