Newsgroup: it.comp.lang.delphi
Titolo: ListView e inserimento dati a run-time

Ciao a tutti,
sto provando ad usare una listview in cui devono essere inseriti aluni
dati a runtime ma ho qualche problema nel capire come fare
l'inserimento. Mi spiego meglio, la listview è strutturata su 5
colonne e devo inserire un dato per colonna tutte sulla stessa riga,
ad es.:
1° ciclo
_________________________________________________
Dato "a"
Dato "b"
Dato "c"
Dato "d"
Dato "e"
Colonna1  Colonna2  Colonna3  Colonna4 Colonna5
     a              b              c             d             e
2° ciclo
_________________________________________________
Dato "f"
Dato "g"
Dato "h"
Dato "i"
Dato "l"
Colonna1  Colonna2  Colonna3  Colonna4 Colonna5
     f               g              h             i              l
     a              b              c             d             e
ecc. ecc.
Qual'è l'istruzione che mi permette di fare questo tipo di
inserimenti?
Inoltre, usando la listview ho la possibilità di cambiare ordinamenti
in modo che cliccando sull'intestazione di una colonna l'ordinamento
venga effettuato sull'intera riga?
Grazie

fatto in 10 minuti 500 euro grazie !
const MAXCOLONNE = 5;
      MAXRIGHE   = 1000;
var
  Form1: TForm1;
  // sarebbe meglio usare questo sotto
  MIRROR : Array [0..MAXCOLONNE,0..MAXRIGHE] of String;
  X      : Array [1..5] of Integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var c : integer;
begin
StringGrid1.FixedCols:=0;
StringGrid1.FixedRows:=1;
StringGrid1.RowCount:=MaxRighe;
StringGrid1.ColCount:=MaxColonne;
ListBox1.Visible:=false;
// carica da disco valori dell'array X[] oppure
for c:=1 to 5 do X[c]:=0;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
if ARow=0 then
   Stringgrid1.RowHeights[0]:=10;
if ARow=1 then
  begin
  StringGrid1.Canvas.Brush.Color := $00FFC9A8;
  StringGrid1.Canvas.FillRect(Rect);
 
Stringgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+1,stringgrid1.Cells[ACol,ARow]);
  end;
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
// toglie editing da righe diverse dalla 1
// se non voglio permettere update su campi immessi
if StringGrid1.Row=1 then
StringGrid1.options:=[goFixedVertLine,goFixedHorzLine,
goVertLine,goHorzLine,goRangeSelect,goEditing] else
StringGrid1.options:=[goFixedVertLine,goFixedHorzLine,
goVertLine,goHorzLine,goRangeSelect]
end;
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var Y,k : integer;
begin
Y:=StringGrid1.Col;
if key=VK_RETURN then
                 begin
                 X[Y]:=X[Y]+1;
                 MIRROR[Y,X[Y]]:=StringGrid1.Cells[Y,1];
                 for k := X[Y] downto 1 do
StringGrid1.Cells[Y,X[Y]-K+2]:=MIRROR[Y,K];
                 StringGrid1.Cells[Y,1]:='';
                 end;
end;
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var A,Y : Integer;
begin
// Qui metti un ordinamento più intelligente
Y:=StringGrid1.Col;
ListBox1.Clear; ListBox1.Sorted:=true;
for A:= 1 to X[Y]   do ListBox1.Items.Add(MIRROR[Y,A]);
for A:= 0 to X[Y]-1 do StringGrid1.Cells[Y,A+2]:=ListBox1.Items[A];
end;
end.
--- posted by geoForum on 
http://www.delphiedintorni.it

hai gia dato un occhio all'esempio della guida?
se non ricordo male dovrebbe fare prp qualcosa di simile a cio che ti
serve.
A.

Una piccola correzione...
MEGLIO QUESTA SOTTO:
const MAXCOLONNE = 5;
      MAXRIGHE   = 1000;
var
  Form1: TForm1;
  // sarebbe meglio usare questo sotto
  MIRROR : Array [0..MAXCOLONNE,0..MAXRIGHE] of String;
  X      : Array [1..5] of Integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var c : integer;
begin
StringGrid1.FixedCols:=0;
StringGrid1.FixedRows:=0;
StringGrid1.RowCount:=MaxRighe;
StringGrid1.ColCount:=MaxColonne;
ListBox1.Visible:=false;
// carica da disco valori dell'array X[] oppure
for c:=1 to 5 do X[c]:=0;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow:
Integer;
  Rect: TRect; State: TGridDrawState);
begin
if ARow=0 then
   Stringgrid1.RowHeights[0]:=10;
if ARow=1 then
  begin
  StringGrid1.Canvas.Brush.Color := $00FFC9A8;
  StringGrid1.Canvas.FillRect(Rect);
  Stringgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top
+1,stringgrid1.Cells[ACol,ARow]);
  end;
  if ARow=0 then
  begin
  StringGrid1.Canvas.Brush.Color := clGreen;
  StringGrid1.Canvas.FillRect(Rect);
  Stringgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top
+1,stringgrid1.Cells[ACol,ARow]);
  end;
end;

end;



end;


end;
end.
550 euro.... ;-)



Una cosa non capisco: cosa centra la StringGrid con la ListView? Mi
sembrano due componenti molto diversi..o sbaglio?
Per Alberto Salvati:
mi sa che sono stordito perchè dall'help non ho trovato esempi, mi sai
dire dove devo andare a cercare? Ho anche provato a fare una ricerca
all'interno dei Demo ma non ho trovato nulla che potesse farmi capire
come utilizzare il componente.
Per ora sono riuscito solo ad inserire ed accodare i dati su tutte le
colonne tranne la prima, in questo modo:
in un ciclo for
ListView1.Items.Insert(0).SubItems.Add('b');
ListView1.Items[0].SubItems.Add('c');
ListView1.Items[0].SubItems.Add('d');
ListView1.Items[0].SubItems.Add('e');
in questo modo riesco a popolare la listview inserendo i dati nuovi
sempre nella prima riga e accodando i dati già inseriti. La prima
colonna però non riesco a popolarla correttamente e non escludo che
anche il resto (le 4 istruzioni qui sopra) sia corretto.
Mi date una manina?
Grazie a tutti.

 ha scritto nel messaggio 
news:1171028128.8...@v45g2000cwv.googlegroups.com...




var li: TListItem;
..
li:=ListView1.Items.Add;
li.Caption:='Primacolonna';
li.Subitems.Add('Seconda colonna');
li.Subitems.Add('Terza colonna');
// cosi' via
Ciao Giorgio

 sembrano due componenti molto diversi..o sbaglio?
Lascia perdere, è un "troll".
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)
     Non hai la possibilità di scaricare Turbo Delphi Explorer?
     Te lo spedisco io!! [
http://blog.marco.breveglieri.name/?p=48
]

Ok sono riuscito a fare quello che mi serviva. Grazie mille a tutti.
Ora non rimane che provare a gestire gli ordinamenti cliccando sulle
intestazioni di colonna.
Da quello che ho visto la ListView è un ottimo componente con cui si
può fare di tutto ma è altrettanto complesso nel gestirlo...poi magari
è solo una mia impressione dato che questo oggetto non l'avevo ancora
usato.
X MARCO <ALKA> BREVEGLIERI
Scusa ma cos'è un "troll"? Intendi che aveva capito roma per toma o ha
un significato ben preciso?


Un troll č una specie di strega del forum o folletto, che fa dispetti. 
Marco fa la caccia tipo inquisizione, ma cosě facendo il troll lo fa lui a
gratis, perň si fa perdonare mettendo a disposizione Turbo Delphi ;-) 
Ciao


 un significato ben preciso?
Leggi qui:
http://it.wikipedia.org/wiki/Troll_%28Internet%29


> Scusa ma cos'è un "troll"?
Non ne sono sicuro me per me Troll è una storpiatura di Tron dal famoso film.
Praticamente un caerto Flynn doveva combattere e distruggere i software da
lui stesso concepiti. Da qui il significato di far saltare un sistema al
quale si è "legati".
Ciao!


Marco,sul link che hai postato, parlano anche del cacciatore di Troll ;-)
Durante i conflitti causati dai troll il comportamento degli utenti di un
gruppo si può classificare in una di queste sei categorie:
    * i Troll, che attivamente fomentano gli scontri e i litigi.
    * i Cacciatori di Troll che non iniziano il conflitto, ma se coinvolti
ricambiano con gli interessi, dando luogo ad una vera escalation. Spesso
usano i troll come scusa per il loro pessimo comportamento, e in molti
casi accusano facilmente altri utenti di essere troll a prescindere dagli
intenti di questi.
Purtroppo, poiché i cacciatori di troll sono essi stessi (come i troll)
affamati di controversie, i veri sconfitti sono gli altri utenti del forum
che avrebbero preferito che non si arrivasse allo scontro.
CMQ mi ritrovo in tutti gli aspetti che riguardano le motivazioni del
Troll ;-)
Ciao buona serata 
PS scherzi a parte stassera .... !! ;-)


 mi sa che sono stordito perchè dall'help non ho trovato esempi
Tratto dalla guida in linea:
This example requires only a blank form.  All other objects: TListView, 
TListColumns, TListItems, are created dynamically. You must add comctrls 
to the uses clause of the unit file.
procedure TForm1.FormCreate(Sender: TObject);
const
   Names: array[0..5, 0..1] of string = (
     ('Rubble', 'Barney'),
     ('Michael', 'Johnson'),
     ('Bunny', 'Bugs'),
     ('Silver', 'HiHo'),
     ('Simpson', 'Bart'),
     ('Squirrel', 'Rocky')
     );
var
   I: Integer;
   NewColumn: TListColumn;
   ListItem: TListItem;
   ListView: TListView;
begin
   ListView := TListView.Create(Self);
   with ListView do
   begin
     Parent := Self;
     Align := alClient;
     ViewStyle := vsReport;
     NewColumn := Columns.Add;
     NewColumn.Caption := 'Last';
     NewColumn := Columns.Add;
     NewColumn.Caption := 'First';
     for I := Low(Names) to High(Names) do
     begin
       ListItem := Items.Add;
       ListItem.Caption := Names[I][0];
       ListItem.SubItems.Add(Names[I][1]);
     end;
   end;
end;
Questo esempio viene fuori se cerchi il topic relativo alla property 
ITEMS della TCustomlistview nella guida di d7e.
A.

 che avrebbero preferito che non si arrivasse allo scontro.
Sei proprio un poveretto!!! 
GD.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Fottiti ! ;-)


Fottiti ! ;-)
Sparisci imbecille.


monotematici e scontati cari TrollBuster :-D



C O M U N I S T A  !
