为什么可以';我在Delphi7中启用主题的TSpeedButtons上设置字体吗? 非常奇怪的事情发生了:
我继承了一大堆TFrame(可能是TCustomFrame,不记得了,因为我在40多个帧和父帧之间创建了一个中间类),以构成“非常酷”HL7公式编辑器的配置部分。奇怪的是,尽管我从未在基类中实现过这些属性,但框架上的DFM一直在向DFM添加OldCreateOrder、PixelsPerInch和TextHeight,这一点并不重要 无论如何,我必须把这些属性放在我的子类中,即使我不想,否则它不会让我编译,很好。然后,我在我的一个框架中添加了一个颜色选择器控件,直到上周它才开始让我有了找不到父对象的业务 所以。。。我去掉了所有的DFM,我把所有的框架都改成了面板,效果很好(在我的电脑上,在虚拟机中运行XP,没有主题),但对于我左边的同事(本机运行Windows 7),不管我在这些面板上用TSpeedButtons做什么,它们总是有相同的Sans 10pt粗体字体,这会起作用,但是我有一些奇怪的集合操作符号,我想保留它们,而CalcTextWidth完全失败了 我试过:为什么可以';我在Delphi7中启用主题的TSpeedButtons上设置字体吗? 非常奇怪的事情发生了:,delphi,themes,delphi-7,Delphi,Themes,Delphi 7,我继承了一大堆TFrame(可能是TCustomFrame,不记得了,因为我在40多个帧和父帧之间创建了一个中间类),以构成“非常酷”HL7公式编辑器的配置部分。奇怪的是,尽管我从未在基类中实现过这些属性,但框架上的DFM一直在向DFM添加OldCreateOrder、PixelsPerInch和TextHeight,这一点并不重要 无论如何,我必须把这些属性放在我的子类中,即使我不想,否则它不会让我编译,很好。然后,我在我的一个框架中添加了一个颜色选择器控件,直到上周它才开始让我有了找不到父对
ParentFont:=true和false代码>
Flat:=正确和错误代码>
Parent.Font:=无论什么代码>
(使用框架进行操作很有效,但代码太多,无法发布)Delphi7于2002年8月发布。Vista于2007年面世,Windows7于2009年面世。我认为期望2002年的编译器和开发系统能够与Vista/7中的所有新东西一起工作是有点过分的期望。升级后,您可能会看到这些功能正常工作 当然,升级编译器,特别是大型应用程序的编译器,从来都不容易
我真的很同情你,但我不会把它称为VCL中的bug。好吧,我会为我自己的问题写一个答案,因为今天的答案不是升级 只要重写TSpeedButton中的Paint函数,就不会在表单上使用它
然后,当您最终将所有1200万行代码更新到D2009时,如果is问题再次出现,那么如果您不想使用子类TSpeedButton,您可以将该代码保留为那些奇特的帮助类函数之一。我将首先尝试为您回答这个问题: 有什么奇怪的,但没说到点子上, 机架上的DFM一直开着吗 添加OldCreateOrder、PixelsPerInch 和文本高度到DFM,即使 我从未实现过这些属性 在基类中 这可能与其中任何一个有关
object
,而不是继承的
,请参阅)--杰罗恩好的,下面是有效的答案:
groupbox.ParentBackground:=false
不确定为什么组框的背景会改变速度按钮的前景。必须删除两件事(1)您自己的不情愿和(2)XP清单。当您移动到D2009时,让问题(重新)出现,我打赌不会出现。。。你是说这是VCL的错误?不,不是错误。只是一个旧的编译器试图用新的技术达到最佳状态。如果你认为这是一个TSpeedButton问题;然后尝试用一个简单的应用程序复制它:表单;框架速度按钮。如果它复制了,那么把这个样本添加到你的问题中,看看这里的人是否能找到一个解决办法。哇,我可以看出这真的很有帮助!现在不会回滚我的更改(除非我无法修复SturnButt事件,我确信我可以通过重写Price函数来跳过主题内容),我认为它们是更好的-即使我的代码现在看起来更像C++。只需翻转到你的版本控制系统中的版本;
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;