全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:866
推到 Plurk!
推到 Facebook!

Form1 呼叫 Form2 ,但是 Form2 的物件無法釋放???

尚未結案
eric888
一般會員


發表:9
回覆:3
積分:2
註冊:2004-09-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-14 13:01:06 IP:220.130.xxx.xxx 未訂閱
我在Project中建立 Form1及Form2,由Form1 呼叫 Form2 Form2->ShowModal(); 在Form2上有動態產生Timage,畫完後要結束Form2回到Form1 但是再次 呼叫Form2->ShowModal(); 結果Form2上動態產生Timage,上次畫的內容未被清除 如何才可以完全釋放???
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-14 20:47:46 IP:203.204.xxx.xxx 未訂閱
Hi~eric888 試試這個方法~  
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  Image->Canvas->Brush->Color=clWhite;//或改為form2的顏色
  Image->Canvas->FillRect(Rect(0,0,Image->Width,Image->Height));
}
 
其實你的問題有個語病~你可能認為form2~close後即釋放掉了~其實不然~ 你可以看成form2只是隱藏掉了~所以你在form2上的元件並沒有釋放掉~ 當你再次開啟form2時~上面的元件其實還是"原班人馬"~所以上面的例子~ 只是將Image~Brush成白色~如果你要每次開啟都重建Image應當將 Image給free()掉 發表人 - rogan321 於 2005/02/14 20:58:54
eric888
一般會員


發表:9
回覆:3
積分:2
註冊:2004-09-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-15 01:02:15 IP:61.230.xxx.xxx 未訂閱
form2->close後只是隱藏,form2上的元件並沒有釋放掉,我已知 我在Form2有 10個動態產生的TImage元件及其他元件, 如果要每次開啟Form2在哪一個Event可以初始化元件???? 或真正將Form2 釋放????
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-15 05:50:41 IP:211.74.xxx.xxx 未訂閱
//設定Form2的OnClose事件
void __fastcall TForm2::FormClose(TObject *Sender,TCloseAction &Action)
{
  Action = caFree;
}
Form裡的Action屬性,Action屬性是用來決定是否真的要關閉視窗,這個設定值一般會在OnClose事件裡發生效果,Action參數的內容: 1.caNone:表示視窗不被允許關閉,所以將不會有任何的改變。 2.caHide:就是視窗將被隱藏起來,但是所謂的隱藏就是沒有真正的關閉,所以應用程還是可以對於該Form裡的元件和參數做動作。 3.caFree:這個設定動作將會把Form給關閉起來,而在關閉之後並把所有配置給該Form的記憶體全數歸還給系統。
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-15 15:04:33 IP:203.204.xxx.xxx 未訂閱
 
#include 
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
//--------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
TImage *Image;
//--------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//--------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
   HDC ScreenDC=GetDC(0);
   Graphics::TBitmap *bitmap = new Graphics::TBitmap();
   bitmap->PixelFormat = pf24bit;
   bitmap->HandleType = bmDIB;
   bitmap->Width = 100 ;
   bitmap->Height = 100 ;
 StretchBlt(bitmap->Canvas->Handle,0,0,100,200,ScreenDC,0,0,100,100,SRCCOPY);
   Image->Canvas->Draw(10,10,bitmap);
   delete bitmap;
}
//--------------------------------------------------------------------
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{  //在FormClose事件中毀滅元件
   delete Image;
}
//--------------------------------------------------------------------
void __fastcall TForm2::FormShow(TObject *Sender)
{   //在FormShow事件中初始元件
   Image=new TImage(Application);
   Image->Parent=Form2;
   Image->Height=200;
   Image->Width=200;
   Image->Left=10;
}
cashyy: "Action = caFree..."此方法為針對MDI視窗的處理才可之~否則記憶體會不正常配置
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-15 22:50:54 IP:59.104.xxx.xxx 未訂閱
感謝rogan321大大指導!請問大大,何為MDI?
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-17 14:43:50 IP:220.130.xxx.xxx 未訂閱
Multi-documents interface
系統時間:2024-05-19 7:57:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!