GARANTIR DESCONTO

Fórum Array Multidimensional #288057

14/07/2005

0

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

Responder

Posts

14/07/2005

Massuda

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;
...



Responder

Gostei + 0

14/07/2005

Cristiam

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?


Responder

Gostei + 0

14/07/2005

Massuda

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.


Responder

Gostei + 0

15/07/2005

Cristiam

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:


Responder

Gostei + 0

15/07/2005

Massuda

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.


Responder

Gostei + 0

15/07/2005

Cristiam

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?


Responder

Gostei + 0

15/07/2005

Massuda

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.


Responder

Gostei + 0

15/07/2005

Cristiam

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:


Responder

Gostei + 0

15/07/2005

Massuda

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.


Responder

Gostei + 0

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

Aceitar