Einzelnen Beitrag anzeigen

xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Element '' hat kein übergeordnetes Fenster (Newbie)

  Alt 3. Dez 2006, 13:25
Hallo,

gehe ich Recht in der Annahme, dass die Listbox schon im Designer erstellt wird? Dann darfst Du diese nicht nochmals erstellen, das erledigt die VCL für Dich.
Wenn nicht, dann musst Du Deiner Listbox noch ein Parent übergeben, in dem sie angezeigt werden soll. In Deinem Fall das Fenster selbst:
Listbox1.Parent := Self; Übrigens läuft Dir nach 256 Einträgen Dein Array über. Du kannst auch einfach eine StringList nehmen, die kann mit Schlüssel-/Wertepaaren umgehen. Dann kannst Du einfach die ganze Datei einlesen und die Kommentarzeilen rausschmeißen. Ich hänge mal ein kommentiertes Beispiel an:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    // StringListe Methode definieren
    Values: TStringList;
    procedure LoadFile(const Name: String);
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  // StringListe anlegen und vorbereiten
  Values := TStringList.Create;
  Values.NameValueSeparator := ' ';

  // Datei laden
  LoadFile('C:\Test.txt');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Stringliste zerstören
  Values.Free;
end;

procedure TForm1.LoadFile(const Name: String);
var
  C: Integer;
begin
  // Datei laden
  Values.LoadFromFile(Name);

  // Kommentare und leere Zeilen ausfiltern
  for C := Values.Count - 1 downto 0 do
    if (Values[C] = '') or (Pos('#', Trim(Values[C])) = 1) then
      Values.Delete(C);

  // Listbox füllen
  ListBox1.Items.BeginUpdate;
  try
    ListBox1.Items.Clear;
    for C := 0 to Values.Count - 1 do
      ListBox1.Items.Add(Values.ValueFromIndex[C]);
  finally
    ListBox1.Items.EndUpdate;
  end;
end;
Gruß
xaromz
I am a leaf on the wind - watch how I soar