国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

BCB中實現動態創建組件

2019-11-17 05:24:51
字體:
來源:轉載
供稿:網友

  BCB中實現動態創建組件 ch_builder (原作)
(僅供CSDN和ccrun.com使用,其他使用者請與作者聯系)

BCB中提供了大量的VCL組件,有時難免要在程序中動態創建組件,VCL是用Object Pascal寫的,她與C++語言還是存在著一些不同點的,要把握正確的方法,不防我們先來看一下棧(stack)與堆(heap)的關系。

棧(stack)是存放函數的所有動態局部變量及函數調用和返回的有關信息的一塊內存。棧的內存治理嚴格遵循先進后出的順序,這一點正是實現函數調用所需要的。從棧中分配內存效率非凡高。數據對象使用棧中的內存(如動態局部變量)比使用堆中內存會使程序運行更快。

堆(heap)是供malloc()、calloc()、realloc()和new等函數獲取內存空間的一塊內存。從堆中獲取內存比從棧中要慢得多,但堆的內存治理卻比棧靈活得多,任何時候你都可以從堆中獲取(或釋放)內存,我們可以按任意順序進行。用來存放遞歸數據結構的內存幾乎都要從堆中獲取。用來存放字符串的內存通常也從堆中獲取,尤其是對那些在程序運行時可能出現的很長的字符串。

從堆中獲取的內存要用free()、delete來釋放,它本身不會自動釋放。

C編譯的程序能產生如此優質的代碼、程序運行的快速與對棧的正確運用是有關的,但Object Pascal中所有的對象都只能建構于堆中,無法和C++一樣,能夠在棧(在函數內創建類的對象)、數據區段(在函數外創建類的對象)、堆(用new等函數來創建類的對象)三種地方建立對象,所以VCL類的對象我們只能在堆中創建。

如創建一個按鈕對象,我們可以這樣來創建:

TButton *BTnMy= new Tbutton(From1);

可以寫成如下程式:類名  *對象名=new 類名(…);

注重:()里面可以是你已創建的該類對象的父類名字、工程的名字、NULL或this。但最好是對象的父類名。

例:動態生成按鈕

我們先在窗體(Form1)上,放一個按鈕Button1,在他的單擊事件中寫上如下代碼:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

     TButton *my=new TButton(Form1);

     my->Parent=Form1;//最為要害的一句,否則你將看不到什么,但編譯卻是正確的

     my->Top=200;

     my->Left=200;

     my->Height=25;

     my->Width=75;

     my->Caption="I'm Button!";

     //my->Visible=true;此語句可有可無,因為他的父類通常默認他可見

}

通過這個例子我們應該清楚的看出動態創建組件的幾個重要步驟:

1)要一個空間(內存);// TButton *my=new TButton(Form1);

2)指定其父組件,說直接了就是我們要創建的這個對象要放在那個容器上;//     my->Parent=Form1;

3)指定組件要出現在父類的那個位置;//my->Top=200;my->Left=200;my->Height=25; my->Width=75;所以這個屬性你一定要設置好位置;

4)其它重要屬性。// my->Caption="I'm Button!";

并且其順序不能反了,否則你的程序會出笑話的。

在動態生成非寶蘭VCL原有的組件時要加上對應的頭文件。如,我們要動態生成報表組件一定要加入:

#include  “Qrctrls.hpp”//若還有問題,你還要加入:

#include “QuickRpt.hpp”

另外由于BCB對內存治理或與系統、硬件的沖突,你的動態創建程序也許一點錯誤都沒有,但就是編譯不了;有時也許第一次通過了,第二次一樣的程序卻通過不了,出現這樣那樣的提示,最簡單的辦法就是注銷一下系統,再試一下,多數就能解決了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大邑县| 北辰区| 尉犁县| 大邑县| 信宜市| 万安县| 平原县| 买车| 肥东县| 达孜县| 安陆市| 禹州市| 平昌县| 凤山县| 遵义县| 叙永县| 友谊县| 蒙城县| 壶关县| 孝昌县| 斗六市| 洮南市| 黔南| 霍林郭勒市| 和田县| 泰来县| 桂阳县| 湘乡市| 南昌县| 丹江口市| 边坝县| 晴隆县| 双牌县| 灌南县| 广东省| 于田县| 耿马| 铅山县| 南川市| 台东市| 汉川市|