| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
JsJhony Aprendiz

Registrado: Quarta-Feira, 5 de Agosto de 2009 Mensagens: 101
|
Enviada: Seg Set 10, 2012 9:33 pm Assunto: Criar componentes |
|
|
Eu coloquei num form um tbuton e quando eu clico nele crio um determinado numero de tbitbuton, ate aqui ta tudo bem, porem se seu clicar no tbuton novamente da erro, claro , os botões ( tbitbuton ) ja existe. Como eu posso, testa se um tbitbuton ja existe antes de criar ele, e de que forma eu posso apagar esse componente para criar outro?
Grato. |
|
| Voltar ao Topo |
|
 |
marcosbaixista Profissional

Registrado: Quinta-Feira, 18 de Março de 2010 Mensagens: 594 Localização: Maringá/PR
|
Enviada: Seg Set 10, 2012 9:55 pm Assunto: |
|
|
Olá.
Você precisa criar um componente e atribuir um nome a ele, assim você consegue verificar se ele ja existe antes de criar outro.
Para remover o componente seria verificar se existem botoes desta classe e se existir mandar excluir todos.
Bom, basicamente é isso. |
|
| Voltar ao Topo |
|
 |
JsJhony Aprendiz

Registrado: Quarta-Feira, 5 de Agosto de 2009 Mensagens: 101
|
Enviada: Seg Set 10, 2012 10:38 pm Assunto: |
|
|
isso eu já sei, só não sabia como fazer. Mas obrigado pela força.
| marcosbaixista escreveu: | Olá.
Você precisa criar um componente e atribuir um nome a ele, assim você consegue verificar se ele ja existe antes de criar outro.
Para remover o componente seria verificar se existem botoes desta classe e se existir mandar excluir todos.
Bom, basicamente é isso. |
|
|
| Voltar ao Topo |
|
 |
JsJhony Aprendiz

Registrado: Quarta-Feira, 5 de Agosto de 2009 Mensagens: 101
|
Enviada: Seg Set 10, 2012 10:59 pm Assunto: Re: Criar componentes |
|
|
eu já consigo testar a existencia dos objetos, agora eu preciso destrui-los para recria-los em seguida? ja usei o "objeto.FREE" e "objeto.DESTROY" mas nao deu certo. segue trecho do código:
IF TestaComponente( 'BB_DEZ_'+inttostr(iCon) ) then
Begin
aButtons[iCon].Free;
aButtons[iCon].Destroy;
End;
aButtons[iCon]:=TBitBtn.Create(Application);
aButtons[iCon].Parent:=P_DEZENAS;
aButtons[iCon].name:='BB_DEZ_'+inttostr(iCon);
aButtons[iCon].Hint:=aButtons[iCon].name;
aButtons[iCon].ShowHint:=True;
aButtons[iCon].Height:=64;
aButtons[iCon].Width:=75;
aButtons[iCon].Font.Style:=[fsBold];
aButtons[iCon].Font.Size:=14;
aButtons[iCon].Left:= iLeft;
aButtons[iCon].Top:= iTop;
aButtons[iCon].Caption:=inttostr(iCon);
| JsJhony escreveu: | Eu coloquei num form um tbuton e quando eu clico nele crio um determinado numero de tbitbuton, ate aqui ta tudo bem, porem se seu clicar no tbuton novamente da erro, claro , os botões ( tbitbuton ) ja existe. Como eu posso, testa se um tbitbuton ja existe antes de criar ele, e de que forma eu posso apagar esse componente para criar outro?
Grato. |
|
|
| Voltar ao Topo |
|
 |
vaninho Membro Junior

Registrado: Segunda-Feira, 16 de Outubro de 2006 Mensagens: 352
|
Enviada: Ter Set 11, 2012 12:50 am Assunto: |
|
|
Amigo
Ao invés de usar o Free() ou Destroy() que tal FreeAndNil()?
| Código: | FreeAndNil(objProduto);
If Assigned(objProduto) then
Showmessage('Objeto não destruido!')
Else
Showmessage('Objeto destruido!'); |
| Código: | Public
Constructor Create();
Destructor Destroy(); override; |
Uma diferença importante entre o Destroy, o Free e o FreeAndNil, é que se o destrutor de uma classe possuir uma implementação diferente do padrão, e não for utilizada a diretiva “override” na declaração do destructor, ao utilizar o Free ou o FreeAndNil a implementação do destructor não será executada, e se utilizar o Destroy a implementação do destructor será executada. |
|
| Voltar ao Topo |
|
 |
marcieldeg Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011 Mensagens: 1054 Localização: Vitória - ES
|
Enviada: Ter Set 11, 2012 10:16 am Assunto: |
|
|
| vaninho escreveu: |
Uma diferença importante entre o Destroy, o Free e o FreeAndNil, é que se o destrutor de uma classe possuir uma implementação diferente do padrão, e não for utilizada a diretiva “override” na declaração do destructor, ao utilizar o Free ou o FreeAndNil a implementação do destructor não será executada, e se utilizar o Destroy a implementação do destructor será executada. |
Você está enganado. O método Free chama o método Destroy.
| Código: | procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end; |
Ou seja, chamar Free na sua classe irá chamar o Destroy que você deu override. |
|
| Voltar ao Topo |
|
 |
|