Muitos dos componentes do Windows como o listview, toolbar, treeview, entre outros, utilizam listas de imagens para mostrar ícones ou bitmaps. Aprenda a criar listas de imagens com ícones em tempo de execução e faça uso desse recurso em suas aplicações.
São instâncias da classe MaskedImageList que são passadas como parâmetro para os principais componentes do Windows que utilizam listas de imagens. Essas listas de imagens utilizam instâncias da classe Icondata, que carregam um arquivo de ícone em memória.
O exemplo a seguir mostra como criar uma lista de imagens e como usá-la em um listview. O exemplo considera que um listview foi criado no programa, representado por uma variável na GS denominada umListview (obj-ref).
Defina na class-control, as classes que serão utilizadas:
class-control.
....Icondata is class "icondata"
....MaskedImageList is class "mskimglt".
Na working-storage section, crie as seguintes variáveis:
working-storage section.
77 umaLista object reference value null.
77 umIcone object reference value null.
77 wsNumeroDoIcone pic 9(09) comp-5 value zeros.
77 wsAltura pic 9(09) comp-5 value zeros.
77 wsLargura pic 9(09) comp-5 value zeros.
77 wsNumeroDoItem pic 9(09) comp-5 value zeros.
77 wsNumeroDoItem pic 9(09) comp-5 value zeros.
77 umItem object reference value null.
Depois de criado o listview, criaremos a lista de imagens que vai armazenar os ícones que serão utilizados. A classe MaskedImageList cria a lista recebendo como parâmetros a largura e a altura dos ícones, em pixéis:
CriarListaDeImagens section.
....move 16 to wsLargura wsAltura
....invoke MaskedImageList "new" using wsLargura wsAltura
....returning umaLista
Para adicionar ícones à lista, precisamos criar instâncias da classe Icondata. Para isso, vamos utilizar o método "fromFileZ". Essas instâncias serão adicionadas à lista de imagens pelo método "AddIcon". Esse método adiciona um ícone à lista e retorna como parâmetro um índice que vai identificar o ícone na lista de imagens. Depois de criada a lista de imagens, ela é passada ao listview como parâmetro do método "setSmallImages". Como a lista de imagens foi criada com ícones de 16x16 pixéis, então devemos utilizar arquivos de ícones que possuam essas mesmas características:
AdicionarIcones section.
....invoke IconData "fromFileZ" using z"printer.ico"
....returning umIcone
....invoke umaLista "addIcon" using umIcone returning wsNumeroDoIcone
....invoke IconData "fromFileZ" using z"disk.ico"
....returning umIcone
....invoke umaLista "addIcon" using umIcone returning wsNumeroDoIcone
....invoke umListview "setSmallImages" using umaLista
.....
Para indicar ao listview qual ícone utilizar em um determinado ítem, primeiro devemos pegar o ítem como uma instância da classe ListviewItem e utilizar o método "SetImageIndex", passando o índice que representa o ícone escolhido:
SetarIcones section.
....move 1 to wsNumeroDoItem
....invoke umListview "itemAtIndex" using wsNumeroDoItem
....returning umItem
....move 1 to wsNumeroDoIcone
....invoke umItem "setImageIndex" using wsNumeroDoIcone
Outros ícones podem ser adicionados a lista e outros ítens do listview podem ser mudados, utilizando os métodos demonstrados acima. Você pôde notar que os comandos mostrados necessitaram uma quantidade razável de linhas de código. A Programação Orientada ao Objeto possibilita que você crie a sua própria classe Listview e com isso, possa otimizar todos os procedimentos demonstrados nesse artigo.
Estou procurando representantes em outras cidades para que eu possa apresentar o Workshop - Programação Orientada ao Objeto com o Microfocus NetExpress. Saiba mais sobre o Workshop clicando aqui.
Nenhum comentário:
Postar um comentário