關於PopUp menu 的問題 |
答題得分者是:william
|
dirboy
一般會員 ![]() ![]() 發表:7 回覆:16 積分:9 註冊:2002-07-15 發送簡訊給我 |
情況如下:
有一個Form1, 有一個Edit1 和一個Popup1; edit1 在 form1中, form1 的POPup menu 是 popup1.
測試中Form1 的任何地方按右鍵都會出現Popup1, 但在Highlight 了Edit1中的string 時, 按右鍵時仍是出現那個POPUP1, 郤不出現那個 cut,paste... 的標準Popup menu, 請問各位前輩有何方法解決此問題.
我可以用Handled := True 解決EDit1 中不出現那個popup1, 但郤連那個標準Popup menu都不見了.
|
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
Could it be easier in manually popping up the menu instead of the default one
|
dirboy
一般會員 ![]() ![]() 發表:7 回覆:16 積分:9 註冊:2002-07-15 發送簡訊給我 |
|
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
ddy
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
你這麼做吧,測試ok 沒問題
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button=mbRight then self.PopupMenu :=PopupMenu1; end; procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button=mbRight then edit1.PopupMenu :=PopupMenu2; end; |
Justmade
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
這個也可以 :
procedure TForm1.FormContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); var APoint: TPoint; begin APoint := ClientToScreen(Point(MousePos.X,MousePos.Y)); if ChildWindowFromPoint(handle,Point(MousePos.X,MousePos.Y)) = handle then PopupMenu1.Popup(APoint.X,APoint.Y); end;這是判別若 Mouse 指著的地方是 Form 本身而不是子元件時才 popup,其他的子元件就讓Delphi 作預設處理。 Form 的 PopupMenu 可如常設 PopupMenu1, 但 PopupMenu1.AutoPopup 要設 False。 |
dirboy
一般會員 ![]() ![]() 發表:7 回覆:16 積分:9 註冊:2002-07-15 發送簡訊給我 |
謝謝各大版主的解答, 本人不勝榮興.
>I have tried and it worked on a simple project using D7... maybe you have the property PopupMenu being set on the form?
Yes, 不好意思, OK 了. 謝謝ddy 兄回答, 再請問一下ddy, 如果我沒有popupmenu2, 那麼如何可以show那個default popupmenu? 謝謝Justmade 兄, 昨天我玩了FormContextPopup一個多小時, 最後沒結果, 今天給你點了一下, 原來要如此玩! 哈!
|
ddy
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
這麼做吧
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button=mbRight then self.PopupMenu :=PopupMenu1; //Form 載入我們指定的popupmenu end; procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin self.PopupMenu :=nil; //讓Form所指向的Popupmenu =Nil (清掉) //讓原先系統預定的顯示 end; |
dirboy
一般會員 ![]() ![]() 發表:7 回覆:16 積分:9 註冊:2002-07-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |