Os editores de componentes permitem ao desenvolvedor configurar múltiplas propriedades, facilitando a edição do componente. A criação de editores de componentes pode ser personalizada, possibilitando abrangentes formas de integração entre o editor de componente e seu componente a ser editado.
Estão acessíveis através do clique do botão direito do mouse sobre um componente em tempo de projeto, exibindo um menu com itens padrões e itens que dão acesso aos editores de componentes do componente especifico.
Formulário do editor de componente
Primeiramente deve-se criar o formulário (File> New> Form). Após a criação do formulário, trabalhe nele para que seja usado posteriormente como o editor de componente. Esta é uma descrição básica de um formulário editor de componente:
Estão acessíveis através do clique do botão direito do mouse sobre um componente em tempo de projeto, exibindo um menu com itens padrões e itens que dão acesso aos editores de componentes do componente especifico.
Formulário do editor de componente
Primeiramente deve-se criar o formulário (File> New> Form). Após a criação do formulário, trabalhe nele para que seja usado posteriormente como o editor de componente. Esta é uma descrição básica de um formulário editor de componente:

object FormComponentEditorTest: TFormComponentEditorTest
BorderStyle = bsDialog
Caption = ‘Editor de Componente’
object Edit1: TEdit
Text = ‘Texto’
end
object BitBtn1: TBitBtn
Kind = bkOk
end
object BitBtn2: TBitBtn
Kind = bkCancel
end
Componente não visual
O editor de componentes definirá os valores das propriedades do componente. Esta é uma descrição básica de um componente que possui um editor de componente:
type
TComponentTest = class(TComponent)
private
...
FText: String;
procedure SetText(Value: String);
...
public
...
function Execute: Boolean;
...
published
...
property Text: String read FText write SetText;
...
end;
O código responsável pela criação do formulário editor de componente está na função Execute, que cria o formulário e determina os valores que o componente adquire do formulário editor de componente. Esta é uma descrição da função Execute:
function TComponentTest.Execute: Boolean;
var
FormComponentEditor: TFormComponentEditorTest;
begin
try
FormComponentEditor.Edit1.Text:= FText;
if FormComponentEditor.ShowModal = mrOk then
begin
Result:= True;
FText:= FormComponentEditor.Edit1.Text;
end
else
Result:= False;
end;
finally
FormComponentEditor.Free;
end;
end;
Editor de componente
O editor de componente deve criar no menu que é exibido ao clicar com o botão direito no componente os itens que dão acesso aos formulários editores de componente. Esta é uma descrição básica de um editor de componente:
BorderStyle = bsDialog
Caption = ‘Editor de Componente’
object Edit1: TEdit
Text = ‘Texto’
end
object BitBtn1: TBitBtn
Kind = bkOk
end
object BitBtn2: TBitBtn
Kind = bkCancel
end
Componente não visual
O editor de componentes definirá os valores das propriedades do componente. Esta é uma descrição básica de um componente que possui um editor de componente:
type
TComponentTest = class(TComponent)
private
...
FText: String;
procedure SetText(Value: String);
...
public
...
function Execute: Boolean;
...
published
...
property Text: String read FText write SetText;
...
end;
O código responsável pela criação do formulário editor de componente está na função Execute, que cria o formulário e determina os valores que o componente adquire do formulário editor de componente. Esta é uma descrição da função Execute:
function TComponentTest.Execute: Boolean;
var
FormComponentEditor: TFormComponentEditorTest;
begin
try
FormComponentEditor.Edit1.Text:= FText;
if FormComponentEditor.ShowModal = mrOk then
begin
Result:= True;
FText:= FormComponentEditor.Edit1.Text;
end
else
Result:= False;
end;
finally
FormComponentEditor.Free;
end;
end;
Editor de componente
O editor de componente deve criar no menu que é exibido ao clicar com o botão direito no componente os itens que dão acesso aos formulários editores de componente. Esta é uma descrição básica de um editor de componente:

uses
DesignEditors, DesignIntf;
type
TComponentEditorTest = class(TComponentEditor)
function GetVerbCount: Integer; override;
function GetVerb(Index: Integer): String; override;
procedure ExecuteVerb(Index: Integer); override;
procedure Edit; override;
end;
A função GetVerbCount retorna o número de itens que são exibidos:
function TComponentEditorTest.GetVerbCount: Integer;
begin
Result:= 2;
end;
A função GetVerb determina os itens adicionais do menu:
function TComponentEditorTest.GetVerb(Index: Integer): String;
begin
case Index of
0: Result:= ‘Component About’;
1: Result:= ‘Component Editor Form’;
end;
end;
O procedimento ExecuteVerb define a ação de cada item do menu:
procedure TComponentEditorTest.ExecuteVerb(Index: Integer);
begin
case Index of
0: MessageDlg(‘Component Editor – Message Dialog’, mtInformation, [mbOk], 0);
1: with Component as TComponentTest do
Execute;// ou (Component as TComponentTest).Execute;
end;
end;
O procedimento Edit é executado ao dar um clique duplo no componente em tempo de projeto:
procedure TComponentEditorTest.Edit;
begin
ExecuteVerb(1);
end;
Ao final do código, o menu estará com os novos itens definidos pelo desenvolvedor adicionados:

Certifique-se de que todas as unidades necessárias estejam na cláusula uses.
Registre o editor para poder utilizá-lo:
procedure Register;
begin
RegisterComponentEditor(TComponentTest, TComponentEditorTest);
end;
Por Felipe Ferreira da Silva
Registre o editor para poder utilizá-lo:
procedure Register;
begin
RegisterComponentEditor(TComponentTest, TComponentEditorTest);
end;
Por Felipe Ferreira da Silva
2 comentários:
amigo, nao estou conseguindo fazer esse editor, tem como voce mandar um exemplo??
meu email é rpdesign@gmail.com
vc ja teve algum problema de quando alterar a propriedade por esse editor, ele nao atualizar no objectInpector, ele só atualiza se vc mexer o componente.
Postar um comentário