2

デルファイ Xe2U4。メイン メニュー項目: ファイル、オプション、ヘルプ (名前: HelpMenuItem)。2ボタン。StyleManager Xe2 を使用します (プロジェクト オプションで xe2 テーマを有効にし、デフォルトで「Metro Blue」を設定します)。

Procedure TForm1.RightMenu; // Shift in the right of last item of the menu
var mii: TMenuItemInfo;MainMenu: hMenu; Buffer: array[0..79] of Char;
begin
  MainMenu := Self.Menu.Handle;
  mii.cbSize := SizeOf(mii) ;
  mii.fMask := MIIM_TYPE;
  mii.dwTypeData := Buffer;
  mii.cch := SizeOf(Buffer) ;
  GetMenuItemInfo(MainMenu, HelpMenuItem.Command, false, mii) ;
  mii.fType := mii.fType or MFT_RIGHTJUSTIFY;
  SetMenuItemInfo(MainMenu, HelpMenuItem.Command, false, mii) ;
end;

procedure TForm1.Metro1Click(Sender: TObject); // Not Work
begin
TStyleManager.TrySetStyle('Metro Blue'); // or any other
RightMenu;
end;

procedure TForm1.Windows1Click(Sender: TObject); // Work
begin
TStyleManager.TrySetStyle('Windows'); // standart theme
RightMenu;
end;

使用テーマで動作しないのはなぜですか? メニューの最後のポイントを右側に移動する通常の方法があるかどうか、依存スキームが適用されているかどうかに関係なく?

4

2 に答える 2

4

残念ながら、 の vcl スタイル フックはTMainMenu、特定のメニュー項目を右揃えで描画するコードを実装していません。また、この vcl スタイル フック (TMainMenuBarStyleHook) は厳密なプライベート メンバーとして TFormStyleHook (フォームの vcl スタイル フック) に埋め込まれているため、ここを変更する余地はあまりありません。この問題を修正するには、TForms と TMainMenus の新しい vcl スタイル フックを書き直す必要があります。したがって、これを行うには、TFormStyleHook クラスを Vcl.Forms ユニットから新しいユニットにコピーし、TFormStyleHook.TMainMenuBarStyleHook.DrawItemおよびTFormStyleHook.TMainMenuBarStyleHook.Paintメソッドの実装を修正する必要があります。

于 2012-07-21T18:25:05.743 に答える
2
Procedure TForm1.RightMenu; // Shift in the right of last item of the menu
var mii: TMenuItemInfo;MainMenu: hMenu; Buffer: array[0..79] of Char;
begin
  MainMenu := Self.Menu.Handle;
  mii.cbSize := SizeOf(mii) ;
  mii.fMask := MIIM_TYPE;
  mii.dwTypeData := Buffer;
  mii.cch := SizeOf(Buffer) ;
  GetMenuItemInfo(MainMenu, HelpMenuItem.Command, false, mii) ;
  mii.fType := mii.fType or MFT_RIGHTJUSTIFY;
  if SetMenuItemInfo(MainMenu, HelpMenuItem.Command, false, mii) then DrawMenuBar(self.Menu.WindowHandle);

end;
于 2015-12-17T12:08:35.507 に答える