2012-03-04 11 views
1

デルタでコードを書き込んでシステムステータスバーにステータス項目を挿入すると、コードは正常に機能し、ステータス項目が表示されます。私は透明なアイコンを使用したので、メニューを開くにはアイコン(rect)ではなくアイコンをクリックしてください。しかし、アイコンの透明な領域をクリックすると、何も起こりません! Xcodeで同じコードを書きますが、すべてのことがOKです。OSXシステムステータスバー

どのようなボディにもこのケースのアイデアはありますか? ステータスアイコン(色分けされた透明点)の任意のポイントをクリックしてメニューを開きたいとします。

コード:

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; 

感謝。

+0

OS Xの –

+2

には、「システムステータスバーは」「何のシステムステータスバーはありません」があります! 親愛なる友人、私はあなたのコメントに驚き、このコードが何をすべきか教えていただけますか? NSStatusBar * statusBar = [NSStatusBar systemStatusBar]; –

+0

質問に使用しているコードを含めて試してみてください。 – RRUZ

答えて

0

メニュープロパティを設定すると、アクションは実行されません。そのため、setmenu行を削除してください。 次にターゲットが必要です。デリゲートを作成し、ターゲットとして設定します。

type 
    IStatusBarDelegate = interface(NSObject) 
    ['{5D8BF7A3-C695-45F8-A447-948524718E5F}'] 
    procedure StatusbarItemClick; cdecl; 
    end; 

    TStatusbarDelegate = class(TOCLocal) 
    protected 
    { TOCLocal } 
    function GetObjectiveCClass: PTypeInfo; override; 
    public 
    procedure StatusbarItemClick; cdecl; 
    end; 

implementation 

function TStatusbarDelegate.GetObjectiveCClass: PTypeInfo; 
begin 
    Result := TypeInfo(IStatusBarDelegate); 
end; 

procedure TStatusbarDelegate.StatusbarItemClick; 
begin 
    Showmessage('click'); 
end; 

procedure TForm1.Button4Click(Sender: TObject); 
var 
    statusBar: NSStatusBar; 
    statusItem: NSStatusItem; 
    statusBarDelegate : TStatusbarDelegate; 
begin 
    StatusBarDelegate := TStatusbarDelegate.Create; 
    StatusBar := TNSStatusBar.Wrap(TNSStatusBar.OCClass.systemStatusBar); 
    StatusBarItem := FStatusBar.statusItemWithLength(NSVariableStatusItemLength); 
    StatusBarItem.retain; 
    Statusbaritem.setHighlightMode(True); 
    Statusbaritem.setTitle(StrToNSStr('test')); 
    Statusbaritem.setEnabled(true); 
    Statusbaritem.setToolTip(StrToNSStr('test tooltip')); 
    Statusbaritem.setTarget(FStatusBarDelegate.GetObjectID); 
    Statusbaritem.setAction(sel_getUid('StatusbarItemClick')); 
end; 
+0

ありがとうございます。解決策はグラフィカルアイコンについては何もありません.2)問題はosxバグに関連しているようです!私のステータスバーアイコンはエルキャピタンで期待どおりに機能するためです。 –