Bug feito - Mas é do Delphi ou Windows

Delphi

14/06/2004

Amigos, comecei a ter um problema com a CLX onde nao aparecia simplesmente alguns itens de uma janela...

Descobri que existe um limite de 46 em uma castada de filhos de um parent...ex: parent.parent.parent.parent... de um objeto

O Codigo abaixo ilustra meu teste (um form com um botao)
procedure TForm1.Button1Click(Sender: TObject);
var
  fp: TWinControl;
  pnl: TPanel;
  i: Integer;
begin
  fp := Form1;
  for i := 1 to 47 do // <- mude para 46 e funcionara
  begin
    pnl := TPanel.Create(fp);
    pnl.Parent := fp;
    pnl.Align := alClient;
    pnl.BorderWidth := 2;
    pnl.Caption := inttostr(i);
    fp := pnl;
  end;
end;

Alguem tem alguma ideia do porque disso?
é do windows ou do Delphi este limite...?

SImplesmente somem os items da tela na CLX e na VLC da um erro doido.

Abracao


Welter

Welter

Curtidas 0

Respostas

Afarias

Afarias

14/06/2004

hahahahaha... tô até agora pensando qual uso vc vai dar a isso Welter!

Falando nisso, ´containers´ (como TPanel) são componentes bem pesados, de forma q eu sugiro q nunca use tantos assim pois deixará tua aplicação uma alta consumidora de memória.

Mas quanto a sua questão, realmente não sei responder. Mas, acredito q seja limitação (não bug) do Windows.



T+


GOSTEI 0
Welter

Welter

14/06/2004

Pode crer amigo, uso e uso muito isso.

A aplicação que estamos trabalhando na empresa tem todas as suas telas posicionadas sobre um mesmo form, ou seja sao encadeadas. Por isto existe a sobreposição de panels. Cada form tem um frame e este frame vem pela rede ja que a aplicação e MultiTier então o pessoal convencionou a fazer desta maneira.

Em alguns testes descobri que no Delphi5 este limite e de 96, agora por que diabos o Delphi 7 baixou isto para 46.

Bom acredito que não terei mesmo uma explicação sobre o caso até pela pouca utilização da metodologia.


GOSTEI 0
Beppe

Beppe

14/06/2004

Eles realmente precisam ficar aninhados?

pnl.parent := outropanel.parent;


GOSTEI 0
Tatuweb

Tatuweb

14/06/2004

Experimentem alterar a resolucão do video ou declarar essa rotina no evento OnResize do form e vc verá que o valor vai mudar (não será 46). O problema é que chega um ponto que não há mais como ´desenhar´ os panels e a rotina é abortada.


GOSTEI 0
Nildo

Nildo

14/06/2004

Falando nisso, ´containers´ (como TPanel) são componentes bem pesados, de forma q eu sugiro q nunca use tantos assim pois deixará tua aplicação uma alta consumidora de memória.


Eu sempre utilizei Panels como Containers :oops: ... O que você me recomenda? Desde que seja algum componente que já venha com o Delphi..


GOSTEI 0
Welter

Welter

14/06/2004

TatuWeb

Amigao, obrigado pela dica, mas isso com certeza eu ja levei em conta...

Relatei ao suporte da borland e eles constataram que existe este problema e provavlemente esta relacionado com o windows, ficaram de me retornar mais informações.

Detectei tambem que o problema so ocorre com windows 2k e XP nos 9x funciona normalmente.

Vamos ver o final da historia...

Abração

Marcelo


GOSTEI 0
Nildo

Nildo

14/06/2004

Welter, pode ter algo a ver com a memória disponível... Eu testei aqui, e na VCL naum deu nenhum erro, e nem na CLX.

Pra você ter uma idéia, eu troquei o FOR para, ao invez de 46, coloquei [b:e5a1da997c]400[/b:e5a1da997c] e foi normal também...

Pentium 4, 2.8ghz, 512 de ram, Delphi6 com Windows XP.


GOSTEI 0
Welter

Welter

14/06/2004

Ola Nildo

Eu tenho a mesma maquina que voce, so que estou usando o Delphi7

Imagino que seja algo com o windows, mas oque?

Na CLX realmente nao da erro, so que apartir de um certo numero ela simplesmente nao mostra mais o componente, como se ele ficasse invisivel.


GOSTEI 0
Nildo

Nildo

14/06/2004

olá!
Estranho porque aqui nunca some. Se você colocar alguma coisa no OnClick, ele dispara o evento quando você clica? Fica simplesmente invisível?

Faz assim, vamos ver se é o Delphi ou o seu Windows... Compila esse projeto em CLX, de tal forma que faça dar o erro no seu computador, e envia esse EXE pro meu e-mail:

brunildo@gmail.com
(se vc nao conseguir enviar me avisa que eu te passo meu outro email)

Dae eu testo aqui. Se funcionar beleza, então é problema com o Seu windows, se não funcionar então o problema é com o seu delphi.

Abraços!


GOSTEI 0
Afarias

Afarias

14/06/2004

Eu sempre utilizei Panels como Containers :oops: ... O que você me recomenda? Desde que seja algum componente que já venha com o Delphi..


hehe... Não foi o q quiz dizer Nildo... Não tem problema com Panels -- o que eu disse é que os Containers em geral são pesados então é importante usá-los apenas quando necessário e procurar minimizar seu uso pq são mais ´pesados´.


T+


GOSTEI 0
Tatuweb

Tatuweb

14/06/2004

Máquina testada: P3 750 MHz, 256 RAM com Win98SE e Delphi 5 e Kylix Open 3 com Red Hat 9

Tanto no Kylix quanto no Delphi a única coisa que eu vi foi que a partir de um numero o panel para de ser ´desenhado´. Mas erro não ocorre em nenhum caso, tanto no kylix quanto no Win98. Se eu alterar o valor para 200, por exemplo, e eu for redimensionando o form ele vai aos poucos mais panels sao ´desenhandos´ porque eu estou aumentando as dimensões do form. Logo a conclusão que cheguei é que o limite é que ´falta espaço´ para ´desenhar´ os panels.


GOSTEI 0
Welter

Welter

14/06/2004

Na CLX eu criei 50 Panels e no ultimo coloquei alguns edits, eles nao apareceram, mas aceitam focus e é possivel editar seu conteudo, mesmo sem velos eu digitei dados, dei um Ctrl+A e Ctrl+C e colei em outro lugar e tava tudinho la...ou seja, edita e funciona como se estivesse visivel.


GOSTEI 0
Welter

Welter

14/06/2004

TatuWeb

Como mencionado acima o problema so esta ocorrendo em windows 2k e XP nos 9x nada acontece.

Abracao

Marcelo


GOSTEI 0
Tatuweb

Tatuweb

14/06/2004

Outro detalhe:

O fato de os controles sumirem eu também não vejo misterio. Simplesmente vc inseriu um panel depois de ter inserido um edit ou button e definiu seu alinhamento como AlClient. Logo os controles estão lá e só que o panel fica na frente e os esconde. Se em design-time vc inserir um panel e o alinhamento para AlClient vai acontecer a mesma coisa


GOSTEI 0
Welter

Welter

14/06/2004

so que os edits estao SOBRE o ultimo panel....e ele tem espaco para ser exibido...

verifiquei tudo e rorei ele no Win98 e funcinou...no XP so nao apareceu mais nada apartir do Panel 46


GOSTEI 0
Nildo

Nildo

14/06/2004

Do aplicativo que você me passou, está faltando uma DLL chamada: qtintf70.dll.

Talvez não seja este o problema?


GOSTEI 0
Welter

Welter

14/06/2004

e que voc enao tem o delphi7 ai...teria de mandar esses caras para rodar na tua maquina...ECAS...QT é brabo as vezes...


GOSTEI 0
Nildo

Nildo

14/06/2004

Mas que DLL é essa?


GOSTEI 0
Welter

Welter

14/06/2004

é uma DLL da biblioteca QT (interface grafica)...talvez nao devesse estar pedindo...posso ter errado no momento da compilação.

De qualquer maneira acho melhor esperar-mos a posição oficial da Borland a respeito do caso, pois até o momento só temos especulações e possibilidades mas nada de concreto.

Abracao

Marcelo


GOSTEI 0
Welter

Welter

14/06/2004

A quem interessar.

O pessoal da Borland tambem confirmaram que o problema não é na ferramenta e sim no Sistema Operacional.

Efetuei o mesmo teste com Delphi8 .Net e C# .Net e ocorreu o mesmo problema ou seja, esclui-se o compilador neste caso, o problema e com o gerenciador de janelas do Windows.

Value

Abracao

Marcelo


GOSTEI 0
POSTAR