Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - ListViews zur laufzeit erzeugen??


csigg - Do 07.07.05 14:25
Titel: ListViews zur laufzeit erzeugen??
Kann ich Listviews denn zur Laufzeit erzeugen?? Und welche Namen haben die dann, bzw. wie kann ich denen dann Namen geben??


freedy - Do 07.07.05 14:31

Klar geht das. Wie jede andere Klasse auch. Wenn du nur eine genau definierte Anzahl erstellen willst, pack Variablen in den Private-Teil deines Forms (z.B. ListView1, ListView2...ListViewN). Die werden dann einfach mit


Delphi-Quelltext
1:
ListView1 := TListView.Create(Form1 bzw.Name deines Forms);                    


erzeugt.

Dann musst du nur doch den ganzen Rest an Properties zuweisen.
Ein Blick in die Delphi-Hilfe hätte aber auch genügt.

freedy


csigg - Do 07.07.05 14:46

Ich weiss davor noch nicht wieviel ich erzeugen will, das wird erst aus der DB ausgelesen, drum weiss ich ja nicht wie ich dem ganzen versch. Namen gebe


csigg - Do 07.07.05 15:45

habs soweit jetzt alles so gemacht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  for i := 0 to anzahl do
      begin
           lvCube := TListView.Create(self);
           lvCube.Parent := frm_Main;
           links := links + 100;
           lvCube.Left := lvCube.Left + 100;
           lvCube.Name := 'lvCube'+inttostr(i);
           ShowMessage('1 Durchgang');
      end;

Wie kann ich jetzt in einer Schleife auf die LV´s zugreifen??
Die Namen sind hinterher ja lvCube0, lvCube1, lvCube2,.....
Wie kann ich in einer Schleife drauf zugreifen und dabei immer den Namen um eins
erhöhen??

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


Dolphi - Do 07.07.05 16:10

Das ist nicht ganz richtig. Statt der einfachen Variable lvCube solltest du vielleicht ein dynamisches Array verwenden.
Schau mal in der Delphi-Hilfe nach "Dynamische Arrays"

Als globale Variable:

Delphi-Quelltext
1:
  lvCube: array of TListView;                    


Irgendwo anders:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  SetLength(lvCube, anzahl);
  for i := 0 to anzahl - 1 do begin   
    lvCube[i] := TListView.Create(self);   
    lvCube[i].Parent := frm_Main;   
    links := links + 100;   
    lvCube[i].Left := lvCube[i].Left + 100;   
    lvCube[i].Name := 'lvCube'+inttostr(i);   
    ShowMessage('1 Durchgang');   
  end;


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


Lannes - Do 07.07.05 16:14

Hallo,

so in etwa:

Delphi-Quelltext
1:
2:
3:
4:
for i := 0 to anzahl do  
  begin  
  frm_Main.FindComponent('lvCube'+inttostr(i)) as TListView).Tag := 0;
  end;


freedy - Do 07.07.05 16:15

Dynamisch geht es auf jeden Fall. Ansonsten könntest du Zugriff bekommen, indem du die Komponenten suchst mit FindComponent. Einfach mal in der Delphi-Hilfe schauen. Da gibt es, wenn ich mich richtig erinnere, ein Beispiel zu.

Ich möchte dich nur auf eines hinweisen. Das Listview ist irre langsam und ich frage mich, ob es bei dir wirklich effektiv ist, mehr als ein Listview anzulegen. Überleg doch noch mal, ob es nicht noch eine andere Möglichkeit gäbe. :?

Gruß
freedy


csigg - Fr 08.07.05 08:32

Ich wüsste nicht welche anderen Möglichkeiten, aber ich hatte mit meinen 6 ListViews eiegentlich noch nie Performance Probleme.


csigg - Fr 08.07.05 13:30

Ich hab in der Delphi Hilfe nix passendes gefunden.
Ich muss jetzt halt wissen wie ich dieser Komponente z.b. zu späterem zeitpunkt was zuweise. Wie kann ich auf die Komponente zugreifen, wenn ich deren Namen nicht weiss.