TCollectionEditor e editores de propriedades/componente.

11/05/2004

0

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.


Thiago Vidal

Thiago Vidal

Responder

Posts

11/05/2004

Comodelphi

tente isto na no final da declaração da propriedade:

; default;


Responder

11/05/2004

Thiago Vidal

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.


Responder

20/02/2019

Kepler Jr

Thiago Vidal, Vc conseguiu o seu intento deste post; Pois estou tentando fazer o mesmo que vc e não consigo documentação ...
Responder

20/02/2019

Thiago Vidal

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!
Responder

20/02/2019

Hélio Devmedia

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.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar