Tipo enumerado como propriedade

Delphi

16/03/2007

Estou criando um componente e nele há uma propriedade que é um tipo enumerado. Eu gostaria de exibir no object inspector algo como uma tradução para o tipo enumerado e não o próprio tipo.

Por exemplo: tenho o seguinte tipo enumerdo:

TNumericOperator = (noIgual, noDiferente, noMaiorQue, noMenorQue);

Gostaria de exibir na combo da propriedade um texto. Algo como: ´Igual a´, ´Diferente de´, ´Maior que´, ´Menor que´.

Alguem sabe se isso é possivel? E se for, como posso fazer?


Rjun

Rjun

Curtidas 0

Respostas

Massuda

Massuda

16/03/2007

Nunca fiz isso, mas imagino que seja possível você ter seu próprio [b:bbc6bc0d43]property editor[/b:bbc6bc0d43] através do Open Tools API (OTA).

Um bom ponto de partida é esta :arrow: [url=http://www.gexperts.org/opentools/]página[/url] no site do GExperts e acho que todas as versões do Delphi sempre vieram com demos usando OTA.


GOSTEI 0
Michael

Michael

16/03/2007

[b:b089f5392f]Massuda [/b:b089f5392f]está correto, vc precisa de um editor de propriedade para isso. Será necessário implementar os métodos [b:b089f5392f]GetAttributes [/b:b089f5392f]e [b:b089f5392f]GetValues [/b:b089f5392f]da classe [b:b089f5392f]TPropertyEditor[/b:b089f5392f].

O primeiro deverá retornar [b:b089f5392f]paValueList [/b:b089f5392f]para dizer ao IDE que sua propriedade será uma lista de valores. Já o segundo deve usar a função passada como parâmetro para inserir os itens:

procedure TMyPropertyEditor.GetValues(Proc: TGetStrProc);
begin
  Proc(´Igual a´);
  Proc(´Diferente de´);
  Proc(´Maior que´);
  //...
end;


Pessoalmente eu acho esse mecanismo um pouco rudimentar. Seria mais elegante se [b:b089f5392f]GetValues [/b:b089f5392f]passasse um objeto do tipo [b:b089f5392f]TStrings[/b:b089f5392f].

[b:b089f5392f]Nota:[/b:b089f5392f] O mostrado até aqui apenas exibe a propriedade como uma ComboBox no Object Inspector. Vc precisará internamente de um campo do seu tipo enumerado.

Quando o usuário selecionar algum valor na lista, o método [b:b089f5392f]SetValue [/b:b089f5392f]será invocado. Vc deve, portanto, sobrescrevê-lo para atribuir o valor correto para seu campo interno. Já para exibir o elemento selecionado no Object Inspector, implemente [b:b089f5392f]GetValue[/b:b089f5392f].

Qualquer dúvida sobre editores de propriedade, vc pode consultar o meu artigo sobre o assunto, publicado há algum tempo no site da Devmedia - https://www.devmedia.com.br/articles/viewcomp.asp?comp=1116 - ou postar aqui.

[]´s


GOSTEI 0
POSTAR