海星
高階會員
發表:41 回覆:217 積分:106 註冊:2003-01-09
發送簡訊給我
|
請問一下,我想建立一個自己設定的變數,當這個變數數值內容有改變(不管在那個程式段被呼叫,或使用者改變),就立刻呼叫特定的函數,類似元件
OnChang() 事件,要如何著手?
|
CuteBabyBoy
初階會員
發表:18 回覆:97 積分:48 註冊:2003-07-11
發送簡訊給我
|
Dear 海星 如果我是您,我會用利用 TEdit 來做; 先在 Form 上拉個 Edit , 方式如下
int A; void __fastcall TForm1::FunctionName(TObject *Sender)
{
A=6;
Edit1->Text = A;
}
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
........................
} 也可以直接利用 Edit 來當變數,取值就用 Edit1->Text.ToInt(); void __fastcall TForm1::FunctionName(TObject *Sender)
{
Edit1->Text = 6;
}
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
........................
} Baby
|
CuteBabyBoy
初階會員
發表:18 回覆:97 積分:48 註冊:2003-07-11
發送簡訊給我
|
對了....別忘了將 Edit1->Visible = false; Baby
|
海星
高階會員
發表:41 回覆:217 積分:106 註冊:2003-01-09
發送簡訊給我
|
引言:
對了....別忘了將 Edit1->Visible = false;
嗯..你的方法也是其中一種作弊的方法,
那還有沒有直接建立變數OnChang()的方法?而不要這樣還要依靠物件的方法?
像一些元件,變數內容一改變就自動跑去做相關的工作,那個是怎樣做的?
|
hahalin
版主
發表:295 回覆:1698 積分:823 註冊:2002-04-14
發送簡訊給我
|
有可能是 使用建立類別的方式
設計屬性可供改變其屬性值 當屬性改變就分發message 當元件接收到這個message就自動跑去作相關的工作...
|
kwu
中階會員
發表:10 回覆:57 積分:58 註冊:2003-10-31
發送簡訊給我
|
引言:
請問一下,我想建立一個自己設定的變數,當這個變數數值內容有改變(不管在那個程式段被呼叫,或使用者改變),就立刻呼叫特定的函數,類似元件
OnChang() 事件,要如何著手?
海星你好!請參考以下程式碼試試看
請加入紅色部分程式碼
藍色的部份是Form1上的Component及Event
以下是 Unit1.h 的內容
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp>
//---------------------------------------------------------------------------
typedef void __fastcall (__closure *TChangeVarEvent)(); class TMyClass
{
private:
int FVar;
void __fastcall ChangeVar(); // Trigger Event Function
TChangeVarEvent FOnChangeVar; // Event
public:
__fastcall TMyClass();
void __fastcall AddVal();
__property TChangeVarEvent OnChangeVar = {read = FOnChangeVar,write = FOnChangeVar};
__property int Var = {read = FVar};
}; class TForm1 : public TForm
{
__published: // IDE-managed Components TButton *Button1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall Button1Click(TObject *Sender); private: // User declarations TMyClass *MyClass;
void __fastcall ChangeVarEvent(); public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif 以下是 Unit1.cpp 的內容 //---------------------------------------------------------------------------
#include
#pragma hdrstop #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MyClass = new TMyClass();
MyClass->OnChangeVar = ChangeVarEvent;
}
//--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete MyClass;
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
MyClass->AddVal();
}
//--------------------------------------------------------------------------- void __fastcall TForm1::ChangeVarEvent()
{
ShowMessage(MyClass->Var);
}
//---------------------------------------------------------------------------
// TMyClass Constructor
__fastcall TMyClass::TMyClass()
{
FVar = 0;
}
//--------------------------------------------------------------------------- void __fastcall TMyClass::AddVal()
{
FVar ;
ChangeVar();
}
//--------------------------------------------------------------------------- void __fastcall TMyClass::ChangeVar()
{
if (FOnChangeVar)
FOnChangeVar();
}
//---------------------------------------------------------------------------
|
海星
高階會員
發表:41 回覆:217 積分:106 註冊:2003-01-09
發送簡訊給我
|
引言:
以下是 Unit1.h 的內容
[code]
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp>
//---------------------------------------------------------------------------
[red]
typedef void __fastcall (__closure *TChangeVarEvent)(); class TMyClass
{
private:
int FVar;
void __fastcall ChangeVar(); // Trigger Event Function
TChangeVarEvent FOnChangeVar; // Event
public:
__fastcall TMyClass();
void __fastcall AddVal();
__property TChangeVarEvent OnChangeVar = {read = FOnChangeVar,write = FOnChangeVar};
__property int Var = {read = FVar};
};
請問一下,我在 Help 裡面找不到 TChangeVarEvent 這個關鍵字,
這個是定義在typedef 這個位置,也就是可以自己任意取個名字嗎?
|
kwu
中階會員
發表:10 回覆:57 積分:58 註冊:2003-10-31
發送簡訊給我
|
引言:
請問一下,我在 Help 裡面找不到 TChangeVarEvent 這個關鍵字,
這個是定義在typedef 這個位置,也就是可以自己任意取個名字嗎?
海星你好:
以下綠色的部分可自行命名,這是自定事件的宣告,還可以有傳回值及帶參數
以大寫T開頭只是習慣,因C Builder都是以此為命名規則
typedef void __fastcall (__closure *TChangeVarEvent)();
|
海星
高階會員
發表:41 回覆:217 積分:106 註冊:2003-01-09
發送簡訊給我
|
引言:
引言:
請問一下,我在 Help 裡面找不到 TChangeVarEvent 這個關鍵字,
這個是定義在typedef 這個位置,也就是可以自己任意取個名字嗎?
海星你好:
以下綠色的部分可自行命名,這是自定事件的宣告,還可以有傳回值及帶參數
以大寫T開頭只是習慣,因C Builder都是以此為命名規則
typedef void __fastcall (__closure *TChangeVarEvent)();
非常感謝Kwu您熱心教導,我大概有個概念了,謝謝您
|