TCollectionEditor e editores de propriedades/componente.
Estou desenvolvendo alguns componentes, e na hora de criar seus editores me deparei com um problema.
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.
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
Curtidas 0
Respostas
Comodelphi
11/05/2004
tente isto na no final da declaração da propriedade:
; default;
; default;
GOSTEI 0
Thiago Vidal
11/05/2004
Sim, fiz isto no final da declaração da propriedade, e por isso o editor de collections abre quando voce clica nas reticencias da propriedade no object inspector. Eu precisava que isto acontecesse ao dar um duplo clique no componente que contém a propriedade.
Obrigado pela atenção.
Obrigado pela atenção.
GOSTEI 0
Kepler Jr
11/05/2004
Thiago Vidal, Vc conseguiu o seu intento deste post; Pois estou tentando fazer o mesmo que vc e não consigo documentação ...
GOSTEI 0
Thiago Vidal
11/05/2004
Rapaz, tomei ate um susto mas fiquei muito feliz ao ver que meu topico de 15 anos recebeu uma resposta.
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!
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!
GOSTEI 0
Hélio Devmedia
11/05/2004
Thiago Vidal, Vc conseguiu o seu intento deste post; Pois estou tentando fazer o mesmo que vc e não consigo documentação ...
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.
GOSTEI 0