Array Multidimensional

Delphi

14/07/2005

Senhores,
Estou trabalhando com um array multidimensional do tipo ListItem e estou com uma pequena dificuldade.
Como faço para enviar todos elementos de uma coluna para outra variável? Ex:

var

Teste: array[1..15, 0..3] of listItem
teste2: array of listitem
begin
...

 teste2 := teste[][2]
...
end; 


Estou tentando fazer algo parecido com isso mas não estou conseguindo.
Alguém pode me dar alguma :idea: por favor?

Grato desde já


Cristiam

Cristiam

Curtidas 0

Respostas

Massuda

Massuda

14/07/2005

Do modo como foram declarados os arrays, você tem que copiar item por item. Como o array Teste é estático (tamanho pré definido) enquanto Teste2 é dinâmico, o código seria algo assim...
var
  I: Integer;
...
  // ajusta o tamanho de Teste2
  SetLength(Teste2, 15);

  // copia os dados
  for I := 1 to 15 do begin
    // Teste2 é indexado a partir de ZERO
    Teste2[I-1] := Teste[I, 2];
  end;

  // depois de usar, libere a memória
  Teste2 := nil;
...



GOSTEI 0
Cristiam

Cristiam

14/07/2005

Eu queria usar matriz dinâmica nos dois, porém quando eu faço isso:

var
 i: integer
 teste: array of array of ListItem
begin
i := 0;
...
 i := i + 1;
 setLength(teste, i)
....
end

Eu não consigo fazer com q quando passe aí, ele continue com os valores anteriores, sabe pq?


GOSTEI 0
Massuda

Massuda

14/07/2005

Eu queria usar matriz dinâmica nos dois...
Não entendi a dúvida, mas vai aí alguns exemplos (mudei um pouco o código) com array dinâmico bidimensional...
var 
  I: Integer; 
... 
  // ajusta uma dimensão de Teste 
  SetLength(Teste, 4); 
  for I := Low(Teste) to High(Teste) do begin
    // ajusta a outra dimensão de Teste 
    SetLength(Teste[I], 15);
  end;

  // ajusta o tamanho de Teste2 
  SetLength(Teste2, 15); 

  // copia os dados 
  for I := Low(Teste2) to High(Teste2) do begin
    Teste2[I] := Teste[2, I]; 
  end; 

  // depois de usar, libere a memória 
  Teste2 := nil; 
  for I := Low(Teste) to High(Teste) do begin
    Teste[I] := nil;
  end;
  Teste := nil;
...
Esse código assume que você quer ter duas cópias separadas do conteúdo de Teste2. Se não for o caso, isto também é possível...
var 
  I: Integer; 
... 
  // ajusta uma dimensão de Teste 
  SetLength(Teste, 4); 
  for I := Low(Teste) to High(Teste) do begin
    // ajusta a outra dimensão de Teste 
    SetLength(Teste[I], 15);
  end;

  Teste2 := Teste[2]; 
...
Atenção que neste caso Teste2 e Teste[2] são ponteiros para a mesma área de memória.


GOSTEI 0
Cristiam

Cristiam

14/07/2005

Opa Massuda,
Muito obrigado era isso mesmo que eu queria.

Porém estou com outra dúvida.

var
 teste1: ListItem[0..15][0..3];
 strTemp: String;
begin
.....
  strtemp := ´balandia´
  teste1[1][2].Text := strTemp;
....
end;


Por que quando eu faço isso dá erro?
Eu adiciono valores para as duas primeiras colunas e quando tento adicionar na terceira, ele me dá um o seguinte erro:
[color=red:9d760c0851] Referência de objeto não definida para uma instância de um objeto.[/color:9d760c0851]

Sabe como posso resolver isso? :oops:


GOSTEI 0
Massuda

Massuda

14/07/2005

teste1: ListItem[0..15][0..3];
Isto não é válido em Delphi/ObjectPascal, mas imagino que tenha sido um erro de digitação.

Por que quando eu faço isso dá erro?
Teria que ver como a matriz está sendo inciada.


GOSTEI 0
Cristiam

Cristiam

14/07/2005

OPa.... Foi mal Massuda:

var
teste1 :array[0..14][0..3] of ListItem.

É o sono q tá complicado aqui.

Eu tenho q dar um .create na matriz para poder colocar algum valor nela?


GOSTEI 0
Massuda

Massuda

14/07/2005

Eu tenho q dar um .create na matriz para poder colocar algum valor nela?
Não precisa (nem tem acho) fazer um .Create... eu queria ver como você carrega os ListView na matriz.


GOSTEI 0
Cristiam

Cristiam

14/07/2005

Bom, deixa ver se eu consigo te explicar....

Eu tenho 2 listBoxs e 1 CheckBox.

Para os itens do listBox, eu estou armazenado da seguinte forma.
var
 teste1: array[0..15][0..3] of ListItem
begin
teste1[0][0] := listbox1.SelectedItem;
teste1[0][1] := listbox2.selectedItem;
teste[0][2] := .....;
end

o problema é que como eu tenho um checkbox, eu quero adicionar todos os itens selecionados no checkbox da seguinte forma.
var
 tmpText, tmpValor : String;
blListTeste : Checkbox
begin
....

     for j := 0 to cblistTeste.Items.count -1 do
     begin
      if cblistTeste.Items[j].Selected then
      begin
       tmpTexto := tmpTexto + cblistTeste.Items[j].Text + ´;´;
       tmpValor := tmpValor + cblistTeste.Items[j].Value + ´;´;
      end;
     end;
....
end.


e após pegar todos os selecionados e colocar na string, aí sim quero passar para o listItem.
teste1[0][2].Text := tmptextp;
teste1[0][2].Value := tmpValor;


E o meu problema está nesta parte de adicionar os valores do checkbox no ListItem. Sabe Como me ajudar por gentileza?

Grato desde já pela paciência. :oops:


GOSTEI 0
Massuda

Massuda

14/07/2005

Só para confirmar... Pelos seus posts anteriores, imagino que isso seja relacionado com ASP.NET certo?

Bom, deixa ver se eu consigo te explicar.... Eu tenho 2 listBoxs e 1 CheckBox....
Pelo que eu entendi, você tem dois ListBoxs (que permitem selecionar vários itens?) e um CheckBox, mas eu não entendi quem precisa receber a lista dos itens selecionados nem de qual ListBox você precisa pegar os itens selecionados.


GOSTEI 0
POSTAR