【发布时间】:2014-05-27 02:56:34
【问题描述】:
我有一个最初使用 Delphi 2005 编写的应用程序。
它有一个页面控件,根据选择的选项卡,它会显示不同的菜单。
case PageControl.ActivePageIndex of
0: begin
Menu := HeaderMenu;
end;
1: begin
Menu := DetailMenu;
end;
end;
在 XE 中这不起作用并且菜单不会改变。选择新标签时,如何将表单菜单替换为另一个?
以下显示了我正在尝试做的事情。不幸的是,它按预期工作。 M app有100多个表格,所以我不能全部发布
主窗体
unit Unit5;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus;
type
TForm5 = class(TForm)
MainMenu1: TMainMenu;
MainMenu2: TMainMenu;
OpenSecondWindow1: TMenuItem;
Dummy1: TMenuItem;
SwitchMenus1: TMenuItem;
Dummy2: TMenuItem;
SwitchMenus2: TMenuItem;
OpenSecondWindow2: TMenuItem;
procedure SwitchMenus2Click(Sender: TObject);
procedure OpenSecondWindow1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
uses Unit6;
procedure TForm5.OpenSecondWindow1Click(Sender: TObject);
begin
Form6.Show();
end;
procedure TForm5.SwitchMenus2Click(Sender: TObject);
begin
if Menu = MainMenu1 then
Menu := MainMenu2
else
Menu := MainMenu1;
end;
end.
第二种形式
unit Unit6;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.ComCtrls, Vcl.ExtCtrls;
type
TForm6 = class(TForm)
MainMenu1: TMainMenu;
MainMenu2: TMainMenu;
PageControl1: TPageControl;
Menu11: TMenuItem;
File1: TMenuItem;
insert1: TMenuItem;
save1: TMenuItem;
Menu21: TMenuItem;
Stuff1: TMenuItem;
Save2: TMenuItem;
Donoting1: TMenuItem;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
Panel1: TPanel;
procedure PageControl1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
implementation
{$R *.dfm}
procedure TForm6.PageControl1Change(Sender: TObject);
begin
case PageControl1.TabIndex of
0: Menu := MainMenu1;
1: Menu := MainMenu2;
2: Menu := nil;
end;
end;
end.
【问题讨论】:
-
问题中代码的上下文是什么。它住在哪里?
-
它以从我的应用程序主窗体打开的窗体形式存在。
-
现在这很有趣。我在 Menu := 语句上设置了断点并在调试模式下运行。并且菜单更改正确。当我删除断点时不再更新。
-
我仍然不知道这段代码的上下文是什么。它存在于一个过程中。该程序何时运行?我们不能有SSCCE吗?如果您提供了一个,我们会为您提供答案。
-
更多信息。除了将我切换到 XE4 之外,调试器似乎没有做任何事情。如果我在没有调试器和 Alt Tab 的情况下运行以切换到另一个程序并返回菜单重新绘制自己。我尝试将 self.Invalidate 和 self.Repaint 添加到代码中无济于事。
标签: delphi menu delphi-xe4