2013-03-04 12 views
6

Sto scrivendo un editor di componenti personalizzato, essenzialmente simile all'editor TActionList in quanto consente la creazione di sotto componenti. L'editor dispone di pulsanti per aggiungere/eliminare componenti.Designer Delphi, il componente è ereditato?

Ora, vorrei sapere se il componente selezionato è ereditato, in modo da poter disabilitare il pulsante Elimina. Non ho trovato alcun membro del genere in IDesigner o interfacce correlate.

Se mi basta andare avanti e cancellare dalla Designer.DeleteSelection(True); tanto sono un'eccezione:

selezione contiene un componente, xxx, introdotto in un degli antenati e non può essere eliminato.

Quale non è male, ma preferirei disabilitare il pulsante Elimina in primo luogo.

+0

È possibile accedere all'elenco dei propri articoli quando li si seleziona nella visualizzazione elenco (?) E chiedere per ciascun elemento se "InheritsFrom" è una determinata classe. – TLama

+1

@TLama No, non è quello. Daniel parla dell'ereditarietà visiva, come indicato dalla parola chiave ereditata nei file .dfm. –

+0

Sarei sorpreso se fosse possibile. Prova a fare ciò che descrivi con un oggetto 'TActionList'. Il messaggio di errore è: 'Impossibile rinominare il componente Action1, il componente è stato introdotto in un modulo antenato. '. Ma poi clicca sull'azione e sparisce comunque e c'è un altro messaggio di errore: * Argomento fuori dall'intervallo *. Quindi, l'IDE non può farlo bene! –

risposta

8

Ok, quindi a quanto pare c'è un modo, controllando il TComponent.ComponentState per csAncestor, quindi:

csAncestor in ComponentState

Ed è documented:

csAncestor - The componente è stato introdotto in una forma di antenato. Impostato solo se è impostato anche csDesigning.

+2

Molto buono. Molto bene. Forse qualcuno dovrebbe dirlo a Embarcadero in modo che possano aggiustare il loro editor della lista azioni !! –

+0

+1 buon lavoro .... – bummi

Problemi correlati