Ir para conteúdo
Fórum Script Brasil
  • 0

"destruir" Informações De Um Scrollbox


Guest --Thiago --

Pergunta

Guest --Thiago --

Boa tarde galera, tudo beleza??

É o seguinte, estou com um pequeno problema no componente scrollbox.

O procedimento é o seguinte:

Tenho dois Scrollbox, sendo que o primeiro carrega os dados de uma tabela x, e o segundo eu vou gravar de acordo com essa tabela , por exemplo, se eu clicar no primeiro scrollbox (codigo 1 por exemplo) e arrastar com o mouse para o segundo ScrollBox, esse campo de código 1 será automaticamente gravado no 2 e consequentemente sumir do scroll 1, quanto a isso tudo bem, já esta gravando normalmente, porem a duvida é o seguinte, como eu crio os dois scrolls em tempo de execução (adicionando label e imagem) toda vez que arrasto de um para o outro, preciso destruir todos os componentes e criar novamente com as novas informações, exatamente nesse processo que esta dando erro, estou até tentando apagar tudo e criar novamente porem não funciona o código que estou usando para "destruir" os componentes é o seguinte:

Var i:integer;

for i:=Self.ComponentCount - 1 downto 0 do

if Self.Components.GetParentComponent = ScrollBox1 then

Self.Components.Destroy;

* Faço isso para o ScrollBox1 e para o ScrollBox2.

alguém sabe alguma solução, ou alguma outra forma que eu possa fazer isso?

Qualquer coisa se precisar, tenho uma imagem do que eu quero, dai eu mando por e-mail ou coisa assim.

Agradeço desde já.

Muito atenciosamente

Thiago.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Opa

Se tiver como você postar um exemplo de como você está fazendo para criar

os componentes, porque a parte de destruir parece que está Ok, se tiver

problema seria só de Index, que acho pouco provável, porque quando você

chama o Loop, vamos supor que você tenha 20 componentes no Form, então

o i vai receber o valor 20, só que conforme você destroi automaticamente você

não tem mais 20 componentes, mais o loop vai continuar a verificar por 20 componentes...

Não acredito que seja este o problema...

Posta parte do código de como você cria os componentes se possível de maiores

detalhes por exemplo, qual o erro que dá?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Thiago --
Opa

Se tiver como você postar um exemplo de como você está fazendo para criar

os componentes, porque a parte de destruir parece que está Ok, se tiver

problema seria só de Index, que acho pouco provável, porque quando você

chama o Loop, vamos supor que você tenha 20 componentes no Form, então

o i vai receber o valor 20, só que conforme você destroi automaticamente você

não tem mais 20 componentes, mais o loop vai continuar a verificar por 20 componentes...

Não acredito que seja este o problema...

Posta parte do código de como você cria os componentes se possível de maiores

detalhes por exemplo, qual o erro que dá?

abraço

E ai beleza....

então...vou pegar aqui o codigo e já vou colocar....

mas olha que estranho, o que eu quero fazer seria quando eu clicar no scroll 1 e arrastar para o 2 eu executaria esse código que postei acima, ou seja, apagava tudo e criava novamente certo, até ai parece facil, só que vai vendo que estranho, se eu colocar esse comando por exemplo no evento OnDragDrop do Scroll 2, quando eu soltar o clique do mouse ele grava as informações corretas, inclusive atualiza os scrolls só que da o erro "Access violation at adress 40005982 in module 'rtl70.bpl'. Read of address 0000FFDF" (só que se oberservar, ele gravou, atualizou corretamente só que da o erro, e nem com try resolve), só que se eu colocar esse comando num botão, ao invez do OnDragDrop e depois que arratar, eu clicar no botão, atualiza normalmente, e não da o erro .

Mas beleza...agradeço pela ajuda, e assim que pegar o codigo já vou postar aqui combinado.

Valeu fera

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Thiago --

O código que eu tenho, responsavel por criar os componentes de dentro do scroll em tempo de execução é o seguinte:

procedure TFrmTela.Carrega;

var Imagem : TImage;

Label_Nome : TLabel;

Topo : Integer;

Primeiro : Boolean;

begin

Query1.Close; //query com a informação

Query1.Open;

Topo := 11;

Primeiro := True;

While Not Query1.Eof Do

Begin

Imagem := TImage.Create(Self);

Imagem.Parent := ScrollBox1;

Imagem.Width := 24;

Imagem.Height := 24;

Imagem.Picture.Assign(Image1.Picture);

Imagem.Left := 8;

Imagem.Transparent := True;

Imagem.Hint := Query1.FieldByName('LOCCOD').AsString;

Imagem.Cursor := crHandPoint;

Imagem.OnDragOver := ArrastaDe; //procedure que eu pego o codigo que estou arrastando

Imagem.DragMode := dmAutomatic;

Imagem.OnMouseMove := MovimentoMouse;

Label_Nome := TLabel.Create(Self);

Label_Nome.Parent := ScrollBox1;

Label_Nome.Font.Size := 9;

Label_Nome.Font.Color := $004F4F4F;

Label_Nome.Caption := UpperCase(Query1.FieldByName('LOCDES').AsString);

Label_Nome.Left := 29;

Label_Nome.Font.Name := 'Arial';

Label_Nome.Font.Style := [fsBold];

Label_Nome.Hint := Query1.FieldByName('LOCCOD').AsString;

If Primeiro = True Then

Begin

Topo := Topo;

Imagem.Top := Topo;

Label_Nome.Top := Topo;

Primeiro := False;

End

Else

Begin

Topo := Topo + 25;

Imagem.Top := Topo;

Label_Nome.Top := Topo + 2;

End;

Query1.Next;

End;

end;

e depois tenho uma outra procedure que é basicamente o mesmo codigo, só troca a query (com outras informações) responsavel por carregar o

scroll 2

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Olha realmente fica dificil te ajudar sem testar, é algo um pouco complexo então

olhando o código não da pra achar o erro, pelo menos eu não achei...

Agora assim, você menciona que o erro é

"Access violation at adress 40005982 in module 'rtl70.bpl'. Read of address 0000FFDF"

Bom se fala que o erro é em 'rtl70.bpl' e que nem com o try resolve, vale lembrar que

quando você roda seu aplicativo dentro do Delphi (F9) mesmo com o try o Delphi vai

mostrar o erro, não interessa pra que seja, a não ser que você mexer nos Options o que

não é recomendável...

E este 'rtl70.bpl', a menos que você tenha compilado seu aplicativo com "Runtime Packages"

que eu acho que você não fez isso, então um aplicativo fora do Delphi não usa estas BPLs

a menos que como citei você tenha compilado marcando a opção "Build with Runtime Packages"

Resumindo, este acess violation pode ser somente do Delphi e não do aplicativo em si, já tentou

rodar seu aplicativo fora do Delphi e fazer o teste utilizando o Try por exemplo?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Thiago, como o Churc disse, é complicado ajudar em problemas como esse sem que se possa testar.

Mas, seguem algumas observações:

1) acho que seria conveniente você utilizar Free ao invés de Destroy. Por que? Veja o que o help diz sobre Destry:

Description

Do not call Destroy directly. Call Free instead. Free verifies that the component is not nil, and only then calls Destroy.

2) sugiro que você dê nomes aos componente criados dinameicamente (não podem ser duplicados). Isso é conveniente para que você possa depurar adequadamente sua aplicação e tentar descobrir onde está o problema. Faça isso utilizando algum tipo de contador e utilize format para montar o nome. Ex.:

...
 Imagem := TImage.Create(Self);
 Imagem.Name := Format('SB1_Image%d', [Idx]); // Image do scrollbox 1
 ...
 Label_Nome := TLabel.Create(Self);
 Label_Nome.Name := Format('SB1_lblNome%d', [Idx]); // Label Nome do scrollbox 1
 ...
 Inc(Idx);

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...