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

PopupMenu 的popup 位置

尚未結案
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-05 17:36:57 IP:203.198.xxx.xxx 未訂閱
請問如果我有個張form 上有以下的components: Tedit、TPopupMenu、Tbutton ,當我按下Tbutton 時,就做以下動作: procedure TForm1.Button1Click(Sender: TObject); begin PopupMenu1.Popup(edit1.Left,edit1.top edit1.hegiht) end; 我想個Popupmenu顯示在edit1的左下角,但不知為何它總是顯示在form的其他位置......應怎樣做? Thanks
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-05 18:08:19 IP:210.65.xxx.xxx 未訂閱
Hi SuperLowB,    請參考這一篇討論:    http://delphi.ktop.com.tw/topic.php?topic_id=71955 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-05 18:09:40 IP:203.69.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject);
var
  tPt: TPoint;
begin
  GetCursorPos(tPt);
  PopupMenu1.Popup(tPt.X,tPt.Y edit1.hegiht);
end;
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-05 18:21:24 IP:210.243.xxx.xxx 未訂閱
PopupMenu1.Popup(Form1.Left Edit1.Left Edit1.Width, Form1.Top Edit1.Top Edit1.Height); 試試
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-06 14:44:18 IP:203.198.xxx.xxx 未訂閱
多謝 Fishman,但請看我以下的code 好奇怪 Code 1
procedure TForm1.Button1Click(Sender: TObject);
var p,p2:Tpoint;
begin
  p:=edit1.ClientToScreen(p2);
  PopupMenu1.Popup(p.x,p.y edit1.height);
end;
這個是無問題的,但如果我換了一個寫法情況又不同了: Code 2

procedure TForm1.ShowPopUpMenuToControl(APopupMenu:TPopupMenu;AControl: TObject);
var p,p2:Tpoint;
begin
   p:=Tcontrol(AControl).ClientToScreen(p2);
  APopupMenu.Popup(p.x,p.y Tcontrol(AControl).Height);
end;    procedure TForm1.Button1Click(Sender: TObject);
var p,p2:Tpoint;
begin
  ShowPopUpMenuToControl(PopupMenu1,edit1);
end;
紅色的那一段code,當我按下button,個popupmenu會在form的某一處出現點解? 我也試過這樣寫: Code 3

procedure TForm1.ShowPopUpMenuToControl(APopupMenu:TPopupMenu;AControl: TObject);
var p,p2:Tpoint;
begin
  p:=edit1.ClientToScreen(p2);
  PopupMenu1.Popup(p.x,p.y edit1.Height);
end;    procedure TForm1.Button1Click(Sender: TObject);
var p,p2:Tpoint;
begin
  ShowPopUpMenuToControl(PopupMenu1,edit1);
end;    
但綠色的那段 popupmenu的位置總是不正確.....點解? 發表人 - superlowb 於 2005/09/06 14:59:48
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-06 15:53:23 IP:210.65.xxx.xxx 未訂閱
Hi SuperLowB,    因為你的 P2 並未被初始化,所以才會如此,建議你將 ShowPopUpMenuToControl 更改如下
procedure TForm1.ShowPopUpMenuToControl(APopupMenu:TPopupMenu;AControl: TObject);
var p,p2:TPoint;
begin
  p2.x := 0;
  p2.y := TControl(AControl).Height;
  p := TControl(AControl).ClientToScreen(p2);
  APopupMenu.Popup(p.x,p.y);
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-06 16:53:33 IP:203.198.xxx.xxx 未訂閱
成功了........太好啦....哈哈....多謝你呀fishman
系統時間:2024-04-19 23:31:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!