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

動態 Panel 刪除

尚未結案
wearefamily
一般會員


發表:12
回覆:16
積分:5
註冊:2004-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-23 21:12:21 IP:210.244.xxx.xxx 未訂閱
爬文爬了好久, 看到用 TList 可以刪除動態產生的 Component 如 http://delphi.ktop.com.tw/topic.php?topic_id=22840 about 動態產生元件 但是這個方法,試來試去都沒有辦法只刪掉選到的元件 ? 只試出刪除所有產生並加在TList的元件 有辦法個別刪除選到的某幾個元件 嗎? 或者說 在Panel上加個 popupmenu, 點選就刪除擁有這個 panel, 問題是 怎麼指定這個 Panel給 popmenu刪除呢? 發表人 - wearefamily 於 2004/11/23 21:16:51 發表人 - wearefamily 於 2004/11/23 21:18:14 發表人 - wearefamily 於 2004/11/23 21:51:02
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-23 22:27:47 IP:61.62.xxx.xxx 未訂閱
這個範例會動態產生10個Panel(按下Button1), 任意選取其中一個Panel, 按Button2刪除選取的Panel.
//---------------------------------------------------------------------------
// Unit1.h
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include <Forms.hpp>
#include 
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:        // IDE-managed Components
  TButton *Button1;
  TButton *Button2;
  void __fastcall Button1Click(TObject *Sender);
  void __fastcall FormDestroy(TObject *Sender);
  void __fastcall Button2Click(TObject *Sender);
private:        // User declarations
public:                // User declarations
  __fastcall TForm1(TComponent* Owner);      void __fastcall PanelClick(TObject *Sender);      int iActivePanelTag;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
/////////////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
// Unit1.cpp
#include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TPanel* Panels[10];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  iActivePanelTag = -1;
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  for(int i = 0; i < 10; i  )
  {
    Panels[i] = new TPanel(this);
    Panels[i]->Left = 10;
    Panels[i]->Top = i * 40;
    Panels[i]->Width = 30;
    Panels[i]->Height = 20;
    Panels[i]->Tag = i;
    Panels[i]->OnClick = PanelClick;
    InsertControl(Panels[i]);
  }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  for(int i = 0; i < 10; i  )
  {
    if (Panels[i]) Panels[i]->Free();
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if (iActivePanelTag >= 0 && Panels[iActivePanelTag])
  {
    Panels[iActivePanelTag]->Free();
    Panels[iActivePanelTag] = NULL;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PanelClick(TObject *Sender)
{
  // 選取Panel時把被選的Tag記下來
  iActivePanelTag = ((TPanel*)Sender)->Tag;
}
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-23 22:33:45 IP:59.104.xxx.xxx 未訂閱
引言: 爬文爬了好久, 看到用 TList 可以刪除動態產生的 Component 如 http://delphi.ktop.com.tw/topic.php?topic_id=22840 about 動態產生元件 但是這個方法,試來試去都沒有辦法只刪掉選到的元件 ? 只試出刪除所有產生並加在TList的元件 有辦法個別刪除選到的某幾個元件 嗎? 或者說 在Panel上加個 popupmenu, 點選就刪除擁有這個 panel, 問題是 怎麼指定這個 Panel給 popmenu刪除呢?
wearefamily你好: 假設 class="code"> //Item的click事件 void __fastcall TForm1::Delete1Click(TObject *Sender) { POINT point; GetCursorPos(&point); HWND hwnd; hwnd=WindowFromPoint(point); if (hwnd) DestroyWindow(hwnd); } 正歸一點的作法: //就是自已new一個popupmenu,不用拉的,這樣就可以指定popupmenu的owner了! void __fastcall TForm1::FormCreate(TObject *Sender) { TPopupMenu* p1=new TPopupMenu(Memo1); TMenuItem* itm=new TMenuItem(Memo1); itm->Caption="Delete"; itm->MenuItemOnClick; p1->Items->Add(itm); Memo1->PopupMenu=p1; } //--------------------------------------------------------------------------- void __fastcall TForm1::MenuItemOnClick(TObject* Sender) { TMenuItem* itm=(TMenuItem*)Sender; delete itm->Owner; } 注意: 1.事件請自行在.h中宣告 2.這裏用的是TMemo不是TPanel(精神一樣) 參著參著!
wearefamily
一般會員


發表:12
回覆:16
積分:5
註冊:2004-03-13

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