2014-04-17 12 views
11

In ispettore oggetto di Delphi, vedo un asterisco dietro un nome di proprietà (ConnectionName*):Che cosa significa un asterisco nell'Object Inspector?

Asterisk in object inspector

Come ci si arriva lì, e soprattutto: che cosa significa?

Nel codice sorgente per TMySQLConnection non vedo nulla di speciale, quindi immagino che sia una cosa in fase di progettazione?

aggiornamento

Ha qualcosa a che fare con il contenuto del TSQLConnection.

Per riprodurre, incollare il codice riportato di seguito su un modulo.

Dopo aver giocato, concludo che l'asterisco appare quando la proprietà Params viene modificata in modo che non abbia più i valori predefiniti. Per me è ancora un mistero come questo sia stato realizzato.

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

È perché la proprietà è associata a LiveBindings? –

+0

Non riesco a riprodurre il problema (non ho installato MySQL, ma ho provato con SQLite e IBToGo in una nuova, pulita app per moduli VCL). Non vedo un asterisco su nessuna proprietà. –

+0

I live binding sono la mia ipotesi, ma non l'ho mai usato quindi non lo saprei –

risposta

6

Hai sembrava avere il reverse engineering il significato della asterisco. Dal momento che suppongo tu non abbia una fonte per il codice componente del design, dovrai fare affidamento su tale reverse engineering o qualsiasi documentazione che puoi trovare.

Nei commenti ci si chiede come il componente possa far sì che Object Inspector visualizzi l'asterisco. Per fare ciò, il componente registra un editor di proprietà che sostituisce TPropertyEditor.GetName. In questo modo può restituire qualsiasi nome esso desideri e l'Ispettore oggetti visualizzerà fedelmente quel nome.

Per illustrare Ho preso uno dei miei editor di proprietà, e fatto in giro in questo modo:

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

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

E ora le proprietà che sono serviti da questo editor di proprietà appaiono come questo in Inspector:

enter image description here

Così sembra quasi certo a me che questo è come il componente che si sta lavorando con sta effettuando questo. Il time code del progetto utilizzerà lo stato del componente per determinare se aggiungere o meno l'asterisco.