Emerson's profileEspaço de Emerson Santon...BlogNetworkSkyDrive Tools Help

Blog


    January 14

    As surpresas do controle grid

    Sempre achei o controle grid do VFP limitado... até o dia em que Cetin Basoz (Universal Thread) me disse algo que é óbvio, mas nunca havia parado para pensar: é possível inserir em uma coluna do grid qualquer tipo de controle: image, editbox, grid, container, etc.

    Inserir outros controles nas colunas do grid é mais fácil do que você pode imaginar e, dependendo do que você deseja fazer, não necessite de nenhuma linha de código!

    Quer saber como? Baixe aqui o exemplo desenvolvido com o VFP 9 e leia com atenção o tutorial abaixo.

    A base de dados

    No exemplo serão utilizadas duas tabelas: Equipes (tabela pai) e Membros (tabela filho).
    Ambas pertencem ao banco de dados Empresas e são relacionadas através do campo pkEquipe (chave primária da tabela pai) e fkEquipe (chave estrangeira da tabela filho).

    O form e o ambiente de dados

    Crie um form e adicione ao Data Environment as duas tabelas.
    Note que, pelo fato de existir uma integridade referencial entre elas, ao adiciona-las, automaticamente é criado um relacionamento.
    Configure a propriedade InitialSelectedAlias do Data Environment para que a tabela Equipes seja selecionada ao abrir o form.

    O grid

    Crie um grid e configure as propriedades (na barra de ferramentas Properties) ColumnCount como 2 e RecordSource como Equipes.
    Na barra de ferramentas Properties, selecione o controle textbox da coluna 1 do grid, clique na barra de título do form, pressione a tecla Delete e confirme a exclusão do controle textbox.
    Repita o procedimento acima na coluna 2.
    Até aqui, nenhuma novidade. O grid será utilizado para navegar pelos registros da tabela Equipes.

    Os objetos que serão incluídos no grid

    Crie um container e adicione a ele os seguintes controles: image, textbox e editbox.
    Configure a propriedade ControlSource dos controles textbox e editbox como Equipes.NomeEquipe e Equipes.Observacoes respectivamente.
    Configure a propriedade PictureVal do controle image como Equipes.Logotipo.
    Clique no controle container, pressione CTRL+X e, em seguida, clique com o botão direito do mouse no grid, selecione a opção Edit no menu de atalho; clique na coluna 1 do grid e pressione CTRL+V.
    O container será utilizado para exibir os dados do registro atual da tabela Equipes.

    Crie mais um grid e configure as propriedades (na barra de ferramentas Properties) ChildOrder como fkEquipe, ColumnCount como 3, LinkMaster como Equipes, RecordSource como Membros e RelationalExpr como pkEquipe.
    Configure a propriedade ControlSource das colunas 1, 2 e 3 como Membros.Membro, Membros.Cargo e Membros.Plataforma respectivamente.
    Clique no grid, pressione CTRL+X e, em seguida, clique com o botão direito do mouse no grid1, selecione a opção Edit no menu de atalho; clique na coluna 1 do grid1 e pressione CTRL+V.
    O grid será utilizado para exibir os registros da tabela Membros correspondentes ao registro da tabela Equipes.

    Ooops, o que aconteceu com o logotipo?

    Se você executar o form neste momento, perceberá que o logotipo exibido em todos os registros é o mesmo. Não se assuste!
    Para exibir o logotipo correspondente seria necessário que o VFP reavaliasse a propriedade PictureVal a cada registro (assim como a propriedade ControlSource), o que não ocorre.
    Então não é possível exibir uma imagem diferente para cada registro? Sim, é possível.
    Crie um método no form chamado Imagem e digite nele o seguinte comando:

    WITH THISFORM.o_grid1.Column1.o_container1
       .o_image1.PICTUREVAL = equipes.logotipo
    ENDWITH
    

    Configure a propriedade DynamicBackColor da coluna 1 do grid1 como ThisForm.Imagem().
    A propriedade DynamicBackColor é reavaliada a cada mudança de registro na tabela. Incluindo a chamada ao método Imagem nesta propriedade, o logotipo será exibido corretamente.

    Conclusão

    Qualquer versão do Visual FoxPro permite a inserção de objetos nas colunas do grid.
    A exceção fica por conta do armazenamento da imagem em um campo do tipo BLOB na tabela e da propriedade PictureVal do controle image (versão 9) e de algumas propriedades relativas ao layout dos controles (implementadas a partir da versão 8).
    Agora, é só trabalhar o layout dos controles para que o resultado seja agradável para os usuários. Veja a figura abaixo:

    artigo1

    October 20

    Material da palestra sobre "Como melhorar a aparência de seus aplicativos"

    Conforme prometido, estou disponibilizando o material que apresentei na Conferência de Desenvolvedores VFP - 2008, sobre "Como melhorar a aparência de seus aplicativos".

    Você pode baixar a apresentação clicando aqui.

    Como o foco principal foi a utilização dos ThemedControls, veja abaixo algumas telas de aplicativos que os utilizam (clique na imagem para amplia-la):

     

    Mauricio Marques_1 Paulo Henrique_1

    Maurício Marques - Moshe

    Paulo Henrique - PWI
       
    Rick Schummer Koen Piller_4
    Rick Schummer Koen Piller
    September 10

    Novo recurso no ZoomNavBar

    Atendendo a inúmeros pedidos, implementei um novo recurso no controle ZoomNavBar.

    Agora é possível desabilitar/habilitar um botão passando um parâmetro para os métodos AddButton e AddStackButton (no momento de sua criação) ou ainda utilizando os novos métodos SetButtonState and SetStackButtonState.

    O controle ZoomNavBar faz parte dos ThemedControls que você pode baixar aqui.

    Abaixo você pode conferir uma prévia do novo recurso...

    ZoomNavBar_NewDisableFeature