Bug feito - Mas é do Delphi ou Windows
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)
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
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
Curtidas 0
Respostas
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+
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
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.
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
14/06/2004
Eles realmente precisam ficar aninhados?
pnl.parent := outropanel.parent;
pnl.parent := outropanel.parent;
GOSTEI 0
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
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
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
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
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.
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
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.
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
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!
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
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
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.
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
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
14/06/2004
TatuWeb
Como mencionado acima o problema so esta ocorrendo em windows 2k e XP nos 9x nada acontece.
Abracao
Marcelo
Como mencionado acima o problema so esta ocorrendo em windows 2k e XP nos 9x nada acontece.
Abracao
Marcelo
GOSTEI 0
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
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
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
verifiquei tudo e rorei ele no Win98 e funcinou...no XP so nao apareceu mais nada apartir do Panel 46
GOSTEI 0
Nildo
14/06/2004
Do aplicativo que você me passou, está faltando uma DLL chamada: qtintf70.dll.
Talvez não seja este o problema?
Talvez não seja este o problema?
GOSTEI 0
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
14/06/2004
Mas que DLL é essa?
GOSTEI 0
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
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
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
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