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

請問如何只使用一個PopupMenu元件來讓許多的DBGrid共用

尚未結案
andy1119
一般會員


發表:32
回覆:35
積分:13
註冊:2003-11-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-03 09:44:03 IP:210.69.xxx.xxx 未訂閱
想請問一下各位高手 假設我現在有很多TDBGrid元件 每個元件都需要一個PopupMenu元件來作關閉的動作 想請問一下我要如何使用一個PopupMenu就可以處理所有視窗的分別關閉動作? 不是一次關掉所有哦 ^^ 是在那個DBGrid上按右鍵關閉後只關閉那個DBGrid 卻不關閉其它的DBGrid 麻煩有方法的高手們教教小弟吧 ^_^
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-03 17:58:29 IP:202.39.xxx.xxx 未訂閱
看這樣行不行?
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
  p: TPoint;
  wc: TWincontrol;
begin
  GetCursorPos(p);
  wc := FindVCLWindow(p);
  if (wc <> nil) then begin
    if wc = DBGrid1 then
      // ...
    if wc = DBGrid2 then
      // ...
  end;
end;
--- 屬於那自己生命的歌 不管是什麼顏色
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-03 21:06:14 IP:218.32.xxx.xxx 未訂閱
andy1119 你好: 應該也可用 TPopupMenu.PopupComponent Property procedure TForm1.PopupMenu1Popup(Sender: TObject); begin showmessage(TPopupMenu(Sender).PopupComponent.name); end;
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-04 07:07:14 IP:202.39.xxx.xxx 未訂閱
見笑了!  --- 屬於那自己生命的歌 不管是什麼顏色
andy1119
一般會員


發表:32
回覆:35
積分:13
註冊:2003-11-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-04 08:19:50 IP:210.69.xxx.xxx 未訂閱
感謝兩位大大的回覆 ^_^ 可是我試了一下 hagar的方法已可達到小弟的需求 ^_^ 但是使用Micky的方法只出現空白的字串 我是Delphi 7.0 請問是語法有變嗎??? 因為我執行上沒問題
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-04 09:41:14 IP:218.163.xxx.xxx 未訂閱
我試 Design Time Create 的 DBGrid 沒問題.....    如果是 Run Time Create 的 DBGrid, 且沒有 Assign Name Property, 當然是空的, 如:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TDBGrid.Create(self)do begin
    parent := self;
    popupmenu := popupmenu1;
  end;
end;
andy1119
一般會員


發表:32
回覆:35
積分:13
註冊:2003-11-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-04 09:58:05 IP:210.69.xxx.xxx 未訂閱
@@咦小弟也是在Design Time Create的TDBGrid 我說一下我測試的方法好了 首先開一個新的application 然後在form1上放兩個TDBGrid分別為DBGrid1與DBGrid2 在放上一個TPopupMenu元件 滑鼠雙擊該元件並新增一個新的TMenuItem 再點選進去新建立的TMenuItem後 並填寫下列程式碼 procedure TForm1.N1Click(Sender: TObject); begin showmessage(TPopupMenu(Sender).PopupComponent.name); end; 執行後程式無論點選那一個DBGrid都只秀出空字串 請問一下是否有那個地方觀念弄錯了呢 ^_^"""
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-04 10:11:38 IP:218.163.xxx.xxx 未訂閱
那段程式是寫在 TPopupMenu.OnPopup Event, 不是 MenuItem.OnClick Event.    因為 MenuItem.OnClick 的 Sender 會是 TMenuItem 而非 TPopupMenu.    因為 TPopupMenu.PopupComponent 是 TComponent, 取得後運用較廣,    如: 
if PopupMenu1.PopupComponent is TImage then 
with TImage(PopupMenu1.PopupComponent) do begin
  ... 
end;
發表人 - Mickey 於 2004/03/04 10:21:52
andy1119
一般會員


發表:32
回覆:35
積分:13
註冊:2003-11-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-04 11:10:12 IP:210.69.xxx.xxx 未訂閱
嗯 我懂了 又多學了一招 謝謝這位大大 ^_^ 也感謝hagar的方法哦 謝謝 ^^
系統時間:2024-07-05 0:11:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!