TMainMenu

From Lazarus wiki
Revision as of 09:37, 17 March 2024 by Ariben (talk | contribs)
Jump to navigationJump to search

Deutsch (de) English (en) suomi (fi) français (fr) 日本語 (ja) русский (ru)

日本語版メニュー
メインページ - Lazarus Documentation日本語版 - 翻訳ノート - 日本語障害情報

TMainMenu tmainmenu.pngはフォームでメインメニューを提供するコンポーネントパレットStandard tab/jaからの見ることのできないコンポーネントである。

概要

フォームを設計するときに様々なメニューアイテムによって選ばれる、ほとんどのウインドウの先頭に現れるメインメニューである。

メニューエディタを見るにはフォームのメインメニューアイコンを右クリックすること。

約束事

mnumenuで始まる、あるいはmenuのそのものをメニュー(menu)と名付けるのは一般的な慣習である。サブメニューがそれに含まれるメニューのプリフィクスとともに続く。例えば、「編集(Edit)」にある「カット(Cut)」サブメニューはたいていmnuEditCutもしくは、menuEditCutと名付けられる。これは今から6か月後に変更する必要が生じたときに、それらを中に入れる仕方の記憶を助け、覚えやすいが、慣習であり、強制ではないことに注意すること。しかし、このようにすることは後々変更したり、しばらくコードを見ていないときに、あるいは、書かれたプログラムをメンテナンスしなければならない、誰かほかの人間にとって、おそらくそれが何をしているかを理解する手助けになるだろう。

始めてみよう

メニューを作成する

  1. コンポーネントバーからTMainMenuを選び、フォーム上でそれをクリックするが、マウスボタンは離さずに押したまま、箱を描いてマウスボタンを離す。そのコンポーネントがフォームに現れるだろう。これはドロップダウンメニューとデフォルトのコンポーネント名がMainMenu1となった四角形が現れるだろう。
  2. もしMainMenu1と言う名前が気に食わなければ、オブジェクトインスペクタウィンドウに移動して、よりよいと考えるものにNameプロパティを変更する。ここではXMenuに変更する。Nameプロパティの左の箱にXMenuとタイプして、エンターを押す。コンポーネントの名前が変更される。
  3. XMenuを右クリックすると、ポップアップメニューが現れる。ここで、必要なのは最初のセクション、Menu Editorである。それをクリックする。
  4. Menu Editorウィンドウが「New Item1」のキャプションを持つ、すでに作られたメニューアイテムが開く。いつも見ている「ファイル 編集 表示 ヘルプ」のトップレベルメニューとなり、おそらくこれを変更したいだろう。そのためにはクリックし、オブジェクトインスペクタに移動する。
  5. オブジェクトインスペクタでNameプロパティをMenuItem1からよりふさわしいものに変更する。これをFileメニューと呼ぶことにする。そこでmnuFileとタイピングし、エンターを押すことでこれを変更する。
  6. New Item1よりも良い名前が欲しいので、Captionプロパティに移動し、&Fileとタイプし、エンターを押す。名前の前のアンパサンド&はAltキーと下線が引かれたキーを押すことにより、メニューを開くことのできるアクセラレータである。このメニューに対するキャプションをFileへと変更する。この時点で、1つのトップレベルメニュを加えたことになる。
  7. Menu Editorウインドウに戻る。Fileをクリックし、次に右クリックする。ポップアップメニューが現れる。Insert New Item Afterをクリックし、New Item2という名前の新しいメニューが現れる。2つのアイテムですでに説明したように、オブジェクトインスペクタでその名前をmnuHelp、この名前をmnuHelp、キャプションを&Helpに変更する。
  8. これをFileの下のメニューアイテムにする。右クリックし、Create Submenuをクリックする。ファイルメニューは矢印を持ち、# New Item2という名前のサブメニューが現れる。

これをそれが行う何かに関連したものに変更する、ここでは「開く」ということにする。オブジェクトインスペクタに移動し、NameプロパティをmnuFileOpen、キャプションを&Openに変更する。

  1. トップレベルメニューFileHelpの間にまたトップレベルメニューが必要である。Fileを右クリックし、Insert New Item (after)するか、Helpを右クリックし、Insert New Item (before)をクリックすることができる。
  2. このアイテムのプロパティをオブジェクトインスペクタでmnuEditへ変更する。
  3. 必要なら、それぞれのメニューとサブメニューに応じて上記を繰り返す。

これで、すべてが実行時に表示され、ユーザーはメニューをクリックすることができる。これは実際には何もしない。メニューアイテムに何かをさせるときは、クリックされると反応することになっている、それぞれのメニューとサブメニューにeventsを加えなければならない。通常はトップレベルメニューは反応しないが、サブメニューは反応する。メニューの反応のさせ方に2つの選択肢があり、メニューの中にイベントを挿入するか、あるいはTActionListコンポーネントを用いることもできる。TActionListを用いる主な理由はもし、ツールバーにアイコンを加えるつもりがあるならば、まず、「ファイル」そして、「開く」、「保存」、「名前をつけて保存」、「閉じる」などのメニューをサブメニューとして持ち、同様にツールバーに「新規」、「開く」、「保存」、「名前をつけて保存」ボタンがあるツールバーを持つことになる。「新規」、「開く」機能を扱う2つのルーチンを書くより、メニューとツールバー双方にTActionListを持つ。TActionListを使う仕方はほかに譲る。当面はオブジェクトエクスプローラでイベントを用いての、メニュークリックを扱う仕方を説明する。

実際に何かをするメニューを作成する

  1. Menu Editorウインドウに戻り、File以下にあるサブメニューOpenをクリックする。オブジェクトインスペクタウインドウに行き、Eventsタブをクリックする。変えたいイベント何もないはOnClickのみである。あると好ましい、存在するイベントハンドラを持っているならば、用いることができるが、それはないため、Lazarusにそれを作らせることができる。3つのボタンの右に3つのドット(...)がある。これをクリックすると、新しいプロシージャがコードの中に生成され、コードウインドウにヴューが切り替わる。これは以下のように見えるだろう。
  1. procedure TfrmMain.mnuFileOpenClick(Sender: TObject);
    begin

    end;
  2. beginendステートメントの間にメニューのオープンアクションを書くだろう。これはフォーム上のDaialogs tabからTOpenDialogコントロールを配置するかもしれない。同様のことが SaveSave asサブメニューを持つと適用される。
  3. どのようにしてメニューとサブメニューを加えるかについて上で言及した点を繰り返すことになり、それぞれはユーザーによってクリックされる1つ1つについて必要ならばイベントハンドラを作るだろう。

チェックボックスメニュー

さて、チェックボックスが欲しくなった、どこ、いつ、ユーザーがクリックすると、それはチェックマークがついたり、消えたりする。これを行う方法を議論する。

  1. Menu Editorウインドウに移り、Editをクリックする。
  2. Editの下にメニューアイテムを作ろう。右クリックし、 Create Submenuをクリックし、オブジェクトインスペクタウインドウでもしすでに選択されていなければ、プロパティタブをクリックする。このサブメニューをmnuEditPreserveと名づけキャプションをP&reserve caseとする(コピーアンドベースとが通常)ALT+PとALT+C。

Give this submenu the name mnuEditPreserve and the caption P&reserve case (Since Copy and Paste usually use ALT+P and ALT+C we'll use ALT+R for this submenu which is why the ampersand is before the letter r.

  1. The default value under checked will be False. If the default state of this menu is checked, double click on the value to flip it from False to True.
  2. Select the Events tab, choose the Click property and click on the ... button.
  3. Lazarus will switch to the code window, and create the Click event for this submenu.
  4. within the begin and end boxes, all you need is one line, similar to the following:
    mnuEditPreserve.checked := not mnuEditPreserve.checked ;
  5. This will flip the value from checked to unchecked. To be able to use this checked menu in your code, just reference mnuEditPreserve.checked (or whatever the name of the menu is, with the property checked). It's used just as any other Boolean value.

セパレータ

Sometimes you want a menu that has a line separating entries. For example, an Edit menu might have submenus for Cut, Copy and Paste, then have a separator line before the next submenu. To create a separator line, just make another submenu, and make the caption consist of a single dash (-).

ShortCuts

If you want, you can assign a menu a specific key combination, proceed as follows:

  • Select the menu in the menu editor, which should get assigned a keyboard shortcut.
  • In the Object Inspector, go to the property ShortCut and click on the button [...].
  • It will appear a window where you can select the desired ShortCut for your menu.
  • At run time the event handler of your menu is called with this ShortCut, like you would have clicked on this menu.

メニューの前の画像

If you want to make your menu more visually appealing or establish an optical mapping of the menu entries to a possible toolbar, you can show images in front of the menus. The following steps are necessary:

  • Add a TImageList to your form. This is found on the component palette Common Controls. Choose that component TImageList and click on your Form. Now the ImageList named ImageList1 on the form was created. These ImageList will contain all symbols or images to be displayed before the menus.
  • Right click now on the ImageList1 and open you the ImageList Editor.
  • Add all the images, one after the other, you need for your menus, to the ImageList. Simply click the button Add and select as usual an appropriate image.
  • When you have added all of the required images in the ImageList, you confirm your selection with [OK] button and the ImageList Editor is closed.
  • Now, you have to select your MainMenu, and set the property Images in the Object Inspector to your ImageList. Simply select your ImageList ImageList1 in the adjacent combobox.
  • Now open the menu editor of your menu again and select the menu that you want to get a image.
  • Go in the Object Inspector to the property ImageIndex from your menu and select the image to display in the adjacent combobox.
  • In the Menu Editor, select the next menu and choose the corresponding image for it. And so on.

問題: 左側にサブメニューがドロップダウンする(Windows Vista, 7 and 10)

If you see the pulldown menu aligned to the right of your mainmenu-item, and a submenu opens to the left, it's because your Windows is set to Right-handed in the Tablet PC Settings. This is done for when using a tablet and writing/pressing on the screen, the menus are directly visible. If you're right-handed you would want the menus to the left so they are not under your hand. For normal PC operations this is set to left-handed by default.

You can check this by doing the following:

  • Press the Window-key + R.
  • Paste in shell:::{80F3F1D5-FECA-45F3-BC32-752C152E456E} and press enter.
  • Goto the tab Other.
  • The default should be Left-handed for the menus to appear on the right otherwise they appear on the left.
  • Note: The arrow for a submenu will still appear on the right of the menu regardless this setting.

ランタイムを作成する

In order to create TMainMenu in runtime, once should specify a form as the owner of TMainMenu

  mnuMainMain = TMainMenu.Create(Form1);

(note, specifying parent is not necessary, specifying Application as the owner, will not have the desired effect)

以下も参照のこと


LCL Components
Component Tab Components
Standard TMainMenu • TPopupMenu • TButton • TLabel • TEdit • TMemo • TToggleBox • TCheckBox • TRadioButton • TListBox • TComboBox • TScrollBar • TGroupBox • TRadioGroup • TCheckGroup • TPanel • TFrame • TActionList
Additional TBitBtn • TSpeedButton • TStaticText • TImage • TShape • TBevel • TPaintBox • TNotebook • TLabeledEdit • TSplitter • TTrayIcon • TControlBar • TFlowPanel • TMaskEdit • TCheckListBox • TScrollBox • TApplicationProperties • TStringGrid • TDrawGrid • TPairSplitter • TColorBox • TColorListBox • TValueListEditor
Common Controls TTrackBar • TProgressBar • TTreeView • TListView • TStatusBar • TToolBar • TCoolBar • TUpDown • TPageControl • TTabControl • THeaderControl • TImageList • TPopupNotifier • TDateTimePicker
Dialogs TOpenDialog • TSaveDialog • TSelectDirectoryDialog • TColorDialog • TFontDialog • TFindDialog • TReplaceDialog • TTaskDialog • TOpenPictureDialog • TSavePictureDialog • TCalendarDialog • TCalculatorDialog • TPrinterSetupDialog • TPrintDialog • TPageSetupDialog
Data Controls TDBNavigator • TDBText • TDBEdit • TDBMemo • TDBImage • TDBListBox • TDBLookupListBox • TDBComboBox • TDBLookupComboBox • TDBCheckBox • TDBRadioGroup • TDBCalendar • TDBGroupBox • TDBGrid • TDBDateTimePicker
Data Access TDataSource • TCSVDataSet • TSdfDataSet • TBufDataset • TFixedFormatDataSet • TDbf • TMemDataset
System TTimer • TIdleTimer • TLazComponentQueue • THTMLHelpDatabase • THTMLBrowserHelpViewer • TAsyncProcess • TProcessUTF8 • TProcess • TSimpleIPCClient • TSimpleIPCServer • TXMLConfig • TEventLog • TServiceManager • TCHMHelpDatabase • TLHelpConnector
Misc TColorButton • TSpinEdit • TFloatSpinEdit • TArrow • TCalendar • TEditButton • TFileNameEdit • TDirectoryEdit • TDateEdit • TTimeEdit • TCalcEdit • TFileListBox • TFilterComboBox • TComboBoxEx • TCheckComboBox • TButtonPanel • TShellTreeView • TShellListView • TXMLPropStorage • TINIPropStorage • TJSONPropStorage • TIDEDialogLayoutStorage • TMRUManager • TStrHolder
LazControls TCheckBoxThemed • TDividerBevel • TExtendedNotebook • TListFilterEdit • TListViewFilterEdit • TLvlGraphControl • TShortPathEdit • TSpinEditEx • TFloatSpinEditEx • TTreeFilterEdit • TExtendedTabControl •
RTTI TTIEdit • TTIComboBox • TTIButton • TTICheckBox • TTILabel • TTIGroupBox • TTIRadioGroup • TTICheckGroup • TTICheckListBox • TTIListBox • TTIMemo • TTICalendar • TTIImage • TTIFloatSpinEdit • TTISpinEdit • TTITrackBar • TTIProgressBar • TTIMaskEdit • TTIColorButton • TMultiPropertyLink • TTIPropertyGrid • TTIGrid
SQLdb TSQLQuery • TSQLTransaction • TSQLScript • TSQLConnector • TMSSQLConnection • TSybaseConnection • TPQConnection • TPQTEventMonitor • TOracleConnection • TODBCConnection • TMySQL40Connection • TMySQL41Connection • TMySQL50Connection • TMySQL51Connection • TMySQL55Connection • TMySQL56Connection • TMySQL57Connection • TSQLite3Connection • TIBConnection • TFBAdmin • TFBEventMonitor • TSQLDBLibraryLoader
Pascal Script TPSScript • TPSScriptDebugger • TPSDllPlugin • TPSImport_Classes • TPSImport_DateUtils • TPSImport_ComObj • TPSImport_DB • TPSImport_Forms • TPSImport_Controls • TPSImport_StdCtrls • TPSCustomPlugin
SynEdit TSynEdit • TSynCompletion • TSynAutoComplete • TSynMacroRecorder • TSynExporterHTML • TSynPluginSyncroEdit • TSynPasSyn • TSynFreePascalSyn • TSynCppSyn • TSynJavaSyn • TSynPerlSyn • TSynHTMLSyn • TSynXMLSyn • TSynLFMSyn • TSynDiffSyn • TSynUNIXShellScriptSyn • TSynCssSyn • TSynPHPSyn • TSynTeXSyn • TSynSQLSyn • TSynPythonSyn • TSynVBSyn • TSynAnySyn • TSynMultiSyn • TSynBatSyn • TSynIniSyn • TSynPoSyn
Chart TChart • TListChartSource • TRandomChartSource • TUserDefinedChartSource • TCalculatedChartSource • TDbChartSource • TChartToolset • TChartAxisTransformations • TChartStyles • TChartLegendPanel • TChartNavScrollBar • TChartNavPanel • TIntervalChartSource • TDateTimeIntervalChartSource • TChartListBox • TChartExtentLink • TChartImageList
IPro TIpFileDataProvider • TIpHtmlDataProvider • TIpHttpDataProvider • TIpHtmlPanel
Virtual Controls TVirtualDrawTree • TVirtualStringTree • TVTHeaderPopupMenu