News & Events
Listar em ComboBox tipos Enumerados
- 13 de agosto de 2009
- Posted by: Adriano Santos
- Category: Tutoriais
Essa foi a pergunta de uma grande amigo meu hoje. Confesso que não tinha muita idéia de como fazer. Imagine a situação:
type
TMeuTipo = (Tipo1, Tipo2, Tipo3, Tipo4, Tipo5);
Como fazer isso aparecer em um ComboBox?
Bem, podemos transformar isso em Strings e então adicioná-lo ao Combo, mais ou menos assim:
[…]
TImageType = (itImage1, itImage2, itOpticFlow);
[…]
procedure…
const
ImageTypeStr = array(TImageType) of string = (‘itImage1’, ‘itImage2’, ‘itOpticFlow’);
var
I : TImageFlow;
begin
ComboBox.Clear;
for I := Low(TImageType) to High(TImageType) do
ComboBox1.Items.Add(ImageTypeStr[I]);
end;
[…]
Repare que aqui nós redeclaramos os tipos enumerados em forma de String em um Array. Interessante a solução. Mas veja: e se precisar incluir mais um item ou ainda excluir um do nosso enumerado? Teremos que mudar a string com os items de todos os lugares que tiverem essa referência. A menos que essa função esteja em um único lugar, uma unit por exemplo.
Fuçando imaginei que poderíamos fazer isso usando RTTI, como o Delphi faz. Se observar bem, o Object Inspector faz isso. Como ele faz isso? A única forma que imaginei seria usando TypeInfo. E lá vamos nós pra procurar a solução. Pra variar, caçando na net olha o que achei no link http://www.swissdelphicenter.ch/en/showcode.php?id=1071.
[…]
uses TypInfo;
[…]
type
TYourEnumType = (One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten);
[…]
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i := Ord(Low(TYourEnumType)) to Ord(High(TYourEnumType)) do
ListBox1.Items.Add(GetEnumName(TypeInfo(TYourEnumType), i));
end;
Como podemos ver, apenas um laço FOR acaba com o problema. Aqui estamos dando um FOR do menor (Low) para o maior (High) valor do tipo enumerado.
Resumo da ópera: Nem sempre as coisas são tão difíceis como imaginamos.
Fica a recomendação, esse site é cheio de coisas legais. Vale a pena dar sempre uma passada por lá.
Abs
Adriano Santos
http://www.twitter.com/delphi2delphi
http://www.twitter.com/asrsantos
Siga @tdevrocks no Twitter agora e fique por dentro de todas as atualizações do blog.
Siga também o autor @asrsantos

Adriano,
Teria como ao invez de utilizar um loop, seria possivel utilizar a função combobox.items.AddStrings(YourStringList) ?
Grato.
gostaria de saber como criar um trojan usando o delphi 6 você poderia me mandar o código desse programa passo a passo pra mim, porque minha ex namorada está me mandando muitos vírus pra mim com raiva porque terminamos e eu quero me vingar quebra esse galho ai pra mim passa o código ai valeu! para esse e-mail.
hackerpernambuco@yahoo.com.br
me passa ai umas apostilas de programação orientada a objeto em delphi
hebertonrfl@yahoo.com