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

動態產生元件,使用TList新增與刪除元件問題

答題得分者是:ikk
maplefog
一般會員


發表:16
回覆:24
積分:13
註冊:2008-11-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-09 20:12:46 IP:140.118.xxx.xxx 訂閱

我使用popupmenu,一個選項是產生image,另一個選項是刪除所選的image。

每按一次新增一個image,然後使用TList add

不管產生多少image,顯示List的Count都是1 ???

所以刪除時也只能刪除Items[0],其他的image不能刪除

請問我程式哪邊有錯誤 謝謝!

程式碼如下

Unit2.h
[code cpp]
class TForm2 : public TForm
{
__published: // IDE-managed Components
TPopupMenu *PopupMenu1;
TMenuItem *addDG;
TMenuItem *delDG;
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X,
int Y);
void __fastcall addDGClick(TObject *Sender);
void __fastcall delDGClick(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall MyMouseEnter(TObject *Sender);
private: // User declarations
TList *ListImg;
TImage *img;
int Mouse_X;
int Mouse_Y;
int NumDG;
int LastTag;
int SelDG;
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};

[/code]

Unit2.cpp
[code cpp]
void __fastcall TForm2::FormMouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{
Mouse_X = X;
Mouse_Y = Y;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::addDGClick(TObject *Sender)
{
ListImg = new TList;
img = new TImage(this);
img->Parent = Form2;
img->Width = 24;
img->Height = 24;
img->Left = Mouse_X;
img->Top = Mouse_Y;
img->Tag = LastTag;
img->OnMouseEnter = MyMouseEnter; //自訂MouseEnter事件
img->Picture->LoadFromFile("DG.ico");

ListImg->Add((TImage*)img);
NumDG = 1;
LastTag = 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::delDGClick(TObject *Sender)
{
delete (TForm2*)(ListImg->Items[SelDG]); //只能刪除Items[0]
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
NumDG = 0;
LastTag = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::MyMouseEnter(TObject *Sender)
{
SelDG = ((TImage*)Sender)->Tag;
ShowMessage(ListImg->Count); //每次都顯示1
}
//---------------------------------------------------------------------------

[/code]





編輯記錄
maplefog 重新編輯於 2009-09-09 20:16:12, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-10 09:01:06 IP:140.116.xxx.xxx 訂閱
這段code, 要放在FormCreate裡面吧
ListImg = new TList;
------
FPGA驗證, FPGA開發平台, http://smims.com
maplefog
一般會員


發表:16
回覆:24
積分:13
註冊:2008-11-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-09-10 12:31:34 IP:140.118.xxx.xxx 訂閱

感謝! 問題已經解決了

Unit2.h

[code cpp]
class TForm2 : public TForm
{
__published: // IDE-managed Components
TPopupMenu *PopupMenu1;
TMenuItem *addDG;
TMenuItem *delDG;
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X,
int Y);
void __fastcall addDGClick(TObject *Sender);
void __fastcall delDGClick(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall MyMouseEnter(TObject *Sender);
void __fastcall PopupMenu1Popup(TObject *Sender);
void __fastcall MyMouseLeave(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall FormDragOver(TObject *Sender, TObject *Source, int X, int Y,
TDragState State, bool &Accept);
void __fastcall FormDragDrop(TObject *Sender, TObject *Source, int X, int Y);
private: // User declarations
TList *ListImg;
TImage *img;
int Mouse_X,Mouse_Y;
int NumDG;
int LastTag;
int SelDG;
bool AddImg,DelImg;
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};

[/code]

Unit2.cpp
[code cpp]
void __fastcall TForm2::FormMouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{
Mouse_X = X;
Mouse_Y = Y;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::addDGClick(TObject *Sender)
{
img = new TImage(this);
img->Parent = Form2;
img->Width = 24;
img->Height = 24;
img->Left = Mouse_X;
img->Top = Mouse_Y;
img->Tag = LastTag;
img->Transparent = true;
img->DragMode = dmAutomatic;
img->OnMouseEnter = MyMouseEnter;
img->OnMouseLeave = MyMouseLeave;
img->Picture->LoadFromFile("DG.ico");
ListImg->Add((TImage*)img);
NumDG = 1;
LastTag = 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::delDGClick(TObject *Sender)
{
delete (TForm2*)(ListImg->Items[SelDG]);
NumDG -= 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
ListImg = new TList;
NumDG = 0;
LastTag = 0;
AddImg = true;
DelImg = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::MyMouseEnter(TObject *Sender)
{
AddImg = false;
DelImg = true;
SelDG = ((TImage*)Sender)->Tag;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::PopupMenu1Popup(TObject *Sender)
{
if(AddImg==true)
addDG->Enabled = true;
else
addDG->Enabled = false;
if(DelImg==true)
delDG->Enabled = true;
else
delDG->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::MyMouseLeave(TObject *Sender)
{
AddImg = true;
DelImg = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormDestroy(TObject *Sender)
{
delete ListImg;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormDragOver(TObject *Sender, TObject *Source, int X,
int Y, TDragState State, bool &Accept)
{
Accept = Source->ClassNameIs("TImage");
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormDragDrop(TObject *Sender, TObject *Source, int X,
int Y)
{
if(Source->ClassNameIs("TImage"))
{
int WIDTH = ((TLabel*)Source)->Width;
int HEIGHT = ((TLabel*)Source)->Height;

((TLabel*)Source)->Left = X-WIDTH/2;
((TLabel*)Source)->Top = Y-HEIGHT/2;
}
}
//---------------------------------------------------------------------------

[/code]


編輯記錄
maplefog 重新編輯於 2009-09-10 12:35:02, 註解 無‧
系統時間:2024-04-16 21:19:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!