一、讓視窗總是在最前面
Form 的FormStyle屬性設定為fsStayOnTop值。
二、 動態調用表單Form
在預設情況下, 由File/New Form產生添加入專案檔中的 表單都具有"Auto Create"(自動建立)的特性。即只要程式運行,該表單就存在於 記憶體中了,不管當前它是否被調用。具有這種特性的表單一般適用於表單內容比較 固定、經常被調用的情況。其優點是速度快,缺點是佔用記憶體。在實際程式設 計中,會遇見大量類似對話方塊功能的表單,它們用於顯示狀態或輸入資訊,僅須在程 序中調用一下,完成其功能就行了,無需常駐記憶體。這時可以通過選擇Project/Options/Forms,將"Auto--Create forms " 欄中相應的表單, 如Form1,用" >" 鍵移動到 "Available forms"欄中,並在程式需調用該表單處,加入下列語句:
TForm1 *myform=new TForm1(this);
myform- >ShowModal();
delete myform;
表單Form1僅是在需要調 用時才調入記憶體,調用完成後,即用delete清除出記憶體。這樣可減少程式對記憶體資源 的佔用。
三、遍曆表單控制項的方法
要訪問或修改表單上的控制項,方法很簡單,以TEdit為例子:
Edit1- >Text="";
Edit2- >Text="";
但如果表單上有十來個像Edit1 這樣的控制項,需要進行相同的初始化,用上面的方法一個一個地進行,豈不麻煩 ! 所以有必要掌握 遍 曆窗 體 控 件 的 方 法。 在 介 紹 該 方 法 之 前, 讓 我 們 先了 解 一 下 窗 體Form 的Components 和Controls 屬 性。 參 見 表 一。
表 一
屬性 類型 說明
ComponentCount Int 目前Form上各類控制項的總數
Components TCompont* 目前Form上指向所有控制項的數組
ControlCount Int 目前Form上某一子領域上各類控制項的總數
Controls TControl* 目前Form上指向某一子領域上所有控制項的數組
Form1的ComponentCount=6, 而Panel1的ControlCount=4.,
其中:數組對象
Components[0] Panel1
Components[1] Label1
Components[2] Edit1
Components[3] Label2
Components[4] Edit2
Components[5] Button1
數 組 對 象
Controls[0] Label1
Controls[1] Edit1
Controls[2] Label2
Controls[3] Edit2
下面這段程式碼完成了對Panel1上所有TEdit 控制項的遍曆初始化。讀者稍加修改,即可對其它控制項進行遍曆。這裡有一個小技巧, 我們把需要進行初始化的控制項放置在了一Panel1上,與不需要初始化的控制項區分開 來,這樣便於編程。
AnsiString namestring="TEdit";
for(int i=1;i< Panel1- > ControlCount;i++)
{
if(Panel1- > Controls[i]- > ClassNameIs(namestring))
{
TEdit *p=dynamic_cast < TEdit* > (Panel1- >Controls[i]);
P->Text="";
}
}
四、不規則視窗
1.在視窗定義中,加入HRGN hWndRgn;
2.在TForm::OnCreate()訊息函數最後,加入下面的代碼:
hWndRgn=::CreateEllipticRgn(0,0,Width,Height);
::SetWindowRgn(hWndRgn,TRUE);
3.設定TForm的屬性為無標題,無邊框。
4.編譯串連應用程式,就可以看到一個橢圓形視窗。
五、MDI Form
1.Application->CreateForm(__classid(Tjjcginput), &jjcginput);
後不用在使用顯示Form的語句就可以顯示出來了。
2.form 的onclose 事件必須用下面語句釋放空間:
void __fastcall TMDIChild::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}