É uma boa ideia posicionar e dimensionar dinamicamente os controles em um formulário ou configurá-los estaticamente?

5

Trabalhei principalmente com ferramentas de construção de interface como o Construtor de Interface do xCode e o ambiente do Visual Studio para colocar formulários e posicioná-los nas telas. Mas eu estou achando que com o meu último projeto, colocar controles no formulário através de uma interface gráfica não vai funcionar. Isso tem mais a ver com o número de controles personalizados que tenho que criar que não posso ver visualmente antes.

Quando comecei a abordar isso, comecei a posicionar todos os meus controles em relação aos últimos que criei. Fazer isso tinha suas próprias vantagens e desvantagens. Por um lado, isso me deu a oportunidade de definir um número (uma margem, por exemplo) e, quando alterei a margem, os controles foram dimensionados corretamente (como encurtar os controles no centro e manter os controles próximos à margem). o mesmo). Mas isso começou a se tornar uma teia de códigos que eu sabia que não iria muito longe antes de ficar perigosa. Altere um número e todos os tamanhos, mas remova um controle e você criou muitos mais erros e problemas de tamanho para todos os outros controles. Tornou-se mais cirurgia, depois pequenas mudanças nos controles e no layout.

Existe uma boa maneira ou talvez uma maneira preferida de determinar quando devo usar posicionamento relativo ou absoluto em formulários?

    
por CrystalBlue 28.02.2011 / 23:05
fonte

4 respostas

2

Tudo depende do seu objetivo final.

  • Deseja permitir que seus usuários redimensionem a janela?
  • Vale a pena o tempo?

Dependendo do projeto, você verá que definir um tamanho de janelas fixo é muito mais econômico, especialmente se essa for uma ferramenta interna que não é destinada ao público.

A melhor solução é permitir que seu programa reposicione os itens de acordo com o tamanho da janela. Uma boa abordagem seria posicionar absolutamente os elementos dentro dos contêineres e deixar os contêineres reais se expandirem, redimensionar o que quer que seja. Em seguida, os controles individuais dentro desses contêineres se estenderiam para preencher seu pai.

Algumas estruturas permitem isso mais facilmente que outras. Para o Windows Forms, isso pode ser feito, mas é demorado e parece que não combina bem com o framework.

O Windows Presentation Foundation tem isso incorporado e, se você tiver experiência em criar sites com HTML e CSS, verá que o XAML é praticamente o mesmo princípio. Algumas diferenças estão lá, mas na maior parte você vai se sentir em casa.

Como você não mencionou uma estrutura específica, respondi com base nos dois frameworks que mais uso.

    
por 28.02.2011 / 23:34
fonte
0

Não tenho certeza de como o IB faz isso, mas se eu precisar criar controles que serão movidos ou redimensionados se eles estiverem no Delphi, posso fazer isso com os controles ' Align e Anchors propriedades.

Align permite definir um controle para ocupar todo o espaço disponível ou todo o espaço disponível em um lado da área cliente do pai. (Por exemplo, definir Align to alTop e atribuir ao controle um Height de 20 significa que não importa como você redimensiona as coisas, isso sempre ocupará uma faixa de 20 pixels de altura ao longo da parte superior de seu pai.)

Anchors , por outro lado, é usado para manter a posição e os atributos de um controle em relação às bordas do formulário. É definido como um bitset representando as quatro arestas do formulário. Por exemplo, a maioria dos controles está ancorada na parte superior e esquerda, mas se eu fizer uma caixa de diálogo redimensionável, posso ancorar os botões OK e Cancelar na parte inferior e direita, para que eles sempre apareçam na mesma posição em relação a o canto inferior direito do formulário. Ancorar um controle nas bordas opostas (esquerda + direita ou superior + inferior) significa que o controle se estenderá ou encolherá junto com o formulário se ele for redimensionado ao longo dessa dimensão.

É assim que é feito no Delphi, pelo menos. Veja se os designers de formulários que você está usando suportam propriedades semelhantes. Em caso afirmativo, facilitará muito o seu trabalho e simplificará muito o trabalho da "teia de aranha".

    
por 28.02.2011 / 23:24
fonte
0

Bem, não é para os fracos de coração, mas há muito tempo quando eu era criativo, criei uma maneira mongrel de fazer isso chamado Dynamic Dialogs, baseado em uma estrutura de controle chamada Execução Diferencial .

A ideia básica não é muito estranha. Você tem uma única função chamada Contents () e uma variável de modo "global" com 3 valores possíveis, SHOW, UPDATE e ERASE. Quando o Contents () é executado no modo SHOW, ele cria controles e os torna visíveis, calculando suas posições à medida que vão. Modo ERASE apenas se livrar deles. O modo UPDATE assume que os controles já estão lá, mas recalcula suas posições (e outras propriedades) e somente os move ou altera, se necessário. O processo é rápido, pois os controles já estão lá. Ao ter uma função faz 3 coisas diferentes, além da vinculação de dados, ela obedece ao princípio DRY. Para adicionar ou remover um controle pode ser uma edição de código de 1 linha.

O mesmo conceito também pode ser usado para manipular eventos nos controles, como cliques de botão ou eventos de alteração de edição. Isso evita ter que criar funções de manipulador de eventos e permite um grande número de controles sem confusão.

A dificuldade vem na organização das alças de controle e o que fazer se o procedimento Contents () contiver instruções condicionais como "if" e "for".

    
por 28.02.2011 / 23:45
fonte
0

Você pode querer olhar para o documento Morphic . O sistema Morphic faz muito desse tipo de trabalho - por exemplo, garante que vários componentes sejam organizados adequadamente na tela automaticamente, com base nas diretrizes do designer (por exemplo, com base nas regras de alinhamento), em oposição a definições estritas. definições de layout.

    
por 01.03.2011 / 03:16
fonte