Comportamento FwLayer usando EnchoiceBar

Boa tarde, pessoal!

Estou com uma dúvida referente ao comportamento do framework FwLayer em uma tela que utilize EnchoiceBar.

Verifiquei que apesar da layer começar corretamente abaixo da EnchoiceBar, as porcentagens de ocupação da tela não são respeitadas.

Na imagem em anexo, a layer está configurada da mesma forma para ambas as telas (uma layer com 35% e outra layer com 65%), mas na com Enchoice, a layer é cortada.

Alguém saberia dizer se esse é o comportamento esperado? Quando utilizar Enchoice, devo mesmo estar alterando as porcentagens da layer? Sei que na classe FwDefSize existe um atributo que é informado se a tela usa ou não Enchoice, mas não consegui encontrar atributo similar para a FwLayer.

Estou colocando em anexo os fontes utilizados para montagem das telas.

tela_enchoice.PNG

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Boa tarde Giordano,

Aconteceu que como a Enchoice foi criada por último, o cálculo FWLayer já ocorreu com base na dialog sem outros componentes, para corrigir essa situação, você deve primeiro criar a Enchoice, dessa forma quando o FWLayer efetuar os cálculos de dimensões de suas linhas/colunas, ela já terá conhecimento que existe outro componente de interface na dialog que influenciara em seus cálculos.

Exemplo:


#include 'totvs.ch'

user function LayerEnch()
local oDlg as object
local oLayer as object
local oPnlDoc as object
local oPnlObs as object
local oWdwDoc as object
local oWdwObs as object

Define MsDialog oDlg Title 'Teste de Tela com Enchoice' From 0, 0 To 450, 700 Pixel Style DS_MODALFRAME

/*Cria a enchoide primeiro, dessa forma o Layer já terá conhecimento da enchoice e de seu tamanho*/
EnchoiceBar(oDlg,{ || oDlg:End() },{ || oDlg:End() },.F.,,,,.F.,.F.,.F.,.T.,.F.)

oLayer := FwLayer():New()

oLayer:Init(oDlg)

/*Montagem das Layers*/
oLayer:AddLine('LIN1', 035, .F.)
oLayer:AddLine('LIN2', 065, .F.)

oLayer:AddCollumn('COL1', 100, .T., 'LIN1')
oLayer:AddCollumn('COL2', 100, .T., 'LIN2')

oLayer:AddWindow('COL1', 'DOC'    , 'Dados do Manifesto'        , 100, .F. ,.T.,, 'LIN1', { || })
oLayer:AddWindow('COL2', 'OBS'    , 'Observação do Manifesto'    , 100, .F. ,.T.,, 'LIN2', { || })

/*Montagem dos Painéis*/
oPnlDoc := oLayer:GetWinPanel('COL1', 'DOC'    , 'LIN1')
oPnlObs    := oLayer:GetWinPanel('COL2', 'OBS'    , 'LIN2')

/*Informando Títulos dos Painéis*/
oLayer:GetWindow('COL1', 'DOC', @oWdwDoc, 'LIN1')
oWdwDoc:oTitleBar:oFont := TFont():New('MS Sans Serif',,16,,.T.)

oLayer:GetWindow('COL2', 'OBS', @oWdwObs, 'LIN2')
oWdwObs:oTitleBar:oFont := TFont():New('MS Sans Serif',,16,,.T.)

Activate MsDialog oDlg

return nil

Boa tarde, Daniel! Entendi, realizei um teste dessa forma e funcionou perfeitamente. Obrigado pela ajuda!