GARANTIR DESCONTO

Fórum problemas com array #278319

21/04/2005

0

Ola Pessoal.

Estou com um problema em meu sistema que é o seguinte

Montei um form e declarei uma array-> Lab : array[1..50] of String;

Onde após a entrada de um codigo de Produto, é lançado nela
varios itens deste produto, quando vou pesquizar outro produto
limpo esta variavel assim

For i:=1 to 50 do freeandnil(lab[i]);

funcionam muito bem.

O problema é que quando saio do form destruindo com o comando
Release, e vou fazer uma nova consulta do Produto ele me da um
erro de violaçao apenas nesta linha onde esta o comando FOR


Caso alguem possa me ajudar ficarei muito agradecido

Claudio


Claudiocjr

Claudiocjr

Responder

Posts

21/04/2005

Edilcimar

coloque
for i := 1 to 50 do
lab[i] := ´´;


Responder

Gostei + 0

21/04/2005

Michael

Olá!

O colega Edilcimar está correto. [b:c39d13cc41]FreeAndNil [/b:c39d13cc41]é uma procedure que chama o método Free de um objeto e em seguida atribui o valor nil para a sua variável. No seu caso, ele libera a array da memória. Então quando o formulário é aberto novamente, ele tenta achar a array em um endereço da memória q não existe mais. Daí Access Violation.

Use a dica dele para limpar as strings.

E para deixar a minha, gostaria de saber se o número de itens da sua matriz tem q ser mesmo 50. Se não, e vc estiver calculando para mais para comportar um certo número de itens, use uma matriz dinâmica (dynamic/open array).

Abraços!


Responder

Gostei + 0

22/04/2005

Claudiocjr

Grato pela colaboração de todos.

E Tenho mais duas perguntas neste caso

1o Como faria para limpar uma array que criei para
lançar tLabel´s nela?

2o. Como faria para criar esta array Dinamica:

Mais uma vez obrigado.


Claudio


Responder

Gostei + 0

22/04/2005

Massuda

1o Como faria para limpar uma array que criei para lançar tLabel´s nela?
Não entendi o que você quis dizer com ´lançar´... será que você poderia explicar melhor?

2o. Como faria para criar esta array Dinamica:
Faça algo assim:
var
  Lab: array of string;
  I: Integer;
...
  // ajusta o tamanho do array
  SetLength(Lab, 30);

  // adiciona alguma coisa no array
  for I := Low(Lab) to High(Lab) do
    Lab[I] := IntToStr(I);
  
  // limpa o array
  for I := Low(Lab) to High(Lab) do
    Lab[I] := ´´;

  // libera o array
  Lab := nil;
Dependendo do caso, você poderia considerar utilizar um [b:d843d4f817]TStringList[/b:d843d4f817] ao invés de um [b:d843d4f817]array of string[/b:d843d4f817].


Responder

Gostei + 0

22/04/2005

Claudiocjr

Eu criei a array assim
Lab : array[1..50] of TLabel ;

Dai fiz referencias a ela

Lab[i].Caption := ´Teste´;
Lab[i].Name := ´Teste´ ;
etc...



Grato

Claudio


Responder

Gostei + 0

22/04/2005

Massuda

Eu criei a array assim Lab : array[1..50] of TLabel ;
Esses labels que vão no array... eles já existem no form (foram criados na IDE) ou você cria eles dinamicamente?


Responder

Gostei + 0

22/04/2005

Marcelo Saviski

Num array dinamico de strings vc tb poderia usar o [color=green:63f42692ab]Finalize(Vetor)[/color:63f42692ab] para limpa-lo


Responder

Gostei + 0

22/04/2005

Claudiocjr

Crio eles dinamicamente


Responder

Gostei + 0

22/04/2005

Massuda

Crio eles dinamicamente
Segue o exemplo (não testei)
var 
  Lab: array of TLabel; 
  I: Integer; 
... 
  // ajusta o tamanho do array 
  SetLength(Lab, 30); 

  // cria os labels
  for I := Low(Lab) to High(Lab) do begin
    Lab[I] := TLabel.Create(Self); 
    Lab[I].Parent := Self;
    // Lab[I].Name pode ficar em branco
    Lab[I].Top := ...
    ...
  end;

  // limpa o array 
  for I := Low(Lab) to High(Lab) do 
    Lab[I].Free;  // ou FreeAndNil(Lab[I])

  // libera o array 
  Lab := nil;
Uma alternativa é usar um [b:366d4fbcd0]TComponentList[/b:366d4fbcd0].


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar