Destruir botões criados dinamicamente

10/05/2008

4

Caro amigos do forum, estou com a seguinte situação.

Tenho que criar no form principal alguns botões que o próprio cliente irá criar. Toda vez que o usuário trocar de senha tenho que destruir os botões e recriar novamente o dos outros.

abaixo a listagem do botão para criar.

procedure TfrmPrinc.IconeCria;
var
  sb : TSpeedButton;
  sNome : string;
begin
  iconeDestroi;
  dmADS.tbIcoAbrir;
  dmADS.tbIco.First;
  while not dmADS.tbIco.Eof do begin
    if iconeProcAct(dmADS.tbIcoNOMEACT.Value) <> -1 then begin
      sb := TspeedButton.Create(Self);
      sb.Parent := frmPrinc;
      sb.OnMouseDown := iconeMouseDown;
      sb.OnMouseUp := iconeMouseUp;
      sb.OnMouseMove := iconeMouseMove;
      sb.Height := 49;
      sb.Width := 77;
      //sb.Flat := true;
      sb.Cursor := crHandPoint;
      sb.Top := dmADS.tbIcoPOSX.value;
      sb.Left := dmADS.tbIcoPOSY.value;
      sb.Caption := dmADS.tbIcoNOMECAP.value;
      sNome := ´icone_´+dmADS.tbIcoNOMEACT.value;
      sb.Name := sNome;
      sb.OnClick := actPrinc.Actions[iconeProcAct(dmADS.tbIcoNOMEACT.Value)].OnExecute;
    end;
    dmADS.tbIco.Next;
  end;
  dmADS.tbIco.Close;
end;


o problema agora é destruir esses botões para criar o do outro usuário

procedure TfrmPrinc.iconeDestroi;
var
  iCont : integer;
begin
  for iCont := 1 to frmPrinc.ComponentCount-1 do begin
    if copy(frmPrinc.Components[iCont].Name,1,6) = ´icone_´ then begin
      showmessage(frmprinc.Components[icont].Name);
      frmPrinc.Components[icont].DestroyComponents;
    end;
  end;
end;


tentei o código acima mais tá dando erro ´List out of bounds (224)´ e não vai.
Teria outra forma de destruir esse botões, ou o código acima está errado.

Abraços


Responder

Posts

para destruir, faça a lista de trás pra frente:

procedure TfrmPrinc.iconeDestroi;
var
  iCont : integer;
begin

  for iCont := frmPrinc.ComponentCount-1 downto 0 do
    if copy(frmPrinc.Components[iCont].Name,1,6) = ´icone_´ then
    begin
      showmessage(frmprinc.Components[icont].Name);
      frmPrinc.Components[icont].Free;
    end;

end;



Responder
onde se lê [i:72eac0ddca]para destruir, faça a lista de trás pra frente:[/i:72eac0ddca], leia-se [b:72eac0ddca]para destruir, varra a lista de trás pra frente[/b:72eac0ddca].


Responder

10/05/2008

Adssistemas

Valeu

Emersom, estou somente com outra duvida.

Que metodo usar: free ou destroy

[b:ad72275567]blz obrigadão[/b:ad72275567]


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira