全局界面控件VCLSkin使用手记及发现的一些问题(请大家一起来讨论) (300分)

  • 主题发起人 叮叮当当
  • 开始时间
to 叮叮当当:
谢谢您的回笿!
新建的菜单项是可以,我是说主菜单:TMainMenu
但是,在设计期放的主菜单可以Skin,可是热键又不起作用了.比如,&File,按Alt+F选不中它了.
 
动态创建主菜单也没有问题呀。

procedure TForm1.FormCreate(Sender: TObject);
var
MainMenu1: TMainMenu;
SubMenu: TMenuItem;
begin
MainMenu1 := TMainMenu.Create(Self);
Form1.Menu := MainMenu1;
SubMenu := TMenuItem.Create(MainMenu1);
SubMenu.Caption := 'File(&F)';
SubMenu.OnClick := N1Click;
MainMenu1.Items.Add(SubMenu);
end;

procedure TForm1.N1Click(Sender: TObject);
begin
ShowMessage('Menu File(&F) Clicked!');
end;

程序运行后你按 Alt+F 看看。

不信?这里有一个编译过的exe
 
我不重视皮肤的。
最好的办法是交给美工做。
 
:叮叮当当
老大,你放在OnCreate中创建是可以,但我是在点一个按钮后创建的主菜单,显示不出来
咋办?
 
To: Shuzi
你可能没有注意到 TSkinData 有个 UpdateMainMenu 方法。
还要注意保证 FormCreate 结束前窗体的 Menu 属性不为空。

procedure TForm1.FormCreate(Sender: TObject);
begin
Menu := TMainMenu.Create(Self); // 在窗体上放置个TMainMenu控件效果一样
end;

procedure TForm1.Button1Click(Sender: TObject);
var
MenuItem: TMenuItem;
begin
MenuItem := TMenuItem.Create(Menu);
MenuItem.Caption := 'File(&F)';
Menu.Items.Add(MenuItem);
MenuItem := TMenuItem.Create(MenuItem);
MenuItem.Caption := 'Load(&L)';
MenuItem.OnClick := N1Click;
Menu.Items[0].Add(MenuItem);
SkinData1.UpdateMainMenu(True);
end;

procedure TForm1.N1Click(Sender: TObject);
begin
ShowMessage('The MenuItem "' + TMenuItem(Sender).Caption + '" has been Clicked!');
end;
 
谢谢楼主!你说的是对的.
但是我的程序的主菜单是动态装配的,就是说根据外部的配置,可能有主菜单,也可能没有.
并且在装配过程中可能会用到一些控件属性,而且这些属性必须在窗口显示之后才能访问.
所以我的装配过程(即创建主菜单)放在窗口的DoShow中,这种情况,VCLSkin不能Skin主菜
单.
所以我着急找到VCLSkin的源程序,看有没有办法作一些修改.
事实上,对于没有源程序的第三方控件,我们一般不会用到项目中,因为很多问题无法控制和
解决.但VCLSKin实在不错,我们一直想作这么一个东西而没有实现!
你知道那儿有它的源程序吗?
 
To: Shuzi
没有源代码呀,有就好啦!
 
没人讨论了,结贴吧。
 
多人接受答案了。
 
我使用vclskin2.6后,发现工具栏上的按纽的颜色跟皮肤的颜色不一样,在按纽图像的周围显示一个方框,谁有好的解决办法,谢谢。
it169@tom.com
 

Similar threads

D
回复
0
查看
750
DelphiTeacher的专栏
D
D
回复
0
查看
752
DelphiTeacher的专栏
D
D
回复
0
查看
600
DelphiTeacher的专栏
D
顶部