Announcement

Collapse
No announcement yet.

Problem beim Füllen eines ListViews (Delphi-Bug?)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem beim Füllen eines ListViews (Delphi-Bug?)

    Hallo Progger,

    habe eine Anwendung mit einem MainPage-Control und mehreren TabSheets! Auf einem TabSheet befindet sich ein TListView-Element.
    In einer Prozedur Lese ich Einträge in das ListView (ReportStyle) aus einer Datei ein, in einer anderen Prozedur schreibe ich Daten aus dem ListView in eine Datei. Funktioniert alles prächtig wenn das TabSheet mit dem ListView gerade aktiv ist.

    Das Problem:

    Wenn ich meine Anwendung starte soll das TabSheet mit dem ListView nicht das aktive TabSheet sein, sondern ein anderes. Das bedeutet das ListView ist nicht aktiv und nicht sichtbar wenn ich es fülle. Ich bekomme dann immer eine Exception (Access Violation)!

    Das kuriose ist, das die erste Zeile (das erste Item mit SubItems) gefüllt wird, bei der zweiten Zeile kommt dann die Exception!
    Fülle ich das ListView mit einem Button, wenn das TabSheet mit dem ListView das aktive ist, funktioniert es.

    Kurz und bündig:
    Kann ein ListView nur dann gefüllt werden wenn es sichtbar ist??

    Gruß
    Carsten

  • #2
    Habe ich vergessen:

    Ich verwende Delphi5-Enterprise-Edition.
    Rechner ist mit OS Win2000

    Comment


    • #3
      Habe ich vergessen:

      Ich verwende Delphi 5 Enterprise Edition!
      OS ist Win 2000!

      Gruß
      Carste

      Comment


      • #4
        Hallo Carsten,

        ich kann ein ListView auf inaktivem Tabsheet auch füllen, wenn eine andere Seite aktiv ist. allerdings taucht in meinem Listview nur Text auf.

        Hängst du auch objekte an? Womit füllst Du das Listview?

        Grüße

        Juli

        Comment


        • #5
          Hallo Julia,

          erst mal Danke für die schnelle Meldung!

          Also ich fülle mein ListView auch nur mit Strings, zusätzlich zeige ich noch ein Icon in der Liste an!

          Gruß
          Carste

          Comment


          • #6
            Hallo Carsten,

            wie und woher werden die Icons eingefügt? Vielleicht stimmt ja einfach die Erstellungsreihenfolge nicht. Greifst Du eventuell auf die Icons zu, bevor sie erzeugt / geladen werden?

            Joche

            Comment


            • #7
              Hallo,

              mit Icons habe ich auch keine Probleme.
              Wenn das Laden an sich kein Problem darstellt, wird vielleicht ein fokus oder eine Selection gesetzt o.ä....

              Wie wärs denn mal mit ein bisschen sourcecode?
              Sonst ist das schwer zu finden.

              Grüße

              Juli

              Comment


              • #8
                Hi, hier ein bisschen Code und gleichtzeitig
                die Lösung (So was blödes!):

                Die Icons sind in einer ImageList! Habe die Icons schon mal entfernt, hatte dann trotzdem die selbe Fehlermeldung!

                Die auskommentierten Zeilen im Code sind der Problemverursacher! auskommentiert und alles läuft wunderbar!

                procedure TTestFrame.ReadNeedleList;
                var i: Integer;
                s,t,k: String;
                dat:TextFile;
                tmpLvItem: TListItem;
                begin
                try
                i:= 0;
                AssignFile(dat,ExtractFilePath(Application.ExeName )+'cfg\NeedleList.cfg');
                reset(dat);
                // Kommentar: lvNadelbretter ist das TListView
                lvNadelbretter.Items.Clear;
                while not system.eof(dat) do
                begin
                readln(dat,s);
                readln(dat,t);
                readln(dat,k);
                tmpLvItem:= lvNadelbretter.Items.add;
                tmpLvItem.Caption:= s;
                tmpLvItem.ImageIndex:= 0;
                tmpLvItem.SubItems.Add(t);
                tmpLvItem.SubItems.Add(k);
                //lvNadelbretter.IconOptions.AutoArrange:= True;
                //lvNadelbretter.IconOptions.AutoArrange:= False;
                end;
                finally
                CloseFile(dat);
                end;
                end

                Comment


                • #9
                  Hi, das Problem lag nicht bei den Icons, sondern bei einem AutoArrange welches ich noch aus einer Testversion übernommen hatte. Nachdem ich das AutoArrange auskommentiert hatte lief alles wunderbar!
                  Hier nun der Code:

                  <PRE>
                  procedure TTestFrame.ReadNeedleList;
                  var i: Integer;
                  s,t,k: String;
                  dat:TextFile;
                  tmpLvItem: TListItem;
                  begin
                  try
                  i:= 0;
                  AssignFile(dat,ExtractFilePath(Application.ExeName )+'cfg\NeedleList.cfg');
                  reset(dat);
                  // Kommentar: lvNadelbretter ist das TListView
                  lvNadelbretter.Items.Clear;
                  while not system.eof(dat) do
                  begin
                  readln(dat,s);
                  readln(dat,t);
                  readln(dat,k);
                  tmpLvItem:= lvNadelbretter.Items.add;
                  tmpLvItem.Caption:= s;
                  tmpLvItem.ImageIndex:= 0;
                  tmpLvItem.SubItems.Add(t);
                  tmpLvItem.SubItems.Add(k);
                  //lvNadelbretter.IconOptions.AutoArrange:= True;
                  //lvNadelbretter.IconOptions.AutoArrange:= False;
                  end;
                  finally
                  CloseFile(dat);
                  end;
                  end;</PRE>

                  Zum Schluss noch mal ein
                  <B>
                  Fettes Dankeschön für eure Kommentare!!
                  </B>
                  Gruß
                  Carste

                  Comment

                  Working...
                  X