Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Delphi中的Firemonkey应用程序中更改most控件(即TPanel)的颜色(仅限XE2更新4和XE3)_Delphi_Delphi Xe2_Firemonkey - Fatal编程技术网

在Delphi中的Firemonkey应用程序中更改most控件(即TPanel)的颜色(仅限XE2更新4和XE3)

在Delphi中的Firemonkey应用程序中更改most控件(即TPanel)的颜色(仅限XE2更新4和XE3),delphi,delphi-xe2,firemonkey,Delphi,Delphi Xe2,Firemonkey,注意:这个问题是关于delphi XE2 update 4和delphi XE3中的行为,并且样式系统在XE4中发生了更改,因此这个问题不适用于delphi XE4和更高版本 许多控件,如TPanel等,不支持在不进入“样式”功能的情况下更改任何元素的颜色的简单方法 我认为它应该起作用的方式是: 创建一个表单 在表格上放一个样式本 更改或创建样式 将样式应用于控件 控件更改颜色 让我们撇开一个事实不谈,一些本应该简单的东西(就像在VCL中一样)现在被样式所困扰。Delphi XE2(Firemo

注意:这个问题是关于delphi XE2 update 4和delphi XE3中的行为,并且样式系统在XE4中发生了更改,因此这个问题不适用于delphi XE4和更高版本

许多控件,如TPanel等,不支持在不进入“样式”功能的情况下更改任何元素的颜色的简单方法

我认为它应该起作用的方式是:

  • 创建一个表单
  • 在表格上放一个样式本
  • 更改或创建样式
  • 将样式应用于控件
  • 控件更改颜色
  • 让我们撇开一个事实不谈,一些本应该简单的东西(就像在VCL中一样)现在被样式所困扰。Delphi XE2(Firemonkey Update4)使TPanel变为蓝色而不是灰色(默认值)的实际工作步骤是什么


    实际结果:当我尝试上面的方法时,我得到一个持续30秒的冻结,bds.exe的内存使用超过1GB,然后我得到一个崩溃。有时我得到“AQReporter.dll需要关闭”,有时来自其他IDE插件的其他错误,最后出现“Embarcadero RAD Studio for Windows已停止工作”错误

    事实证明,在其他错误中,有时TForm.StyleBook属性不会自动分配。如果确保已分配,则上述步骤将起作用

    快速步骤:

  • 创建表单
  • 将样式簿放到表单上,并指定form.StyleBook=StyleBook1
  • 在要修改样式的控件上单击鼠标右键,然后单击“编辑自定义样式”
  • 例如,转到“对象检查器”并修改“填充”属性以更改面板的背景色
  • 应用并关闭。(由于窗口焦点错误,可能需要单击两次、三次或四次)

  • 注意:由于“自定义样式设置”功能已从移动应用程序FMX中删除,因此此解决方案在Delphi XE4及以上版本中没有用处。

    事实证明,在其他错误中,有时TForm.StyleBook属性不会自动分配。如果确保已分配,则上述步骤将起作用

    快速步骤:

  • 创建表单
  • 将样式簿放到表单上,并指定form.StyleBook=StyleBook1
  • 在要修改样式的控件上单击鼠标右键,然后单击“编辑自定义样式”
  • 例如,转到“对象检查器”并修改“填充”属性以更改面板的背景色
  • 应用并关闭。(由于窗口焦点错误,可能需要单击两次、三次或四次)

  • 注意:由于“自定义样式设置”功能已从移动应用程序FMX中删除,此解决方案在Delphi XE4及以上版本中没有用处。

    继Warrens answer之后,对于比他使用的XE4及以上版本更新的Delphi版本,要在运行时修改面板的样式,需要在样式手册中更改样式,然后将样式重新指定给面板。具体而言:

    var
      R: TFMXObject;
    begin
      R := StyleBook1.Style.FindStyleResource('Panel1Style1');
      if R is TRectangle then
        TRectangle(R).Fill.Color := claRed;
    
      Panel1.StyleLookup := 'Panel1Style1';
    end;
    

    记住这一点很重要,要想让它发挥作用,你必须在一本样式手册中创建一个自定义样式(根据Warren的回答)。在本例中,它被称为“Panel1Style1”,但您可以用完全不同的名称替换此名称。

    继Warrens answer之后,对于比他使用的版本更新的Delphi版本,XE4及更高版本,要在运行时修改面板的样式,需要在样式手册中更改样式,然后将样式重新指定给面板。具体而言:

    var
      R: TFMXObject;
    begin
      R := StyleBook1.Style.FindStyleResource('Panel1Style1');
      if R is TRectangle then
        TRectangle(R).Fill.Color := claRed;
    
      Panel1.StyleLookup := 'Panel1Style1';
    end;
    

    记住这一点很重要,要想让它发挥作用,你必须在一本样式手册中创建一个自定义样式(根据Warren的回答)。在本例中,它被称为“Panel1Style1”,但您可以用完全不同的名称替换它。

    这可能与此相关:非常好!我认为,编写一个帮助函数库来设置firemonkey控件的颜色,等等,将所有的黑客行为封装在一个很好的东西中会很好;请说明为什么您认为这个问题很糟糕。将样式信息与表单设计器分开设置与不在代码中添加常量是一样的。它可能需要更多的工作来建立,但从长远来看更灵活。事实上,我希望他们能更进一步,从样式控制控制位置和大小。可以理解-但是许多人用特殊的颜色控制应用程序元素的外观-红色表示错误,有时选择颜色等。即使这种颜色是从“样式表设计”应用的,可能有必要在运行时修改颜色。这可能是相关的:非常好!我认为,编写一个帮助函数库来设置firemonkey控件的颜色,等等,将所有的黑客行为封装在一个很好的东西中会很好;请说明为什么您认为这个问题很糟糕。将样式信息与表单设计器分开设置与不在代码中添加常量是一样的。它可能需要更多的工作来建立,但从长远来看更灵活。事实上,我希望他们能更进一步,从样式控制控制位置和大小。可以理解-但是许多人用特殊的颜色控制应用程序元素的外观-红色表示错误,有时选择颜色等。即使这种颜色是从“样式表设计”应用的,可能需要在运行时修改颜色。我不确定这是否是一个bug,但这是一个“特性”,已经吸引了我好几次。可以在一个窗体上有多个样式本,并更改将哪个样式本指定给窗体的样式本属性。还可以将窗体的样式簿属性指定给另一窗体上的样式簿。默认情况下,将表单上创建的第一个样式集的forms StyleBook属性设置为自身。顺便说一句,如果您不创建样式集,但右键单击->编辑自定义样式集将自动创建并分配给表单。顺便说一句,Firemonkey移动应用程序上现在没有“编辑自定义样式”。不真实