Ajude o site desativando o bloqueador de anúncio
Cabeçalho

ADVPL - TCColumn dinamico, TCColumn com imagem e TCColumn com Memo.

Autor: Eurai Criado: 14/08/2021 Atualizado: 29/11/2025 ADVPL
Postagem

🖼️ TCColumn com Imagem, Código Dinâmico e MEMO — Guia Completo

 

Em alguns cenários, é necessário criar um TCBrowser com TCColumn exibindo imagens (SIM/NÃO), conteúdo dinâmico ou até mesmo campos MEMO. A seguir, apresento exemplos funcionais e soluções avançadas para evitar erros comuns ao montar colunas em tempo de execução.

 

Abaixo, um exemplo simples de coluna que exibe imagem e coluna sem imagem:

oOk := LoadBitmap( GetResources(), "LBOK")
oNo := LoadBitmap( GetResources(), "LBNO")

oBrw01:AddColumn(
    TCColumn():New( aHead01[nI,01],
                    { || If(aBrw01[oBrw01:nAt, "+Str(nI,4)+"], oOk, oNo) },
                    "@!",,,, "LEFT", 060, .T., .F.,,,,.F. ) )  // imagem
)

oBrw01:AddColumn(
    TCColumn():New( aHead01[nI,01],
                    { || aBrw01[oBrw01:nAt, "+Str(nI,4)+" ] },
                    "@!",,,, "LEFT", 060, .F., .F.,,,,.F. ) )  // dados
)

 

Quando o browser é criado dinamicamente (headers criados em loop), montar o codeBlock diretamente pode causar erros, pois o valor do loop (nI) muda durante a execução. Por isso, é necessário converter o codeBlock para string e executá-lo por macro.

 

Exemplo correto (com macro):

oBrw01:AddColumn(
    TCColumn():New( aHead01[nI,01],
                    &("{ || aBrw01[oBrw01:nAt, "+Str(nI,4)+"] }"),
                    "@!",,,, "LEFT", 060, .F., .F.,,,,.F. ) )

 

Observe que o bloco foi convertido em string e reconstruído no momento da criação. Se você tentar enviar o bloco diretamente, ocorrerá erro:

oBrw01:AddColumn(
    TCColumn():New( aHead01[nI,01],
                    { || aBrw01[oBrw01:nAt, 01] },
                    "@!",,,, "LEFT", 060, .F., .F.,,,,.F. ) )

Nesse caso o valor 01 não acompanhará o loop e o browser irá “quebrar”.

 


📝 Criando TCColumn com MEMO

Para criar uma coluna tipo MEMO, exibindo apenas uma palavra fixa (“MEMO”), faça:

oBrw01:AddColumn(
    TCColumn():New( aHead01[nI,01],
                    { || "MEMO" },
                    "@!",,,, "LEFT", 060, .F., .F.,,,,.F. ) )

O texto “MEMO” é exibido na coluna. Depois, no método de duplo clique da classe do browser:

  • Identifique a coluna clicada (browser:nColPos)
  • Identifique a linha selecionada (browser:nAt)
  • Se for a coluna do MEMO → abra o texto real armazenado no array

Você pode:

  • Abrir um Dialog com tMultiGet + CONTROL_ALIGN_ALLCLIENT
  • Carregar o texto completo dentro desse memo

Outra solução é exibir um MEMO fixo ao lado do browser, e no evento de troca de linha, carregar o respectivo conteúdo do array.

 


Esse é um assunto avançado, especialmente envolvendo codeblocks, macro e browsers dinâmicos. Se quiser, posso preparar outros exemplos detalhados sobre manipulação avançada de TCColumn e browsers.

 

Gostou? Compartilhe com seus amigos e deixe um comentário! 😎

Um abraço, e até a próxima! 👋

 

#advpl #protheus #tccolumn #tcbrowser #macro #codeblock #totvs #programacaoadvpl #memo #universoadvpl #tela dinamica #gui advpl

ASSINE A NEWSLETTER

Cadastrando...

PIX uDesenv

PIX QR Code para depósito

Clique para doar

Parceiros

Tudo em ADVPL - Blog parceiro

Blog ADVPL