導航:首頁 > 編程語言 > delphi編程入門教程

delphi編程入門教程

發布時間:2025-02-25 15:45:54

① DELPHI基礎教程:Delphi自定義部件開發(三)[3]

控制Delphi是否存儲屬性的方法是在屬性聲明後面加stored指令 後跟True或False 或者是布爾方法名 你可以給任何屬性的聲明或重聲明加stored表達式 下面的代碼顯示了部件聲明三種新屬性 一個屬性是總是要存儲 一個是不存 第三個則決定於布爾方法的值

type

TSampleCompiment = class(TComponent)

protected

function storeIt: Boolean;

public { 正常情況下在不存 }

property Important: Integer stored True; { 總是存儲 }

published { 正常情況下保存 }

property UnImportant: Integer stored False; { 不存 }

property Sometimes: Integer stored StoreIt; { 存儲依賴於函數值 }

end;

④ 載入後的初始化

在部件從存儲的描述中讀取所有的屬性後 它調用名為Loaded的虛方法 這提供了按需要執行任何初始化的機會 調用Loaded是在窗體和它的控制顯示之前 因此 不需要擔心初始化會帶來屏幕閃爍

在部件載入屬性時初始化它 要覆蓋Loaded方法

在Loaded方法中 要做的第一件事是調用繼承的Loaded方法 這使得在你的部件執行初始化之前 任何繼承的屬性都已初始化

下面的代碼來自於TDatabase部件 在裝入後 TDatabase試圖重建在它存儲時已打開的連接 並描述在連接發生異常時如何處理

procere TDatabase Loaded

begin

inherited Loaded; { 總是先調用繼承的方法 }

Modified; { 設置內部標志 }

try

if FStreamedConnected then Open; { 重建聯接 }

except

if csDesigning in ComponentState then { 在設計時 }

Application HandleException(self) { 讓Delphi處理異常 }

else raise; { 否 則 }

end;

end;

Delphi部件編程實例

創建資料庫相關的日歷控制 TDBCalendar

當處理資料庫聯接時 將控制和數據直接相聯是很重要的 就是說 應用程序可以建立控制與資料庫之間的鏈 Delphi包括了數據相關的標簽 編輯框 列表框和柵格 用戶可以使自己的控制與數據相關

數據相關有若乾等級 最簡單的是只讀數據相關或數據瀏覽 以及反映資料庫當前狀態的能力 比較復雜的是數據相關的編輯 也即用戶可以在控制上操作資料庫中的數據

在本部分中將示例最簡單的情況 即創建聯接資料庫的單個欄位的只讀控制 本例中將使用Component Palette的Samples頁中的TCalendar部件

創建數據相關的日歷控制包括下列幾步

● 創建和注冊部件

● 使控制只讀

● 增加數據聯接(Data Link)

● 響應數據改變

創建和注冊部件

每個部件的創建都從相同的方式開始 在本例中將遵循下列過程

● 將部件庫單元命名為DBCal

● 從TCalendar繼承一個新部件 名為TDBCalendar

● 在Component Palette的Samples頁中注冊TDBCalendar

下面就是創建的代碼

unit DBCal;

interface

uses SysUtils WinTypes WinProc Messages Classes Graphics Controls

Forms Grids Calendar;

type

TDBCalendar=class(TCalendar)

end;

procere Register;

implementation

procere Register;

begin

RegisterComponents(Samples [TDBabendar])

end;

end

使控制只讀

因為這個數據日歷以只讀方式響應數據 所以用戶不能在控制中改變數據並指望它們反映到資料庫中

使日歷只讀包含下列兩步

● 增加只讀屬性

● 允許所需的更新

增加只讀屬性

給日歷控制增加只讀選項是直接過程 通過增加屬性 可以提供在設計時使控制只讀的方法 當屬性值被設為True 將使控制中所有元素不可被選

⑴ 增加屬性聲明和保存值的private域

type

TDBCalendar=class(TClendar)

private

FReadOnly: Boolean;

public

constructor Create (Aowner: TComponent) override;

published

property ReadOnly: Boolean read FReadOnly write FReadOnly default True;

end;

constructor TDBCalendar Create(Aowner: TComponent)

begin

inherited Create(AOwner)

FReadOnly := True;

end;

⑵ 覆蓋SelectCell方法 使得當控制是只讀時 不允許選擇

function TDBCalendar SelectCell(ACol Arow: Longint) Boolean;

begin

if FReadOnly then

Result := False

else

Result := inherited SelectCell(Acol ARow)

end;

還要在TDBcalendar的聲明中聲明SelectCell

如果現在將Calendar加入窗體 會發現部件完全忽略滑鼠和擊鍵事件 而且當改變日期時 也不能改變選擇的位置 下面將使控制響應更新

允許所需的更新

只讀日歷使用SelectCell方法實現各種改變 包括設置Row和Col的值 當日期改變時 UpdateCalendar方法設置Row和Col的值 但因為SelectCell不允許你改變 即使日期改變了 選擇仍留在原處

可以給日歷增加一個Boolean標志 當標志為True時允許改變

type

TDBCalendar=class(TCalendar)

private

Fupdating: Boolean;

protected

function SelectCell(Acol Arow: Longint) Boolean; override;

public

procere UpdateCalendar; override;

end;

function TDBCalendar SelectCell(ACol ARow: Longint) Boolean;

begin

if (not FUpdating) and FReadOnly then

Result := False { 如果更新則允許選擇 }

else

Result := inherited SelectCell(ACol ARow) { 否則調用繼承的方法 }

end;

procere UpdateCalendar;

begin

FUpdating := True; { 將標志設為允許更新 }

try

inherited UpdateCalendar; { 象通常一樣更新 }

finally

FUpdating := False; { 總是清除標志 }

end;

end;

現在日歷仍舊不允許用戶修改 但當改變日期屬性時能正確反映改變 目前已有了一個真正只讀控制 下一步是增加數據瀏覽能力

增加數據聯接

控制和資料庫的聯接是由一個名為DataLink的對象處理 Delphi提供了幾種類型的Datalink 將控制與資料庫單個域相聯的DataLink對象是TFieldDatalink Delphi也提供了與整個表相聯的DataLink

一個數據相關控制擁有DataLink對象 就是說 控制負責創建和析構DataLink

要建立作為擁有對象的Datalink 要執行下列三步

● 聲明對象域

● 聲明訪問屬性

● 初始化DataLink

⑴ 聲明對象域

每個部件要為其擁有對象聲明一個對象域 因此 日歷對象DataLink 聲明TFieldDataLink類型的域

日歷部件中DataLink的聲明如下

type

TDBCalendar = class(TSampleCalendar)

private

FDataLink: TFieldDataLink;

end;

⑵ 聲明訪問屬性

每一個數據相關控制有一個DataSource屬性 該屬性描述應用程序給控制提供數據的數據源 而且 訪問單個域的資料庫還需要一個DataField 屬性描述數據源中的域

lishixin/Article/program/Delphi/201311/25115

② Delphi基礎教程圖文版之數組

數組是 Delphi 中一種應用時間最長、范圍最大的容器類型,了解其定義格式、應用實例、注意事項、特殊用法及一維、多維數組等概念對掌握 Delphi 編程至關重要。

數組定義時,方括弧中填入子界類型的值或常量來指定可能的下標值。例如,定義一個包含 24 個整數的數組:

數組定義如下,其中子界類型指定了有效索引范圍,簡化了下標值的使用,Delphi 可以對它們進行范圍檢查,防止編譯或運行時錯誤。

定義定長數組時,長度在聲明時確定,下標不必從零開始,如定義一個起始序號為 2、步長為 1 的數組。

定長數組的起始序號並非必須為零,如定義一個起始序號為 2 的數組,但步長不能改變。

使用有序數類型作為數組序號,但使用時必須與聲明類型一致。例如,定義一個變數並使用錯誤序號賦值。

注意數組定義方式需要使用 const 關鍵字修飾,並了解與枚舉類似的概念。

動態數組是在運行時動態分配內存改變大小的數組,聲明時沒有指定長度。在使用之前必須明確聲明其長度。

動態數組的長度可以通過 Length() 函數獲取,返回值為 Integer 類型。

在使用動態數組時,使用 Low() 和 High() 函數檢測數組邊界,這些函數返回數組序號類型的下界和上界,確保代碼與數組范圍無關,便於維護和更新。

低開銷系統函數如 Low()、High() 和 Length() 在編譯時轉換為常數表達式,不會增加運行時開銷。

總之,理解數組的概念、定義、應用和注意事項是 Delphi 編程的基礎。正確使用數組,尤其是在循環中結合 Low() 和 High() 操作,能夠提高代碼的可維護性和穩定性。

閱讀全文

與delphi編程入門教程相關的資料

熱點內容
中山雲存儲伺服器 瀏覽:684
google蜂鳥演算法 瀏覽:940
為什麼程序員這么受人詬病 瀏覽:99
linuxgtk編程 瀏覽:253
迪拜用什麼app打車 瀏覽:632
java字元串不轉義 瀏覽:308
ug編程頁面教學 瀏覽:552
mvccmsphp 瀏覽:178
閑置電腦如何自己搭建伺服器 瀏覽:123
安卓本機內核編譯環境 瀏覽:631
巴克球解壓汽車 瀏覽:466
androidsdk無法啟動 瀏覽:208
產品經理設計師程序員 瀏覽:264
ug編程模板下載 瀏覽:945
安卓手機的相冊自拍怎麼拍 瀏覽:781
怎麼把pds轉換成文件夾 瀏覽:306
蘋果關閉app了為什麼還運行 瀏覽:702
android視頻背景 瀏覽:449
編譯中的app 瀏覽:292
伺服器路由器是干什麼的 瀏覽:59