TCollectionEditor e editores de propriedades/componente.
11/05/2004
0
Um dos meus componentes possui uma priopriedade herdade de TCollection, com itens TCollectionItem. Esta propriedade aparece perfeitamente no Object Inspector e ao se clicar as reticencias (...) a IDE do delphi abre o editor padrao para Collections.
Porém, eu preciso saber como fazer isso ao ser dado um duplo clique no componente. No caso, seria no método override do meu ComponentEditor.
Ou seja, gostaria de saber como invocar um editorqualquer (TCollection, TDataSet) pois os componentes que eu fiz, não possuem os mesmos editores que as classes-pai das quais foram herdados.
Espero ter sido claro, e acredito que esta seja a dúvida de muitas pessoas, li ótimas reportagens na ClubeDelphi sobre como criar Componentes e Editores de Componentes que me ajudaram muito, e faltou apenas este pequeno detalhe de como utilizar editores ja prontos do delphi nos seus componentes para que as reportagens ficassem perfeitas.
Obrigado.
Thiago Vidal
Posts
11/05/2004
Comodelphi
; default;
11/05/2004
Thiago Vidal
Obrigado pela atenção.
20/02/2019
Kepler Jr
20/02/2019
Thiago Vidal
Porem, infelizmente, eu nao mais trabalho com Delphi ja ha muitos anos, sou desenvolvedor Java/Kotlin atualmente.
De qualquer forma, obrigado pela resposta, e boa sorte na sua pesquisa!
20/02/2019
Hélio Devmedia
Com duplo clique eu não sei, mas sei fazer aparecer novas opções no menu com clique do botão direito, serve?
Provavelmente, se você está trabalhando com Editores de propriedade, você já adicionou no seu package, dentro da seção requires o pacote DesignIDE:
package TesteComponentPackage; {$R *.res} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO ON} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO ON} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS OFF} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$IMPLICITBUILD ON} requires rtl, DesignIDE; contains UnitComponente in 'UnitComponente.pas'; end.
Acredito também que você fez um componente para editor de propriedade que descente de TComponentEditor, assim vc vai ter que implementar 3 métodos deste componente: GetVerbCount; GetVerb(Index: Integer) e ExecuteVerb(Index: Integer);
unit UnitComponente; interface uses DesignIntf, DesignEditors, Classes, Dialogs; type TComponenteEditorPersonalisado=class(TComponentEditor) function GetVerbCount: Integer; override; function GetVerb(Index: Integer): string; override; procedure ExecuteVerb(Index: Integer); override; end; procedure Register; implementation { TComponenteEditorPersonalisado} // Aqui você informa quantos itens você deseja adicionar no menu function TComponenteEditorPersonalisado.GetVerbCount: Integer; begin Result := 2; end; Aqui você informa os Itens que vai adicionar ao menu popup do componente function TComponenteEditorPersonalisado.GetVerb(Index: Integer): string; begin case Index of 0: Result := 'Editor de Propriedade'; 1: Result := 'Propriedade de exemplo'; end; end; //Aqui você pega pelo índice o item do menu e diz o que ele vai executar procedure TComponenteEditorPersonalisado.ExecuteVerb(Index: Integer); begin inherited; case index of 0: //comandos para abrir o editor; 1: showmessage('Não faz nada, é só exemplo'); end; end; procedure Register; begin RegisterComponents('Teste', [TComponente]); //registra o componente principal RegisterComponentEditor(TComponente, TComponenteEditorPersonalisado); //registra o menu popup que vc criou. end; end.
Clique aqui para fazer login e interagir na Comunidade :)