Fórum Criação de componentes #259457
22/11/2004
0
Estou com um sério problema, que é o seguinte:
Tenho um componente que tem uma propriedade:
property Imagens : TImageList read ListaImagem write ListaImagem;
Então você pode selecionar um TimageList nesta propriedade, para que eu use as figuras no componente, até aí tudo bem.
O problema é quando você(em tempo de projeto)associa u Timagelist ao componente, e depois apaga esse Timagelist, começa a dar violação de memória.
Como posso resolver esse problema.
Sistemald
Curtir tópico
+ 0Posts
22/11/2004
Massuda
CM_CONTROLLISTCHANGE: WParam indica qual é o controle, LParam incia se está inserindo (1) ou removendo (0)
CM_CONTROLCHANGE: usa uma mensagem do tipo TCMControlChange (definida na unit Messages).
Você poderia processar CM_CONTROLCHANGE em tempo de projeto para detectar quando o TImageList do seu componente é destruído/apagado, atribuir nil na sua propriedade Imagens e assim evitar os AVs.
Gostei + 0
22/11/2004
Dpolistchuck
procedure TComponent.Notification(AComponent: TComponent; Operation: TOperation);
E coloque nil na sua referencia interna ao ImageList (campo privado ou coisa parecida), se operation for igual a opRemove.
[]s
Daniel
Gostei + 0
22/11/2004
Massuda
Tinha que ter um jeito mais simples do que eu tinha pensado :D ... valeu Daniel.
Só para complementar... precisa checar se AComponent é o image list usado pelo componente.
Gostei + 0
23/11/2004
Sistemald
Só falta um detalhe, é um outro problema que só ocorre é tempo de projeto.
Estou fazendo uma variação do DBGrid, e tenho o seguinte código
destructor TDBGridBoolean.Destroy; begin Columns.SaveToFile(ExtractFilePath(ParamStr(0)) + ´config´ + name + datasource.Name + ´.grid´); inherited; end;
Este erro ocorre em projeto não salvo e que não foi gerado o executavel.
o ideal é que não executasse esta linha em tempo de projeto.
Gostei + 0
23/11/2004
Sistemald
na verdade o problema era o seguinte:
destructor TDBGridBoolean.Destroy; begin Columns.SaveToFile(ExtractFilePath(ParamStr(0)) + ´config´ + name + datasource.Name + ´.grid´); inherited; end;
->datasource.name
Quando não havia um datasource ligado ao dbgrid.
Gostei + 0
23/11/2004
Marcelo Saviski
if not (csdesigning in ComponentState) then //faz algo que só deve ser feito depois do programa compilado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)