GARANTIR DESCONTO

Fórum Editar as celulas de um ListView #299256

13/10/2005

0

No listView é possível editar as células da primeira coluna ´Caption´, será que é possível fazer isto com as demais colunas também, tipo como com o DBGrid?


Mkoch

Mkoch

Responder

Posts

13/10/2005

Marcio.theis

De uma olhada neste link:

http://www.linhadecodigo.com.br/artigos.asp?id_ac=581


Responder

Gostei + 0

13/10/2005

Mkoch

Valeu pela ajuda, mas não é bem isso não, isso eu já faço, eu gostaria de poder editar o conteúdo carregado no listview, digitando diretamente dentro das suas células como em um DBGrid.


Responder

Gostei + 0

13/10/2005

Michael

Olá!

A dica do colega Márcio não ajudou? Repare bem nela. Para incluir os dados nas demais colunas da ListView, excetuando-se, claro, a primeira, usou-se [b:686ecd8c0b]SubItems.Add[/b:686ecd8c0b]. Vc vc olhar no help do Delphi vai descobrir que SubItems é um objeto do tipo [b:686ecd8c0b]TStrings[/b:686ecd8c0b]. Então, para trocar o conteúdo da segunda coluna, digamos do primeiro item da lista, basta:

ListView1.Items[0].SubItems[0]:= ´String´;


[]´s


Responder

Gostei + 0

08/12/2005

Bruno Belchior

A minha dúvida é: como editar os [b:9db20baa69]SubItens[/b:9db20baa69] assim como edito o caption? ou seja aparecendo um ´edit´ no próprio ListView... acredito que nativamente é possível, caso contrário deveria se chamar ListEditor...


Responder

Gostei + 0

08/12/2005

Bruno Belchior

só corrigindo:[quote:350df39aa1=´Bruno Belchior´]acredito que nativamente [b:350df39aa1][color=red:350df39aa1]não[/color:350df39aa1][/b:350df39aa1] é possível[/quote:350df39aa1]


Responder

Gostei + 0

09/12/2005

Fx|hand

bom, eu posso tah falando uma tremenda bobagem... mais se eu naum me engano, vc consegue localizar ondi q o usuario está clicando...
e por ai vc consegue saber a coluna e o item q o usuario clicou... naum é taum dificil criar uma tedit no meio da listview pro kra poder alterar... =P

deve ter alguma coisa do tipo no torry... =D


boua sorte !


Responder

Gostei + 0

09/12/2005

Bruno Belchior

já tinha imaginado essa possibilidade... mas é meio q gambiarra...


Responder

Gostei + 0

09/12/2005

Michael

Olá Bruno!

Existe um componente chamado VirtualTreeView. Embora ele seja essencialmente um TreeView, nada impede que vc o use como um ListView. É o componente do gênero mais sofisticado que eu já trabalhei, free e open-source. Nele vc pode implementar como a edição de cada coluna será feita. O próprio demo que vem com ele traz algo assim.

Para se ter uma idéia da qualidade deste controle, a Borland o incluiu no IDE do Delphi 2005, e deve ter feito o mesmo para a versão 2006. Sempre que vc encontrar uma lista no IDE é ele.

Estou escrevendo um artigo mostrando tudo o que eu sei sobre este componente. Deve sair na ClubeDelphi no início do ano que vem.

O link para download é: http://www.delphi-gems.com/VirtualTreeview/ .

[]´s


Responder

Gostei + 0

10/12/2005

Bruno Belchior

Já ouvi falar muito bem desse componente (inclusive acho que foi você mesmo Michael que escreveu sobre ele em outro post qualquer) mais analizando a VCL, cheguei a conclusão que realmente não existe maneira de editar outras células nativamente... visto que a própria edição da ´célula caption´ é feita interna pelo SO, sendo enviada apenas uma mensagem para o controle, de outro modo, acredito que só mesmo fazendo uma contorcionismo, como colocar um Edit sobre o controle ou algo do gênero... pessoalmente gosto muito do controle ListView, pois oferece uma interface muito boa para com o usuário...


Responder

Gostei + 0

10/12/2005

Khundalini

Cara, desculpem se eu estiver sendo grosseiro. Mas um TListView não possui células. O que pode ser feito é interceptar onde o usuário clicou e, em tempo de execução, criar um componente de edição (TEdit, TMaskEdit, TDateTimePicker, etc.) dentro da área correspondente à area do subitem clicado.

Sds,

Rubem Rocha
Manaus, AM


Responder

Gostei + 0

13/03/2007

Djpedro

Olá! A dica do colega Márcio não ajudou? Repare bem nela. Para incluir os dados nas demais colunas da ListView, excetuando-se, claro, a primeira, usou-se [b:5e797b8279]SubItems.Add[/b:5e797b8279]. Vc vc olhar no help do Delphi vai descobrir que SubItems é um objeto do tipo [b:5e797b8279]TStrings[/b:5e797b8279]. Então, para trocar o conteúdo da segunda coluna, digamos do primeiro item da lista, basta:
ListView1.Items[0].SubItems[0]:= ´String´;
[]´s


Cara, foi mal.. Mandei um email para vc, não tinha visto que não podia enviar direto à vc.

Cara,
Eu estou fazendo um programa em delphi, mas estou encontrando um problema. Meu programa é um controle de laboratórios de informática, então estou fazendo alguns que j´pa conheço, mas precisarei entregar para o cliente... Só que ele pode precisar adicionar máquinas ou laboratórios novos, e ntão preciso gerar ou um script ou uma função para isso seja feito por ele mesmo dinamicamente, sem que ele altere código ou coisa parecida. Dei uma estudada e vi que dá pra fazer em ListView. 8)


Responder

Gostei + 0

13/05/2007

Pikkasso

[quote:1178959060=´FX|HanD´]bom, eu posso tah falando uma tremenda bobagem... mais se eu naum me engano, vc consegue localizar ondi q o usuario está clicando...
e por ai vc consegue saber a coluna e o item q o usuario clicou... naum é taum dificil criar uma tedit no meio da listview pro kra poder alterar... =P

deve ter alguma coisa do tipo no torry... =D


boua sorte ![/quote:1178959060]

Fiz isso com o seguinte codigo:

procedure TForm1.ListView1Click(Sender: TObject);
var
pbRect : TRect;
begin
if MyIte <> -1 then begin
/////////////////Só funciona Maximizado??????????????????????????
Edit2.Parent := ListView1;
pbRect := ListView1.Items[MyIte].DisplayRect(drBounds);
case MySub of
2: begin
pbRect.Left := pbRect.Left + ListView1.Columns[0].Width +
pbRect.Left + ListView1.Columns[1].Width;
pbRect.Right := pbRect.Left + ListView1.Columns[MySub].Width;
end;
3: begin
pbRect.Left := pbRect.Left + ListView1.Columns[0].Width +
pbRect.Left + ListView1.Columns[1].Width +
pbRect.Left + ListView1.Columns[2].Width;
pbRect.Right := pbRect.Left + ListView1.Columns[MySub].Width;
end;
4: begin
pbRect.Left := pbRect.Left + ListView1.Columns[0].Width +
pbRect.Left + ListView1.Columns[1].Width +
pbRect.Left + ListView1.Columns[2].Width +
pbRect.Left + ListView1.Columns[3].Width;
pbRect.Right := pbRect.Left + ListView1.Columns[MySub].Width;
end;
5: begin
pbRect.Left := pbRect.Left + ListView1.Columns[0].Width +
pbRect.Left + ListView1.Columns[1].Width +
pbRect.Left + ListView1.Columns[2].Width +
pbRect.Left + ListView1.Columns[3].Width +
pbRect.Left + ListView1.Columns[4].Width;
pbRect.Right := pbRect.Left + ListView1.Columns[MySub].Width;
end;
end;
if (MySub <> 0) and (MySub <> 1) then begin
Edit2.BoundsRect := pbRect;
try
Edit2.Text := ListView1.Items[MyIte].SubItems[MySub -1];
except
Edit2.Text := ´´;
end;
ItemEdit := MyIte;
SubEdit := MySub;
Edit2.Visible := True;
Edit2.SetFocus;
end;
end;
end;
ItemEdit, MyIte, SubEdit e MySub são variáveis globais que são definidas no evento onMouseMove do ListView.

Esse código tem um problema: Fonciona muito bem quando o form está maximizado, porem quando não o TEdit até fica no tamanho (width e heigh) e na altura (top) do SubItem clicado, porem fica desalinhado horizontalmente (left). O que poderá estar acontecendo?


Responder

Gostei + 0

13/05/2007

Pikkasso

Também tenho outra dúvida.
Como faço pro edit sumir quando uso a roda do mouse como scrol (wheel)?


Responder

Gostei + 0

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

Aceitar