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

元件自訂事件的問題

答題得分者是:jow
jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-03 09:44:23 IP:60.250.xxx.xxx 訂閱
我之前寫了一個元件是繼承自 TPanel, 上面放了四個 TEdit, 最近要使用時發現 TPanel 沒有 OnChange 的事件可以繼承, 但是我想幫我的元件製造一個 OnChange 的元件, 在上述的四個 TEdit 中任一個的 OnChange 被觸發時都可以被觸發, 請問要如何做.
------
Jesse Chan
編輯記錄
taishyang 重新編輯於 2007-04-25 14:46:43, 註解 將文章分類成[問題]‧
gac
初階會員


發表:2
回覆:28
積分:26
註冊:2004-08-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-24 22:53:05 IP:218.167.xxx.xxx 未訂閱
請問 TEdit 也是包在您自製的物件裡嗎?
還是在編輯時另外擺上去的?
------
我..........還很嫩!
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-01 10:35:49 IP:210.66.xxx.xxx 訂閱
[code cpp]
//---------------------------------------------------------------------------
#ifndef EditPanelH
#define EditPanelH
//---------------------------------------------------------------------------
#include
#include
#include
#include
//---------------------------------------------------------------------------
typedef void __fastcall (__closure *TEditChangeEvent)(TObject* Sender,
int Index, TEdit* edit);
//---------------------------------------------------------------------------
class PACKAGE TEditPanel : public TCustomPanel
{
private:
TEditChangeEvent FOnEditChange;
TEdit* __fastcall GetEdits(int Index);
protected:
TEdit* FEdits[4];
void __fastcall ArrangeEdits();
void __fastcall PanelEditChanged(TObject* Sender);
public:
__fastcall TEditPanel(TComponent* Owner);
__property TEdit* Edits[int Index]={read=GetEdits};
__published:
__property TEditChangeEvent OnEditChange={read=FOnEditChange,
write=FOnEditChange};
};
//---------------------------------------------------------------------------
#endif
[/code]


[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "EditPanel.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//---------------------------------------------------------------------------
static inline void ValidCtrCheck(TEditPanel *)
{
new TEditPanel(NULL);
}
//---------------------------------------------------------------------------
namespace Editpanel
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TEditPanel)};
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
__fastcall TEditPanel::TEditPanel(TComponent* Owner): TCustomPanel(Owner)
{
Width = 127;
Height = 110;
for(int i=0; i<4; i ){
FEdits[i] = new TEdit(this);
FEdits[i]->Parent = this;
FEdits[i]->Tag = i;
FEdits[i]->OnChange = &PanelEditChanged;
}
ArrangeEdits();
}
//---------------------------------------------------------------------------
void __fastcall TEditPanel::ArrangeEdits()
{
TRect r = Rect(5,5,121,21);
for(int i=0; i<4; i ){
FEdits[i]->BoundsRect = r;
OffsetRect(r, 0, 25);
}
}
//---------------------------------------------------------------------------
TEdit* __fastcall TEditPanel::GetEdits(int Index)
{
return FEdits[Index];
}
//---------------------------------------------------------------------------
void __fastcall TEditPanel::PanelEditChanged(TObject* Sender)
{
if(FOnEditChange)FOnEditChange(this, ((TEdit*)Sender)->Tag, (TEdit*)Sender);
}
//---------------------------------------------------------------------------
[/code]



[code cpp]
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp><br />#include "EditPanel.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:
TLabel *Label1;
private:
protected:
TEditPanel* FEditPanel;
void __fastcall DO_ON_EDIT_CHANGE(TObject* Sender, int Index, TEdit* e);
public:
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
[/code]


[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "fMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
FEditPanel = new TEditPanel(this);
FEditPanel->Parent = this;
FEditPanel->Left = 10;
FEditPanel->Top = 10;
FEditPanel->OnEditChange = &DO_ON_EDIT_CHANGE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DO_ON_EDIT_CHANGE(TObject* Sender, int Index, TEdit* e)
{
Label1->Caption = IntToStr(Index) ", " e->Text;
}
//---------------------------------------------------------------------------
[/code]


jessechan
版主


發表:109
回覆:394
積分:254
註冊:2002-04-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-01 16:14:54 IP:61.31.xxx.xxx 訂閱
沒想到這麼久了還有人回覆, 多謝了.
------
Jesse Chan
系統時間:2024-05-03 15:37:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!