【问题标题】:What does an asterisk in the Object Inspector mean?对象检查器中的星号是什么意思?
【发布时间】:2014-06-01 18:57:32
【问题描述】:

在 Delphi 的对象检查器中,我看到属性名称后面有一个星号 (ConnectionName*):

它是如何到达那里的,最重要的是:它是什么意思?

在 TMySQLConnection 的源代码中我没有看到任何特别之处,所以我猜这是一些设计时的东西?

更新

它与 TSQLConnection 的内容有关。

要重现,请将下面的代码粘贴到表单上。

经过一番尝试,我得出结论,当 Params 属性被编辑以使其不再具有默认值时,会出现星号。不过,这对我来说仍然是个谜。

object SQLConnection1: TSQLConnection
  ConnectionName = 'MySQLConnection'
  DriverName = 'MySQL'
  LoginPrompt = False
  Params.Strings = (
    'DriverUnit=Data.DBXMySQL'

      'DriverPackageLoader=TDBXDynalinkDriverLoader,DbxCommonDriver190.' +
      'bpl'

      'DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader,Borla' +
      'nd.Data.DbxCommonDriver,Version=19.0.0.0,Culture=neutral,PublicK' +
      'eyToken=91d62ebb5b0d1b1b'

      'MetaDataPackageLoader=TDBXMySqlMetaDataCommandFactory,DbxMySQLDr' +
      'iver190.bpl'

      'MetaDataAssemblyLoader=Borland.Data.TDBXMySqlMetaDataCommandFact' +
      'ory,Borland.Data.DbxMySQLDriver,Version=19.0.0.0,Culture=neutral' +
      ',PublicKeyToken=91d62ebb5b0d1b1b'
    'GetDriverFunc=getSQLDriverMYSQL'
    'LibraryName=dbxmys.dll'
    'LibraryNameOsx=libsqlmys.dylib'
    'VendorLib=LIBMYSQL.dll'
    'VendorLibWin64=libmysql.dll'
    'VendorLibOsx=libmysqlclient.dylib'
    'MaxBlobSize=-1'
    'DriverName=MySQL'
    'HostName='
    'Database='
    'User_Name=xxx'
    'Password='
    'ServerCharSet='
    'BlobSize=-1'
    'ErrorResourceFile='
    'LocaleCode=0000'
    'Compressed=True'
    'Encrypted=False'
    'ConnectTimeout=60')
  Left = 48
  Top = 24
end

【问题讨论】:

  • 是不是因为属性被LiveBindings绑定了?
  • 我无法重现该问题(我没有安装 MySQL,但我在一个新的、干净的 VCL 表单应用程序中使用 SQLite 和 IBToGo 进行了测试)。我没有在任何属性上看到星号。
  • Live Bindings 是我的猜测,但从未使用过所以不知道
  • 我现在的结论是,星号表明params 属性已被编辑。
  • 我可以确认在Params 中编辑任何内容都会显示星号。不错的侦探作品!你应该发布一个自我回答。

标签: delphi delphi-xe5 delphi-ide object-inspector


【解决方案1】:

您似乎对星号的含义进行了逆向工程。由于我猜您没有设计时组件代码的来源,因此您需要依赖此类逆向工程或您可以找到的任何文档。

在 cmets 中,您想知道组件如何使 Object Inspector 显示星号。为此,该组件将注册一个覆盖TPropertyEditor.GetName 的属性编辑器。通过这样做,它可以返回它喜欢的任何名称,并且对象检查器将忠实地显示该名称。

为了说明我已经使用了我自己的一个属性编辑器,并像这样修改它:

type
  TMinMaxGridColumnProperty = class(TFloatProperty)
  public
    function GetName: string; override;
    ....
  end;

function TMinMaxGridColumnProperty.GetName: string;
begin
  Result := inherited GetName + '*';
end;

现在此属性编辑器提供的属性在对象检查器中显示如下:

所以我几乎可以肯定,这就是您正在使用的组件是如何影响这一点的。设计时代码将使用组件的状态来确定是否附加星号。

【讨论】:

    猜你喜欢
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2010-10-09
    • 1970-01-01
    • 2018-08-04
    相关资源
    最近更新 更多