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