Fórum Invalid Variant Operation - OnDeletion do TreeView. #345917

12/09/2007

0

Caros...
Tenho dois TreeView´s na tela... Um de selecionados... e outro de Não selecionados..

Quando passo do não selecionado para o selecionado (um item)...

Eu tenho q deletar o ponteiro que estava associado ao item...

Ponteiro
type
  PRecItemFonte = ^TRecItemFonte;
  TRecItemFonte = record
    CODG_ITEM_FONTE,
    DESC_ITEM_FONTE,
    CODG_ITEM_FONTE_PAI,
    CODG_LINHA : Variant;
  end;

  PRecItem = ^TRecItem;
  TRecItem = record
    CODG_ITEM_USO_FONTE,
    CODG_ITEM_USO_FONTE_PAI,
    INDI_ITEM_USO_FONTE,
    CODG_ORCAMENTO,
    CODG_ITEM_ORCAMENTO,
    INDI_TIPO_ORCAMENTO : Variant;
  end;


Para adicionar do não selecionados.. para o selecionados...
procedure TfrmCadQuadroUsosFontes.cb_add_fonteClick(Sender: TObject);
var
  i : Integer;
  eti_No : TTreeNode;
begin
  inherited;

  if et_ItensFontesSel.Items.Count > 0 then
  begin

    if blnPronaf and (PRecItemFonte(et_ItensFontesNSel.Selected.Data)^.CODG_ITEM_FONTE <> ´164´)  then
      abort;

    if (not blnPronaf) and (not blnRecursoProprio) and
       (pos(´PRONAF´,UpperCase(VarToStr(PRecItemFonte(et_ItensFontesNSel.Selected.Data)^.DESC_ITEM_FONTE))) > 0) then
      abort;

    if blnOutras and
       (pos(´PRONAF´,UpperCase(VarToStr(PRecItemFonte(et_ItensFontesNSel.Selected.Data)^.DESC_ITEM_FONTE))) > 0) then
      abort;
  end;

  // Limpar TList
  listSel.Clear;

  // Selecionar todos os filhos caso o pai tenha sido selecionado
  for i := 0 to et_ItensFontesNSel.Items.Count - 1 do
  begin
    if ( et_ItensFontesNSel.Items[i].Selected ) then
    begin
      listSel.Add ( et_ItensFontesNSel.Items[i] );
      if  pos(´PRONAF´,UpperCase(VarToStr(PRecItemFonte(et_ItensFontesNSel.Selected.Data)^.DESC_ITEM_FONTE))) > 0 then
        if Not mudaConfig then
          abort;

      if ( et_ItensFontesNSel.Items[i].getFirstChild <> nil ) then
      begin
        eti_No := et_ItensFontesNSel.Items[i].getFirstChild;
        while ( eti_No <> nil ) do
        begin
          if pos(´PRONAF´,UpperCase(VarToStr(PRecItemFonte(eti_No.Data)^.DESC_ITEM_FONTE))) > 0 then
            if Not mudaConfig then
              abort;
          listSel.Add ( eti_No );
          eti_No := et_ItensFontesNSel.Items[i].GetNextChild(eti_No);
        end;
      end;
    end;
  end;

  AdicionaFontes;
  AjustarBotoesFontes;
end;


procedure TfrmCadQuadroUsosFontes.AjustarBotoesFontes;
begin
  if et_ItensFontesSel.Items.Count > 0 then
  begin
    if et_ItensFontesNSel.Selected <> Nil then
    begin
      cb_add_fonte.Enabled := true;

      if blnPronaf and (PRecItemFonte(et_ItensFontesNSel.Selected.Data)^.CODG_ITEM_FONTE <> ´164´)  then
        cb_add_fonte.Enabled := false;

      if (not blnPronaf) and (not blnRecursoProprio) and
          (pos(´PRONAF´,UpperCase(VarToStr(PRecItemFonte(et_ItensFontesNSel.Selected.Data)^.DESC_ITEM_FONTE))) > 0) then
        cb_add_fonte.Enabled := false;

      if blnOutras and
         (pos(´PRONAF´,UpperCase(VarToStr(PRecItemFonte(et_ItensFontesNSel.Selected.Data)^.DESC_ITEM_FONTE))) > 0) then
        cb_add_fonte.Enabled := false;
    end;
  end
  else begin
    cb_add_fonte.Enabled    := (et_ItensFontesNSel.Selected <> Nil);
  end;

  cb_addall_fonte.Enabled := ((et_ItensFontesNSel.Selected <> Nil) or (et_ItensFontesNSel.Items.Count <> 0));
  cb_rem_fonte.Enabled    := (et_ItensFontesSel.Selected <> Nil);
  cb_remall_fonte.Enabled := ((et_ItensFontesSel.Selected <> Nil) or (et_ItensFontesSel.Items.Count <> 0));
end;


No OnDeletion do TreeView Não Selecionados:

procedure TfrmCadQuadroUsosFontes.et_ItensFontesNSelDeletion(
  Sender: TObject; Node: TTreeNode);
begin
  inherited;
  // Libera memória
  Dispose(Node.Data);

end;


O erro está dando quando dá o Dispose...

Agora...

Estou migrando esta tela de Delphi 5 para o 2006...
Este problema não ocorre no Delphi 5....

E ae... o q os senhores pode fazer para me ajudaaaaar?

Agradeço desde já!


Diegus

Diegus

Responder

Posts

13/09/2007

Diegus

Eh nessas horas q seria bom ter um coletor de lixo que nem no java...

Não precisar de desalocar memória...

Alguém tem alguma idéia!?


Responder

Gostei + 0

13/09/2007

Diegus

Help ae !!! :cry:


Responder

Gostei + 0

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

Aceitar