Controle do posicionamento de objetos em formulários com um layout flutuante

É possível usar qualquer uma das duas maneiras para controlar como o Designer posiciona objetos em um formulário:

Áreas de conteúdo
Nas páginas mestre, as áreas de conteúdo controlam as áreas e a direção do fluxo em que o Designer posiciona objetos nas páginas. Cada página mestre tem uma área de conteúdo padrão.

Subformulários
Os subformulários controlam como o Designer posiciona os objetos no formulário. Ao vincular objetos em subformulários, é possível usar as opções nas guias Subformulário e Vínculo da paleta Objeto para controlar quantas vezes os objetos são renderizados e sua colocação na página.

Áreas de conteúdo em um layout flutuante

Todas as páginas mestre contêm uma área de conteúdo padrão, exibida nas páginas associadas. A área de conteúdo delineia a área em que você pode colocar objetos nas páginas, como as margens de documento de texto. Não é possível colocar objetos nas páginas, fora da área representada pela área de conteúdo.

Cada formulário deve ter pelo menos uma área de conteúdo.

A área de conteúdo não delineia nem limita a área em que é possível posicionar objetos nas páginas mestre. Na verdade, objetos estereotipados podem ser colocados em qualquer local nas páginas mestres, dentro ou fora da área de conteúdo. Se objetos forem colocados fora da área de conteúdo para conter texto de cabeçalho e rodapé, data e hora ou numeração das páginas, teste o formulário para garantir que os objetos apareçam conforme esperado. Verifique se os objetos nas páginas não ficaram sobrepostos nem ocultaram os objetos nas páginas mestre quando o formulário for renderizado.

Com formulários de seções que se ajustam para acomodar os dados, lembre-se de que o layout do formulário é essencialmente controlado por dados. Se o formulário for renderizado pelo Forms ou Output, as páginas serão adicionadas até que todos os dados disponíveis sejam unidos. Com a adição de novas páginas, os dados continuam de uma página para outra dentro da área definida pela área de conteúdo nas páginas mestras.

Para que cada página no formulário tenha o mesmo layout, a área de conteúdo padrão é suficiente. Entretanto, se o layout for mais complexo, será possível adicionar outras áreas de conteúdo à página mestre padrão. Lembre-se de que, para ter diferentes direções de fluxo, orientações de página ou páginas com frente e verso, é possível inserir páginas mestre adicionais e configurar as outras páginas mestre e as áreas de conteúdo para se adequarem ao projeto.

Lembre-se de que não é possível trabalhar com áreas de conteúdo nas páginas.

Subformulários em um layout flutuante

Planejar os subformulários é uma parte importante da criação de um formulário com um layout flutuante. Em um formulário com seções flutuantes, os subformulários contêm os objetos dentro de cada seção. Eles mantêm o layout do formulário à medida que ele se ajusta em comprimento de acordo com a quantidade de dados mesclados. Os subformulários também garantem que os objetos sejam movidos como uma unidade e colocados de forma consistente entre si. A vinculação de objetos em subformulários garante que, independentemente da quantidade de dados unidos ao formulário, o formato de cada seção permaneça consistente e que o layout de todo o formulário seja previsível em cada renderização.

É possível aninhar subformulários em qualquer nível. Ao aninhá-los, é possível fazer com que o design de formulário corresponda ao arquivo de dados XML que é unido. Por exemplo, se o arquivo de dados XML incluir dois níveis, será possível criar a hierarquia do subformulário fazendo a correspondência dos nomes do subformulário com os nomes das tags no arquivo de dados XML para que o Designer possa mapear os dados sem transformar o arquivo de dados.

Um formulário com layout flutuante, como a amostra de Pedido de compra, geralmente inclui vários subformulários aninhados entre si, com um ou mais objetos em cada subformulário. Por exemplo, é possível visualizar como os diferentes objetos nessa amostra são vinculados nos subformulários denominados header, detailHeader, detail e total. Observe como é possível alinhar objetos de texto e de campo de texto em linhas e colunas e vinculá-los em um subformulário. O uso de subformulários para vincular objetos, como os diversos objetos de campo de texto no subformulário detail, não apenas permite manter o layout dos objetos, como também controlar a frequência com que o subformulário é repetido.

É possível configurar cada subformulário de forma que, quando for renderizado, sejam colocados apenas os subformulários contendo os objetos necessários para representar o conteúdo de dados. Por exemplo, talvez você queira produzir diferentes pedidos de compra para cada cliente. Em um formulário de pedido de compra, o subformulário de detalhes é colocado 12 vezes para indicar os itens comprados. Em outro, o mesmo subformulário de detalhes é colocado 50 vezes e se estende por várias páginas.

A amostra do formulário Pedido de compra ilustra como é possível usar subformulários para obter essa configuração. Abra o formulário no Designer e olhe a paleta Hierarquia para examinar a estrutura do subformulário. Olhe a paleta Objeto para ver como os subformulários são configurados. Preste atenção nos subformulários purchaseOrder, detailHeader e detail e em como eles estão configurados. Lembre-se de que o subformulário pai, purchaseOrder, controla o fluxo do conteúdo no formulário e é ampliado para ajustar os dados disponíveis. O subformulário detailHeader é configurado com uma contagem mínima de 1, o que significa que quando o formulário for renderizado, esse subformulário aparecerá somente uma vez. No entanto, o subformulário de detalhe é configurado de modo que seja repetido com cada item de dados e, por isso, quando o formulário for renderizado, ele aparecerá tantas vezes quanto as ocorrências dos dados.

Também é possível usar um subformulário para desenhar uma borda em torno de um grupo de subformulários. Por exemplo, crie um ou mais subformulários dinâmicos, aninhe-os em um subformulário de vínculo e, em seguida, especifique uma borda para esse subformulário de vínculo. Quando o formulário for renderizado, será formada uma borda em volta de todos os subformulários internos.