Board logo

Subject: Delphi7 快捷键显示问题 [Print This Page]

Author: softsword    Time: 2005-2-24 16:45     Subject: Delphi7 快捷键显示问题

各位:

    大家知道,Delphi 7 由于采用了新的技术,导致刚启动 IDE 之后,主菜单的快捷键显示不出来。必须按了某个快捷键才会出来。对比截图如下:
===============================================

Image Attachment: post-1.jpg (2005-2-24 16:45, 2.7 K) / Download count 977
http://bbs.cnpack.org/attachment.php?aid=46



Image Attachment: post-2.jpg (2005-2-24 16:45, 2.48 K) / Download count 953
http://bbs.cnpack.org/attachment.php?aid=47


Author: softsword    Time: 2005-2-24 16:53

因此,看 CnPack 的大哥们能不能为 Delphi 7 增加一个功能。
就是在 Delphi 7 的 IDE 启动之后,向 IDE 的主窗口发送一个特殊得快捷键。
这个快捷键的作用就是把菜单对应的快捷键字符显示出来,
而又不能把某个菜单真正打开。
小弟以为,这个键比如一个单独的 Alt 键或者 Alt + A ... 都可以。
只要不是主菜单对应的快捷键字符就行。
不知道这个建议 CnPack 是否可以考虑一下?
谢谢!
Author: Passion    Time: 2005-2-24 20:07

奇怪。
这个是Borland官方出的中文版还是民间的汉化版?
Author: Passion    Time: 2005-2-24 20:08

而且,英文版本的也有此问题。
Author: kendling    Time: 2005-2-24 23:58

不会吧?我有的Delphi7好像没有这个问题呀。
Author: softsword    Time: 2005-2-25 14:29

To kendling:

   你的 Delphi 一定是这样,如果是 7 的话。不管你是英文版也好,还是其他版本也好,原版就是如此。只不过你没有留意罢了。
Author: softsword    Time: 2005-2-25 14:35

Borland 官方出过一个 Delphi 7 Menu 多国语言包,
紧紧针对 IDE 的主菜单,可以选择中文。
不过这个中文实在...
而且,这个预言包也存在同样的问题。
Author: zjy    Time: 2005-2-25 18:48

D7的主菜单控件问题多多,快捷键不显示还不影响使用,菜单位置不会自动调整更是可恶。比如 CnWizards 的对齐子菜单经常显示不全:(

不过显示快捷键我觉得不太有必要,毕竟用鼠标还是多,要用键盘的话,按住 Alt 键就出快捷字母了。
Author: Passion    Time: 2005-2-25 19:48

我还真不知道得按ALT才能出来快捷键的下划线,我还以为D7的ActionMainMenubar本来就不支持快捷键显示。
Author: softsword    Time: 2005-2-25 22:08



QUOTE:
Originally posted by Passion at 2005-2-24 08:07 PM:
奇怪。
这个是Borland官方出的中文版还是民间的汉化版?

汉化版(by hjinke):
[url]http://www.hanzify.org/?Go=Show:ist&ID=6700[/url]

不过上面的图片是小弟做的。
汉化了一半的 Delphi 7,因为菜单太难看而取消汉化了。
原版既是如此,没有办法。


不过 C++Builder 6.0 汉化倒是小弟做的。
[url]http://www.hanzify.org/?Go=Show:ist&ID=4685[/url]
见笑了

[ Last edited by softsword on 2005-2-25 at 22:13 ]
Author: softsword    Time: 2005-2-25 22:12

yygw 说得不错,这个只是一个小问题。
但是这样也确实有点不方便。
快捷键字符出不来,菜单就会显得很丑。
小毛病,等 CnPack 有空了再顺便修改一下就好了。
谢谢!
Author: shenloqi    Time: 2005-2-27 15:39



QUOTE:
Originally posted by Passion at 2005-2-25 07:48 PM:
我还真不知道得按ALT才能出来快捷键的下划线,我还以为D7的ActionMainMenubar本来就不支持快捷键显示。

XP有这个选项是否需要按住Alt键后才显示快捷键的,不过D7不管这个选项都是要按住Alt后才显示的。XP的这个选项在 显示属性 - 外观 - 效果 设定。
Author: Passion    Time: 2005-2-27 15:51

对,Win2k也有。
Author: internetzs    Time: 2005-2-27 22:06

我认为快捷提示字符没有更好。有反而不好,占位置。
而且很少用到这些快捷字符,本人就从来没用过。
Author: softsword    Time: 2005-2-28 22:28

错!internetzs 的说法不对!
请你仔细看看到底有没有占用位置。
不要因为你很少用也就认为别人也很少用。
Author: internetzs    Time: 2005-3-2 12:39

我只是根据你提供的中文菜单来判断是否占位置,一般中文菜单都加括号和字母的,你的图有点误导喔。
回去看英文版的确实不占位置。

如果很多人用,这个bug当然比较明显和重要的,我想就一定会反映到Borland中去,但为何Borland在补丁1中不修正?

为一点无伤大雅问题而要劳烦yygw大师,大师级人马可不是很有空的喔,要知编程看似小问题,但解决起来就不一定简单,也许半天时间,也许3、4天,也许解决不了。

也许softsword是很必须这个功能, 而本人对这功能有无都无所谓,
看了上面几位楼主好似也没看出很需要此功能,最后还是让其他用户再发表发表。

最理想就是softsword解决了,自己动手,丰衣足食嘛,然后再把代码发给站长

[ Last edited by internetzs on 2005-3-2 at 12:42 ]
Author: zjy    Time: 2005-3-2 13:23

刚才花了几分钟查了一下,要解决这个问题其实很简单。直接给出结果对大家意义不大,我说说我是怎样分析这个问题的吧:

首先,我觉得按照产品开发的惯例,Borland 即然在 D7 中使用了这种默认不显示快捷键的菜单,应该会考虑到有不喜欢这种风格的用户。所以我猜一定有一种简单的解决办法:)

通常有两种办法可以找到答案:一种查手册,一种查 VCL 源码。作为 VCL 代码爱好者,我选择了后者。

第一步,我们知道 D7 的新主菜单工具栏用的是 TActionMainMenuBar,于是我建新工程拖一个控件上去。然后我发现在单元 uses 部分增加了几个文件,其中 ActnMenus 看起来最符合搜索的条件。

第二步,打开 ActnMenus 单元。我记得以前用过一个函数 StripHotkey 用来把标题中的热键去掉。基于代码重用的原理,Borland 的工程师应该也会想到,于是在这个单元中搜索该函数。找到这个:
procedure TCustomMenuItem.CMTextchanged(var Message: TMessage);
begin
  inherited;
  FNoPrefix := StripHotkey(Caption);
end;
OK,我们知道原来这个菜单组件在标题变更时内部保存了一份无热键的文本。

第三步,全文件搜索 FNoPrefix,找到两处与标题绘制相关的调用,分别是:
TCustomMenuItem.DrawShadowedText 和 TCustomMenuItem.DrawText,在里面进行了判断
  if Parent is TCustomActionBar then
    if not ActionBar.PersistentHotkeys then
      Text := FNoPrefix;
于是我知道 TActionBar.PersistentHotkeys 就是我要找的东西。

第四步,打开帮助查找该属性的说明,验证结论。从打开 D7 到现在,一共用了不到五分钟,结束。
Author: zjy    Time: 2005-3-2 13:35

To softsword:
如果您觉得有必要始终显示热键的话,可考虑自己解决。最简单的就是写一个单元,在 Register 过程里头找到 IDE 的主菜单,把 PersistentHotkeys 属性改成 True,再把这个单元加到随便一个包里。如果确实有需要,CnWizards 也可增加一个选项。

To internetzs:
大师这个称呼愧不敢当,请不要再用了:)
Author: softsword    Time: 2005-3-2 13:44

To internetzs:

    1。技术方面:
    按照你的意思,Borland 不在 7.1 升级包里面加上 TActionMainMenuBar 补丁就是不重要了??!为什么 Borland 又在 Delphi 2005 里面修正这个问题呢??!

    2。人品方面:
    “为一点无伤大雅问题而要劳烦yygw大师,大师级人马可不是很有空的喔”,不错, yygw 是不错、能力强,大家都明白,但是用不着你在这里阿谀奉承、溜须拍马!也不怕肉麻??!

    3。论坛方面:
    设立这个板块就是大家来提出自己的问题、见解,有话好好说。需要不需要解决由 CnPack 来决定,不需要旁人来骚扰打击。 “最理想就是softsword解决了,自己动手,丰衣足食嘛,然后再把代码发给站长”??! 如果照你这样说,设立这个论坛让大家来提建议、意见有什么用??!反正都是要自己解决!

    4。到此为止:
    我是不懂就问,因为我确实对 Delphi IDE 不熟悉。
    不象某人,唧唧歪歪半天还是不能解决问题!
    从此以后,这个问题我不会再回复你,随便你去骂好了。
    我是写程序的,不屑于与你做口舌之争!

[ Last edited by softsword on 2005-3-2 at 14:09 ]
Author: softsword    Time: 2005-3-2 13:50

To yygw:
    感谢您的指点,我会自己解决这个问题。
    这个对我不仅是个问题,更是个启发。
    再次感谢!
Author: internetzs    Time: 2005-3-2 16:42

to softsword:

   在下有些言词如有冒犯,向你道歉。都做这行,无谓意气之争。

   其实cnpack到现在确实不易也,在这论坛我经常看到很多小事,开发任务,Bug修复,计划任务等等,给我的印象中只有他们几位在进行,我不是cnpack会员,不清楚还有多少人在维护和开发。所以我想他们一定比较忙。无私的贡献,我是很敬偑。
Author: zjy    Time: 2005-3-2 19:11

softsword 朋友是论坛上发帖第二的会员,internetzs 朋友是代码输入助手等工具原始代码提供者。两位都是对 CnPack 有很大贡献的用户,希望能不打不相识,握手言和^_^

To softsword:
其实 Delphi 的 IDE 本质上也是一个支持插件的 Delphi 应用程序。由于 IDE 的开放性和 BPL 包的设计,我们自己编写的设计期包和带包编译的专家 DLL 同样可以访问 IDE 本身的任何控件。比如在专家中,带上 VCL70.bpl 包编译,存在于 Forms 单元中的 Application 这个对象,就是与 IDE 共享的了。我们在代码中用 Application.MainForm 就可以简单地取得 IDE 主窗口的实例,再用 FindComponent 或遍历主窗口的子控件就可以找到 MenuActionBar 了。

甚至于,我们可以写一个单元,只包含一个 Register 过程,里面写上:
procedure Register;
begin
  Application.MainForm.AlphaBlendValue := 150;
  Application.MainForm.AlphaBlend := True;
end;
再把这个单元加到 dclusr.dpk 里编译加载,以实现 IDE 主窗口半透明的效果。

希望这个帖子能让大家对 Delphi 和 VCL 有更多的认识。
Author: zjy    Time: 2005-3-2 19:17

To internetzs:
多谢您对我们的理解:)

CnPack 现在干活的人确实不多,其实以你已经捐献的代码量来算,已经可以排到前列了。最近我和 Passion 自己的事情确实比较多,所以更新比较少了。一般都是忙一阵子停一阵子,没办法。。。

不过我们的热情和信心都还在,要是能有更多朋友的关注和实际参与就最好了^_^
Author: zjy    Time: 2005-3-2 19:55     Subject: 关于调查

其实我很早就和开发组其它成员讨论过在 CnWizards 中增加更多的与网站的交互功能,比如发布调查、从网上获取每日一帖、允许用户之间交流等,不过由于个人隐私等问题而没有纳入开发计划。

用户的需求总是多样化的,其实也应该是这样,如果什么都统一了,世界就不那么精彩喽!
Author: softsword    Time: 2005-3-4 20:29

To internetzs:
   在下说话也有点过,我也有责任,抱歉。

To yygw:
   在下对 Delphi 不是特别熟悉,但是对于 ASP 可以说是精通毫不为过,PHP 也凑合。最近在这边一家公司实习,有点忙,来 CnPack 少了。如果网站方面需要什么功能,欢迎找我。
Author: kendling    Time: 2005-3-5 19:39

ASP?我也精通啊!!!我经常都要用ASP来开发一些程序和系统。
不过,CnPack完全是用PHP做的。
Author: zjy    Time: 2005-6-2 08:08

这个功能已经加进去了,请下载最新的构建版并在“专家设置”->“组件面板及其他扩展专家”中,打开这个选项(默认是不开启的)。在这里下载 0.7.4.87_Unstable 以上的版本:
http://www.cnpack.org/downbuilds.php

另见这个帖子的说明:
http://bbs.cnpack.org/viewthread.php?tid=580




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0