線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:764
推到 Plurk!
推到 Facebook!

取得Controls父代類別名稱所產生的錯誤?

尚未結案
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-08 09:44:07 IP:61.226.xxx.xxx 未訂閱
如題:
.h
public:                // User declarations
       void __fastcall ActiveControlChange(System::TObject *Sender);
.cpp
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   Screen->OnActiveControlChange = ActiveControlChange;
}
//-----------取得Form上頭繼承至TWinControl 之Controls父代類別名稱
void __fastcall TForm1::ActiveControlChange(System::TObject *Sender)
{
   TWinControl *src;
   Memo1->Clear();     //<-錯誤所指位址
   if ((src = dynamic_cast (ActiveControl)) != NULL)
   {
     //TClass cls = src->ClassType();
     TClass cls = src->ClassParent();
     while (cls != NULL)
     {
        Memo1->Lines->Add(cls->ClassName()); //<-錯誤所指位址
        cls = cls->ClassParent();
     }
   }
}
用以上程式碼所生成的執行檔(關閉時)會產生以下的錯誤訊息 "0x........."指令參考的"0x........."記憶體。該記憶體不能為"read" 各位先進:這樣的錯誤問題出在那裡?如何修正? ◎天長地久有時盡,追求知識無絕期!
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-08 22:16:18 IP:61.60.xxx.xxx 未訂閱
引言: 如題:
.h
public:                // User declarations
       void __fastcall ActiveControlChange(System::TObject *Sender);
.cpp
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   Screen->OnActiveControlChange = ActiveControlChange;
}
//-----------取得Form上頭繼承至TWinControl 之Controls父代類別名稱
void __fastcall TForm1::ActiveControlChange(System::TObject *Sender)
{
   TWinControl *src;
   Memo1->Clear();     //<-錯誤所指位址
   if ((src = dynamic_cast (ActiveControl)) != NULL)
   {
     //TClass cls = src->ClassType();
     TClass cls = src->ClassParent();
     while (cls != NULL)
     {
        Memo1->Lines->Add(cls->ClassName()); //<-錯誤所指位址
        cls = cls->ClassParent();
     }
   }
}
用以上程式碼所生成的執行檔(關閉時)會產生以下的錯誤訊息 "0x........."指令參考的"0x........."記憶體。該記憶體不能為"read" 各位先進:這樣的錯誤問題出在那裡?如何修正? ◎天長地久有時盡,追求知識無絕期!
Memo已釋放但事件還存在!! 於事件OnDestroy釋放OnActiveControlChange事件 Screen.OnActiveControlChange = NULL; 學而時習之不亦樂乎!
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-09 00:59:08 IP:61.226.xxx.xxx 未訂閱
jest0024您好: 真是感謝,問題解決了! 可否容我再問,按此範例ActiveControlChange(焦點轉移/Next Controls),修改成攔截訊息來實做,系統會送出何種訊息? 比如: if (Message.Msg == WM_ENDSESSION) ShowMessage("使用者按了螢幕左下角 [關機] 指令"); 或 if (Message.Msg == WM_SYSCOMMAND) { if (Message.WParam== SC_CLOSE) //若Message為 Close Window { ShowMessage("使用者按了程式右上角 [X] 按鈕"); } } 諸如此類的訊息,我想知道的是焦點轉移會送出何種訊息代碼,還望不吝教導,在此先謝過! ◎天長地久有時盡,追求知識無絕期!
系統時間:2024-05-19 18:33:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!