怎么实现 弹出菜单TPopupMenu,在 鼠标右键点击弹出时,无论在什么位置点都是向上弹出。
有知道的吗,谢谢。
有知道的吗,谢谢。
解决方案 »
- SQL数据库图片存取问题(简单)
- 用ADO连接数据库出现问题..请教
- 软件包居然安装错误!大家看看啊(来者有分)
- 寻Delphi程序反编译方面的技术教程
- 还是同一个程序改成的Delphi的(100分)
- 有关EXCEL的SHAPES
- 求 内存拷贝 函数
- 紧急问题。为什么事件不触发?当我在TTABLE的ONPOSTERROR,ONDELETEERROR等事件均不触发,里面的代码执行不到。为什么?原因在哪里?
- 谁知道SMTP邮件服务器是怎么处理附件?
- 几个初学者的问题,请帮忙!谢谢!
- 关于Delphi6. 与delphi 7.0的问题,有心兴趣的朋友见来看看?
- 微软的DHTMLEdit控件以及DHTMLSafe控件 谁会使用阿
Shift: TShiftState; X, Y: Integer);
var P:TPoint;
begin
if Button=mbRight then
begin
GetCursorPos(P);
PopupMenu1.Popup(P.X,P.Y-18*(PopupMenu1.Items.Count+1)+12);
end;
end;如果弹出菜单里面含有分界线,就要再修改一下弹出时的Y坐标
菜单弹出的位置而已,而菜单如何弹出根本不必去管,把任务栏拖放到屏幕四周就知道
了。下面是向上弹出的例子,注意PopupMenu的MainAnimation设置为maTopToBottom,
按钮位置在靠近屏幕下端附近,Button1为TSpeedButton,AllowAllUp设为True,
GroupIndex设为1。
procedure TForm1.Button1Click(Sender: TObject);
var
Pos: TPoint;
begin
if Button1.tag=0 then
begin
Pos :=Button1.ClientToScreen(Point(0,0));
Button1.Down :=true;
p1.Popup(Pos.x, Pos.y);
Button1.tag :=1;
end
else
begin
Button1.Down :=false;
Button1.tag :=0;
end;
end;
var
P: PTPMParams;
begin
if Button = mbRight then
begin
GetMem(P, sizeof(TTPMParams));
P^.cbSize := sizeof(TTPMParams);
P^.rcExclude := Rect(Mouse.CursorPos.X, Mouse.CursorPos.Y,
Screen.Width, Screen.Height);
TrackPopupMenuEx(PopupMenu1.Handle, TPM_CENTERALIGN or TPM_VERTICAL, Mouse.CursorPos.X,
Mouse.CursorPos.Y, Handle, P);
FreeMem(P);
end;
end;
默认是向上的,但当你的菜单高出屏幕上方时,系统会自动将菜单变向向下,因为它要保证菜单看得到。
不过在屏幕的大部分范围都可以是向上的了。