學習目標
瞭解事件的常用類型 學習過程和函數的定義 瞭解調試程式 瞭解單元程式的結構
正文
上篇大致給大家介紹了下控制項及控制項的屬性 定義 參雜的介紹了些變數的定義 及變數的作用域
本篇主要介紹事件 過程 和函數
那麼什麼是事件呢?
從上兩篇所講的我們知道
屬性是一個物件的性質,方法就是物件的動作,那事件就是物件的響應。
在上兩篇的例子中我們雙擊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 有所幫助! |