[quote=199829:@Cauby Osorio]O controle Canvas e Container neste meu inicio de aprendizagem é o que menos entendi até agora, tem como me enviar um pequeno trecho de código ou como usar o canvas e inserir e remover o container para eu entender melhor ?
Obrigado.[/quote]
@Cauby Osorio , não é muito simples explicar sem mostrar todo o código, o que seria inviável, por vários motivos… Mas tomando como base qualquer uma das telas acima, leve em conta que todo o espaço a direita do menu, é um canvas, que chamo de “cvMain”.
Assim, para remover e acrescentar um ContainerControl, que representa uma lista de fornecedores com um pequeno formulário, por exemplo, uso o seguinte código, que pode estar em um botão ou em um item de menu:
Case "Fornecedores"
Dim compFornecedores As New ccFornecedores
//Remover componente anterior do canvas
If Self.componente <> Nil Then
Self.componente.close
Self.componente = Nil
End If
//Mostrar no canvas
Self.componente = compFornecedores
Self.componente.EmbedWithin(cvMain, 0, 0, cvMain.Width, cvMain.Height)
Self.cvMain.Invalidate
Self.cvMain.Refresh
No código acima, estou testando vários itens de menu, e se um deles for igual a “Fornecedores”, eu instancio um novo ContainerControl chamado de ccFornecedores, verifico se já existe um ocupando o canvas, e em caso positivo, removo, e então, insiro o novo controle.
Uso esta mesma técnica para todos, e assim, mantenho o aplicativo inteiro com uma só janela. Só abro outra em caso de mensagens para o usuário, como por exemplo, pedidos de confirmação de exclusão.
Quanto ao containerControl, é bem simples de manipular. Comece com coisas simples. Um formulário, que você faria com uma Window, por exemplo, você pode fazer com um containerControl exatamente da mesma maneira. Nada diferente. Arraste um da Library para o seu navegador de projeto, dê um nome, redimensione, e acrescente nele qualquer controle que você precise, como listbox, textField, buttons, etc.
Depois, para usar, ou você arrasta ele do navegador para uma Window já existente, ou você usa a técnica que descrevi acima.
No caso de arrastar para uma janela, na minha opinião só faz sentido criar um containerControl, se você quiser reaproveitar. Imagine por exemplo, que você precise que apareça uma lista de clientes, com uma caixa de texto para pesquisa, em um formulário de vendas, e também em contas a receber. Ao invés de copiar e colar os controles e códigos, você usa um containerControl, e arrasta ele para qualquer Window que você precisar usar. Assim, qualquer alteração que você fizer no original, se reflete automaticamente em todas as instâncias dele, o que é muito prático.
Ah, ia esquecendo. No código acima, eu verifico nesta linha:
If Self.componente <> Nil Then
se já existe um containerControl no meu canvas… Para isso funcionar, eu criei uma propriedade na minha janela principal, chamada “componente”, do tipo containerControl, e a cada vez que insiro um no canvas, armazeno ele nesta propriedade, para saber depois se meu canvas está vazio ou não.
Para mostrar vários containers, simulando uma listBox, a técnica é diferente, e um pouco mais complicada. Podemos tratar dela mais a frente…
Se não fui claro o suficiente, pergunte… Vamos tentar esclarecer da melhor maneira, para que você possa entender.