OSX系统状态栏

时间:2012-03-04 08:04:53

标签: macos delphi delphi-xe2 statusbar system-status

我在delphi中编写了一个代码,将状态项插入系统状态栏,代码运行正常,状态项显示。我使用了一个透明图标,我应该完全点击图标(不是icon rect)来打开菜单。但如果我点击图标的透明区域,没有任何反应! 我通过XCode编写相同的代码,每件事都没问题。

是否有任何机构对此案有所了解? 我想点击状态图标的任何一点(彩色和透明点)打开菜单。

代码:

procedure createStatusItem;
var
    app_delg: AppDelegate;
    statusBar: NSStatusBar;
    statusItem: NSStatusItem;
    menu: NSMenu;
    pImage: Pointer;
    nsImage: NSImage;
begin
    app_delg := TAppDelegate.Create;
    TNSApplication.Wrap(TNSApplication.OCClass.sharedApplication()).setDelegate(AppDelegate(app_delg));
    statusBar := TNSStatusBar.Wrap(TNSStatusBar.OCClass.systemStatusBar);
    menu := TNSMenu.Wrap(TNSMenu.Alloc.initWithTitle(NSSTR('')));
    statusItem := statusBar.statusItemWithLength(NSVariableStatusItemLength);
    statusItem.retain;
    statusItem.setHighlightMode(true);
    statusItem.setAction(sel_getUid('onMenuClicked:'));
    statusItem.setMenu(menu);

    pImage := TNSImage.Alloc.initWithContentsOfFile(NSSTR('icon.ico'));
    nsImage := TNSImage.Wrap(pImage);
    statusItem.setImage(nsImage);
    nsImage.release;
end;

感谢。

1 个答案:

答案 0 :(得分:0)

设置menu属性时,不会触发操作。所以删除setmenu行。 然后你需要一个目标。为它创建一个委托并将其设置为目标。

OCMock