9

Windowsプラットフォームでは、VCLを使用して、メニューにセパレーターを追加する場合、 を;TMenuItemとともに追加します。Caption := '-'

FireMonkeyでは、aTMenuItemText := '-';を追加します。

Windows プラットフォームでは期待どおりに動作し、Text='-' の項目はセパレーターとして表示されます。

しかし、同じアプリケーションをOSXで実行すると、マイナス記号が表示されます...

セパレーターTMenuItemであることを指定するプロパティが見つかりませんでした...

TMainMenuTMenuBar( )を試してみましたが、UseOSMenu := True|False;まだこの問題があります。

実際のセパレーターを作成するアイデアはありますか? (それ以外の場合は、OS を確認し、OSX の場合は削除します...)

4

3 に答える 3

5

これは FireMonkey のバグです。私は彼らがそれを解決すると確信しています。ただし、その間は以下のコードを使用できます。メイン フォームの OnActivate イベントで FixSeparatorItemsForMac プロシージャを呼び出します。

uses リストにある Mac 固有のファイルを忘れないでください。

uses
...
  {$IFDEF MACOS}
  ,Macapi.ObjectiveC,MacApi.AppKit,MacApi.Foundation,FMX.Platform.Mac
  {$ENDIF}

{$IFDEF MACOS}

Procedure FixSeparatorItemsForMenuItem(MenuItem:NSMenuItem);
var i:Integer;
    subItem:NSMenuItem;
begin
  if (MenuItem.hasSubmenu = false) then exit;
  for i := 0 to MenuItem.submenu.itemArray.count -1 do
  begin
    subItem := MenuItem.submenu.itemAtIndex(i);
    if (subItem.title.isEqualToString(NSSTR('-'))= true) then
    begin
      MenuItem.submenu.removeItemAtIndex(i);
      MenuItem.submenu.insertItem(TNSMenuItem.Wrap(TNSMenuItem.OCClass.separatorItem),i);
    end else begin
      FixSeparatorItemsForMenuItem(subItem);
    end;
  end;
end;

Procedure FixSeparatorItemsForMac;
var NSApp:NSApplication;
    MainMenu:NSMenu;
    AppItem: NSMenuItem;
    i: Integer;
begin
  NSApp := TNSApplication.Wrap(TNSApplication.OCClass.sharedApplication);
  MainMenu := NSApp.mainMenu;
  if (MainMenu <> nil) then
  begin
    for i := 0 to MainMenu.itemArray.count -1 do
    begin
      AppItem := mainMenu.itemAtIndex(i);
      FixSeparatorItemsForMenuItem(AppItem);
    end;

  end;
end;
{$ENDIF}
于 2011-10-02T19:58:40.323 に答える
0

私は Mac 用にプログラムしたことはありませんし、Mac を持ったこともありませんが、好奇心からそれに関する Apple のドキュメントを見つけました。

Menu Separator 項目は無効化された空白のメニュー項目です。おそらくそれで偽造できます:

区切り項目

メニュー コマンドの論理グループを区切るために使用されるメニュー項目を返します。+ (NSMenuItem *)separatorItem 戻り値

メニュー コマンドの論理グループを区切るために使用されるメニュー項目。

討論

このメニュー項目は無効です。デフォルトの区切り項目は空白です。

(出典: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSMenuItem_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSMenuItem )

于 2011-09-21T22:51:17.047 に答える
-1

これをテストする設備はありませんが、試してみる価値はあります。

デフォルトでは、FireMonkey は完全にスタイル設定された独自のメニューを作成しますが、TMenuBar.UseOSMenu プロパティを true に設定し、OS 呼び出しを使用してメニューを作成します。

これを、すでに説明した Cocoa メニューを作成するためのアドバイスと組み合わせることができます。

http://docwiki.embarcadero.com/RADStudio/en/FireMonkey_Application_Design#Menusから:

「TMenuBar.UseOSMenu プロパティを True に設定すると、FireMonkey は OS 呼び出しでメニュー ツリーを作成し、ネイティブ メニューが作成されます。Windows では、このメニューは親フォームの上部にあり、現在の Appearance テーマを使用して表示されます。Mac ではOS X では、アプリケーションにフォーカスがあるときは常にメイン画面の上部にあるグローバル メニュー バーにメニューが表示されます。」

于 2011-09-22T22:55:41.663 に答える