我有一大堆TFrame(可能是TCustomFrame,不记得因为我在40多个帧和父级之间做了一个中间类)我继承了构成'真的很酷'的配置部分'HL7公式编辑器。什么是奇怪的,但不是重点,是框架上的DFM继续将OldCreateOrder,PixelsPerInch和TextHeight添加到DFM,即使我从未在基类中实现这些属性。
无论如何,我必须将这些属性放在我的子类中,即使我不想这样做,否则它不会让我编译,所以很好。然后我将其中一个Color Chooser控件添加到我的一个框架中,直到上周才开始给我做关于无法找到父级的业务。
所以......我摆脱了所有的DFM,我把所有的框架都改成了面板,它工作正常(在我的电脑上,在没有主题的VM中运行XP),但为我的同事在我的左边(本地运行Windows 7)我在这些面板上使用TSpeedButton做什么并不重要,它们总是有相同的Sans 10pt Bold字体,这可以工作,但我有一些奇怪的符号用于设置操作我想保留,CalcTextWidth完全失败。
我试过了:
ParentFont := true and false;
Flat := true and false;
Parent.Font := Whatever;
我只想说,我已经尝试了所有旧技巧。唯一有效的就是删除XP Manifest(我提到这是Delphi 7)。这不是一个选择,因为今年的某个时候我们将把所有东西都移到D2009那个......这不是一个选择!
真正奇怪的是,使用TFrame和DFM,它可以工作(即使使用古老的编译器)。使用TPanel它不起作用。
TPanel(或TCustomPanel,既没有工作)的主题和TFrame上的主题之间必定存在一些差异。
另外,我在按钮和TPanel之间有一个TGroupBox。也许这会导致问题。我可以很容易地改变它。
使用按钮,extctrls,stdctrls
(对于Delphi 7,将XPManifest放在您的表单上)
procedure TForm1.FormCreate(Sender: TObject);
var
Panel : TPanel;
Grp : TGroupBox;
Btn : TSpeedButton;
begin
Panel := TPanel.Create(Self);
Panel.Parent := self;
Panel.Align := alClient;
Grp := TGroupBox.Create(Panel);
Grp.Parent := Panel;
Grp.Align := alClient;
Btn := TSpeedButton.Create(Grp);
Btn.Parent := Grp;
Btn.Width := 117;
Btn.Font.Name := 'Symbol';
Btn.Caption := 'Here is some text';
end;
在Windows XP中,尝试使用2008 Server R2并只显示粗体sans字体。
我在没有Group Box的情况下尝试了这个,但它似乎有效。
(使用框架工作,但是要发布的代码太多了)
答案 0 :(得分:2)
Delphi 7于2002年8月发布.Vista于2007年推出,Windows 7于2009年推出。我认为从2002年开始编译器和开发系统与Vista / 7中的所有新功能一起使用有点儿了期望。升级,你可能会发现事情有效。
当然,升级编译器(尤其是大型应用程序)并非易事。
我确实对你有所感受,但我不会把它称为VCL中的一个错误。
答案 1 :(得分:1)
我会先尝试回答这个问题:
奇怪的是什么,但不是重点, 是框架上的DFM继续 添加OldCreateOrder,PixelsPerInch 和文本高度到DFM,即使 我从未实现过这些属性 在基类。
这可能与
有关框架继承(您的DFM文件包含错误的关键字object
,而不是inherited
,请参阅this blog posting)
您的.DPR文件,其中Frame单元后面的注释是错误的(注释实际上不是注释,它是Delphi IDE的一个提示,告诉它需要选择哪个框架,表单或数据模块设计器)
如果有帮助,请告诉我们;然后关注TSpeedButton问题。
- 的Jeroen
答案 2 :(得分:0)
好吧,我会回答一下我自己的问题,因为今天的答案不是升级。
只需覆盖TSpeedButton中的Paint函数,无论如何都不在表单上使用它。
然后,当你最终将所有1200万行代码更新到D2009时,如果再次出现问题,那么如果不需要子类TSpeedButton,则可以将该代码保留为其中一个花哨的辅助类函数。
答案 3 :(得分:0)
好的,这是有效的答案:
groupbox.ParentBackground := false
不确定为什么组框的背景会改变速度按钮的前景。