Tipo enumerado como propriedade
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?
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
Curtidas 0
Respostas
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.
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
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:
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
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