PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum destruir handles #370095

29/04/2009

0

A situação é a seguinte tenho um componente TIAsemiPanel que uso como semi-transparente em cima de TJvPanel. Eu crio o TIAsemiPanel em tempo de execução uma vez e vou mudando o parente a medida que dou o click em um TJvPanel ... que são varios. Ou seja clico no TJvPanel retiro o parente do anterior clicado e crio o parent para o que foi clicado.

if LastControl <> nil then
    UltimoControle.RemoveComponent(AlertPanel);
  TJvPanel(sender).InsertComponent(AlertPanel);
  ChangePropAlertPanel(TJvPanel(sender).Top , TJvPanel(sender).Left,
                       TJvPanel(sender).Height , TJvPanel(sender).Width ,
                       True,TJvPanel(sender));
  LastControl:=TJvPanel(sender);


O problema é que quando crio o parent neste componente ele cria um outro handle para o TIAsemiPanel o que complica na hora de finalizar a aplicação. Tenho que deletar todos os handles.

[b:304e366fa3]Linha que cria o handle no TIAsemiPanel.[/b:304e366fa3]

procedure TIAsemiPanel.CreateHandle;
begin
  [b]inherited CreateHandle;[/b]
  ATimer := TIApanelSemiTimer.Create(True);
  ATimer.Dt:=2000;
  ATimer.AHandle:=self.handle;
  ATimer.Resume;
  DefinePolys;
  DrawOnIt;
end;



[b:304e366fa3]Referencia ao inherited da procedure anterior dentro do Controls[/b:304e366fa3]


procedure TWinControl.CreateHandle;
var
  I: Integer;
begin
  if FHandle = 0 then
  begin
    CreateWnd;
    SetProp(FHandle, MakeIntAtom(ControlAtom), THandle(Self));
    SetProp(FHandle, MakeIntAtom(WindowAtom), THandle(Self));
    if Parent <> nil then
      SetWindowPos(FHandle, Parent.PrecedingWindow(Self), 0, 0, 0, 0,
        SWP_NOMOVE + SWP_NOSIZE + SWP_NOACTIVATE);
    for I := 0 to ControlCount - 1 do
      Controls[I].UpdateAnchorRules;
  end;
end;


Como deletar os handles?


Pedroso

Pedroso

Responder

Posts

29/04/2009

Pedroso

Alguem sabe?


Responder

Gostei + 0

30/04/2009

Pedroso

sobe


Responder

Gostei + 0

30/04/2009

Pedroso

sobe


Responder

Gostei + 0

04/05/2009

Pedroso

Muito bem .... problema resolvido......


if LastControl <> nil then 
    UltimoControle.RemoveComponent(AlertPanel); 
  TJvPanel(sender).InsertComponent(AlertPanel); 
  ChangePropAlertPanel(TJvPanel(sender).Top , TJvPanel(sender).Left, 
                       TJvPanel(sender).Height , TJvPanel(sender).Width , 
                       True,TJvPanel(sender)); 
  LastControl:=TJvPanel(sender); 


Retirei o RemoveComponent() e o InsertComponent().


Responder

Gostei + 0

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

Aceitar