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

變數事件的產生

尚未結案
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-31 13:38:55 IP:211.74.xxx.xxx 未訂閱
請問一下,我想建立一個自己設定的變數,當這個變數數值內容有改變(不管在那個程式段被呼叫,或使用者改變),就立刻呼叫特定的函數,類似元件 OnChang() 事件,要如何著手?
CuteBabyBoy
初階會員


發表:18
回覆:97
積分:48
註冊:2003-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-31 17:56:12 IP:218.167.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-31 18:48:32 IP:218.167.xxx.xxx 未訂閱
對了....別忘了將 Edit1->Visible = false; Baby
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-31 19:17:02 IP:211.74.xxx.xxx 未訂閱
引言: 對了....別忘了將 Edit1->Visible = false;
嗯..你的方法也是其中一種作弊的方法, 那還有沒有直接建立變數OnChang()的方法?而不要這樣還要依靠物件的方法? 像一些元件,變數內容一改變就自動跑去做相關的工作,那個是怎樣做的?
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-31 19:37:49 IP:211.76.xxx.xxx 未訂閱
有可能是 使用建立類別的方式 設計屬性可供改變其屬性值 當屬性改變就分發message 當元件接收到這個message就自動跑去作相關的工作...
kwu
中階會員


發表:10
回覆:57
積分:58
註冊:2003-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-02 15:47:52 IP:61.63.xxx.xxx 未訂閱
引言: 請問一下,我想建立一個自己設定的變數,當這個變數數值內容有改變(不管在那個程式段被呼叫,或使用者改變),就立刻呼叫特定的函數,類似元件 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-02 16:58:37 IP:61.218.xxx.xxx 未訂閱
引言: 以下是 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-02 17:09:35 IP:61.63.xxx.xxx 未訂閱
引言: 請問一下,我在 Help 裡面找不到 TChangeVarEvent 這個關鍵字, 這個是定義在typedef 這個位置,也就是可以自己任意取個名字嗎?
海星你好: 以下綠色的部分可自行命名,這是自定事件的宣告,還可以有傳回值及帶參數 以大寫T開頭只是習慣,因C Builder都是以此為命名規則
typedef void __fastcall (__closure *TChangeVarEvent)();
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-02-02 17:25:42 IP:61.218.xxx.xxx 未訂閱
引言:
引言: 請問一下,我在 Help 裡面找不到 TChangeVarEvent 這個關鍵字, 這個是定義在typedef 這個位置,也就是可以自己任意取個名字嗎?
海星你好: 以下綠色的部分可自行命名,這是自定事件的宣告,還可以有傳回值及帶參數 以大寫T開頭只是習慣,因C Builder都是以此為命名規則
typedef void __fastcall (__closure *TChangeVarEvent)();
非常感謝Kwu您熱心教導,我大概有個概念了,謝謝您
系統時間:2024-05-20 21:21:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!