🖼️ 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