AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Element '' hat kein übergeordnetes Fenster

Ein Thema von bensh · begonnen am 3. Dez 2006 · letzter Beitrag vom 3. Dez 2006
Thema geschlossen
bensh

Registriert seit: 3. Dez 2006
6 Beiträge
 
Delphi 7 Professional
 
#1

Element '' hat kein übergeordnetes Fenster

  Alt 3. Dez 2006, 12:57
Moin Leute.
Ich bin gerade dabei mir ein wenig Delphi beizubringen. Stolpere aber über einen relative kleinen Stein Namens InvalidOperation Exception mit der o.g. Meldung.

Mein Plan (Abstract):
Eine Textdatei auslesen und gültige Einträge in einer ListBox darstellen.

Mein Code:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, StrUtils, SysUtils, Variants, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type

  TForm1 = class(TForm)
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;
  filename : String;
  entries : Array[Byte, 1..2] of String;

implementation

{$R *.dfm}


// Hilfsfunnktion
procedure Split (const Delimiter: Char;
                         Input: string;
                         const Strings: TStrings) ;
begin
   Assert(Assigned(Strings)) ;
   Strings.Clear;
   Strings.Delimiter := Delimiter;
   Strings.DelimitedText := Input;
end;


procedure TForm1.FormCreate(Sender: TObject);
var
  line : String;
  handle : TextFile;
  i : Integer;
  A : TStringList;
begin
  // assign components
  ListBox1 := TListBox.Create(self);

  filename := 'Road/to/File';
  AssignFile(handle, filename);
  Reset(handle);

  i := 0;

  while not Eof(handle) do
   begin

     ReadLn(handle, line);
     if (AnsiStartsStr('#', line) <> true)
     AND (Length(line) > 0) then
     begin
      // ab hier haben wir gueltige eintraege

      // temporaerer Container instanziieren
      A := TStringList.Create();
      try

        Split(' ', line, A);
        entries[i,1] := a[0];
        entries[i,2] := a[1];

        ListBox1.Items.Add(entries[i,2]);
        i:=i+1;

      finally
        // Container lösen
      A.Free;
      end; // try

    end; // if
  end; // loop

end; // procedure

end.
Die Meldung besagt ja dass das Befüllen der Listbox illegal ist.
Der Debugger sagt definitiv dass es hier passiert
ListBox1.Items.Add(entries[i,2]); Seht ihr einen Fehler?!

Vielen Dank im Voraus!
Cheers!

[edit=SirThornberry]Titel des Beitrags geändert - Mfg, SirThornberry[/edit]
 
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
 
bensh

Registriert seit: 3. Dez 2006
6 Beiträge
 
Delphi 7 Professional
 
#3

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

  Alt 3. Dez 2006, 14:18
Super!
Klappt! Danke!

ListBox1 := TListBox.Create(Self); habe ich entfernt und es läuft alles super... noch...

wär super wenn du den thread im augen behältst, falls da noch Fragen auftreten. Was schon fast garantiert ist. Ich komme aus der Java Ecke und habe noch nie mit mit Pascal/Delphi zu tun gehabt.. ist mal ein ganz anderes Konzept

Danke nochmal
 
bensh

Registriert seit: 3. Dez 2006
6 Beiträge
 
Delphi 7 Professional
 
#4

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

  Alt 3. Dez 2006, 14:21
Wie läft das eigentlich mit dem VCL?
Warum musste ich die Zuweisung herausnehmen? Ist da so eine Art Descriptor der die Formular-Komponenten schon bei (visueller) Erstellung registriert? oder wie?
 
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Element '' hat kein übergeordnetes Fenster

  Alt 3. Dez 2006, 14:22
Bei uns gilt pro Frage ein neuer Thread. Wenn du also eine weitere Frage hat die nix mit dem Titel zu tun hat eröffne einfach einen neuen Thread mit dem neuen Problem.

Um zu vermeiden das die neue Frage, welche nix mehr mit dem ursprünglichen Titel zu tun hat, behandelt wird mach ich hier mal zu.
*** LOCKED ***
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
 
Thema geschlossen


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz