对象检视器中的星号代表什么?

11

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

Asterisk in object inspector

它是怎么出现的?最重要的是:它代表什么意思?

在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

1
是因为该属性被LiveBindings绑定了吗? - David Heffernan
我无法重现这个问题(我没有安装MySQL,但我在一个新的、干净的VCL表单应用程序中使用SQLite和IBToGo进行了测试)。我在任何属性上都没有看到星号。 - Ken White
活绑定可能是我的猜测,但我从未使用过,所以不确定。 - Jerry Dodge
1
我现在的结论是,星号表示params属性已被编辑。 - Wouter van Nifterick
2
我可以确认,在Params中编辑任何内容都会显示星号。好的侦探工作!你应该发布一个自我回答。 - Ken White
如果有人能够解释这是如何工作的,那么我可以奖励积分给其他人。也许这是一个特殊的属性编辑器?也许这是标准功能,并且在其他组件中也会出现? - Wouter van Nifterick
1个回答

6
您似乎已经破解了星号的含义。由于我猜测您没有设计时组件代码的来源,因此您需要依靠这种反向工程或任何可以找到的文档。
在评论中,您想知道该组件如何导致对象检查器显示星号。为了做到这一点,组件将注册一个属性编辑器,覆盖TPropertyEditor.GetName。通过这样做,它可以返回任何名称,并且对象检查器会忠实地显示该名称。
为了说明,我拿出了自己的一个属性编辑器,并进行了修改:
type
  TMinMaxGridColumnProperty = class(TFloatProperty)
  public
    function GetName: string; override;
    ....
  end;

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

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

enter image description here

因此,我几乎可以确定是你正在使用的组件造成了这种影响。设计时代码将使用组件的状态来确定是否追加星号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接