delphi TPopupMenu.Popup

procedure TPopupMenu.Popup(X, Y: Integer);

这个点是相对桌面的而不是窗体的

GetCursorPos是鼠标的位置 鼠标动这个点就不一样

var

p:TPoint;

begin

GetCursorPos(p);

PopupMenu1.Popup(p.x,p.Y);

end;

现在要取得 Button1的Left 和Bottom的值 菜单就在这个位置出现

procedure TForm1.Button1Click(Sender: TObject);
var
    p:TPoint;
begin

p.X:=Button1.Left;
     p.y:=Button1.Top +Button1.Height;
     p:=Self.ClientToScreen(p);

PopupMenu1.Popup(p.x,p.y);
end;

同样适用窗体的Show

function GetControlPos(frm:TForm;ctrl:TControl):TPoint;
var
    p:TPoint;
begin

p.X:=ctrl.Left;
     p.y:=ctrl.Top +ctrl.Height;

p:=frm.ClientToScreen(p);

Result:=p;
end;

procedure TForm1.Button2Click(Sender: TObject);

var

p:TPoint;

begin

p:=GetDeskPos(Self,Button2);

PopupMenu1.Popup(p.X,p.Y);

end;

来自为知笔记(Wiz)

delphi TPopupMenu.Popup

时间: 2024-10-13 03:12:20

delphi TPopupMenu.Popup的相关文章

Delphi 通过Access Violation地址错误找到错误的哪行代码

什么是 MAP 文件?简单地讲, MAP 文件是程序的全局符号.源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方.任何时候使用,不需要有额外的程序进行支持.而且,这是唯一能找出程序崩溃的地方的救星. DELPHI下生成MAP文件的方法:生成详细的MAP信息的方法(二选一) 1. project -> options -> Linker -> Map file 选择detailed. 2. D:\Fred\Code\DELPHI\MyPas\ErrLineByAddr2>d

Delphi 7下最小化到系统托盘(主要是WM_TRAYMSG和WM_SYSCOMMAND消息)

在Delphi 7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本.定义如下: 123456789   _NOTIFYICONDATAA = record   cbSize: DWORD;   Wnd: HWND;   uID: UINT;   uFlags: UINT;   uCallbackMessage: UINT;   hIcon: HICON;   szTip: array [0..63] of Ansi

历史上最全的delphi技巧集锦

历史上最全的delphi技巧集锦 ------------------------------------------------ 删除dbgrid中选定数据的方法: begin adotable1.Delete; adotable1.first; 若要追加和修改信息:adotable1.Append;adotable1.post; ------------------------------------------------ 将数据写入库: procedure Tclassmanagefor

Delphi 实现最近打开文件记录菜单

unit UntOpenMenu; //download by http://wwww.NewXing.com interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus,registry; type TFrmMain = class(TForm) MainMenu1: TMainMenu; F1: TMenuItem; open: TMenuItem; Recent

delphi 右键删除dbgrid行

Delphi DBGrid右键删除行并提交至数据库.在form上添加,控件TPopupMenu,并指定右键名称:删行 2.编写删除语句: If ADOQuery1.State in [dsEdit, dsInsert] then ADOQuery1.Post;    If ADOQuery1.RecordCount <> 0 then ADOQuery1.Delete; 3.把dbgrid的PopupMenu属性,设置成刚刚添加的控件TPopupMenu. 4.编译,运行

Delphi中根据分类数据生成树形结构的最优方法

一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能,因而受到广大程序员的青睐.    树形结构在Windows环境中被普遍应用,但在数据库开发中面对层次多.结构复杂的数据,如何快速构造树形目录并实现导航呢?    二. 实现关键技术:    在Delphi提供的控件中包含了TreeView控件,但树的具体形成还需要用户编写代码.即它的列表项要在程序

Delphi中WebBrowser的使用技巧汇总

1>调用网页中已知对象 src := WebBrowser1.OleObject.document.getElementByIdx(’id1′).src 其实就是javascript中的 getElementByID 的函数 2>获得网页中的某个变量值 Html中的代码 : <script> var userID=123</script> 在delphi程序中这么调用 id := Form1.WebBrowser1.OleObject.Document.script.u

delphi 18 屏蔽和替换 右键菜单

//屏蔽右键菜单procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;  var Handled: Boolean);begin  with Msg do  begin    if not IsChild(WebBrowser1.Handle, hWnd) then Exit;    Handled := (message= WM_RBUTTONDOWN) or(message= WM_RBUTTONUP) or(message=

delphi中Webbrowser

1.获得网页中变量值 htm中<script> var currID=123</script> 程序中可以这么调用 id := Form1.WebBrowser1.OleObject.Document.script.currID 值得说明的是,变量可以是javascript定义的,也可以是vbscript定义的,如果Webbrowser1中找不到该变量,调用会触发一个异常事件,即变量currID不存在 2.执行网页中的函数 tmp := 'currID = getNextID(cu