Pergunta

Eu tenho um problema que eu sou incapaz de resolver, mesmo que eu gasto muito tempo tentando fazê-lo.

Eu costumo usar GridPanels a controles alinhar em formulários. Ele tem, no entanto, um bug irritante. Quando o modo de alinhar GridPanel é alClient e eu maximizar sua janela pai, os ajustes GridPanel para o novo tamanho da janela que, no entanto, os controles colocam na grade não. Eles ficam na mesma posição em que estavam antes da janela de redimensionamento. Isso só acontece na maximização da primeira janela. Se a janela é redimensionada primeiro manualmente, everyting é OK. Eu acho que a grade ajusta seus controles filho após o segundo evento de redimensionamento (??).

O que fazer make trabalho GridPanel adequadamente se se trata deste bug? Pode ser o suficiente para enviar uma mensagem para ele (mas qual é a mensagem?), Eu não sei. Eu tentei usar realinhar Atualizar etc., mas eles não ajuda.

Obrigado por sua ajuda com antecedência,

Mariusz.

Foi útil?

Solução

Ah, eu tive problemas semelhantes também. Ele pode estar relacionado a um problema de redimensionamento na VCL. Você pode querer tentar a correção por Andreas Hausladen . Parece que funciona para mim na maioria dos casos.

Outras dicas

Eu encontrei um truque.

no evento OnResize do pai de GridPanel, largura de mudança das GridPanel por 1 pixel.

então GridPanel vai notar o tamanho alterado, rearranjar então sub-controles em GridPanel ..

amostra está abaixo ..

procedure TForm1.FormResize(Sender: TObject);
begin
  GridPanel1.Width := GridPanel1.Width - 1;  // subtract 1
  GridPanel1.Width := GridPanel1.Width + 1;  // recover width by adding 1
end; 

Alterar a largura / invalidar o controle não funciona para mim (algo mudou com versões recentes do RAD Studio?).

De qualquer forma uma solução semelhante, simples ao longo dessa linha é:

procedure TForm1.FormResize(Sender: TObject);
begin
  GridPanel1.ControlCollection.BeginUpdate;
  GridPanel1.ControlCollection.EndUpdate;
end; 

Eu tive esse erro também, em vários projetos. Eu não sei como eu resolver isso (que foi em projetos para o meu empregador anterior, eu não tenho acesso a esse código fonte mais). Eu acho que eu tinha te redesenho / actualização que quadro pai ou formulário no qual o GridPanel foi colocada.

no redimensionamento da GridPanel.Invalidate chamada proprietário. Eu não testá-lo. Espero que de trabalho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top