Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Daten ins stringgrid einlesen (https://www.delphipraxis.net/174034-daten-ins-stringgrid-einlesen.html)

DeddyH 29. Mär 2013 10:21

AW: Daten ins stringgrid einlesen
 
- Ursprünglichen RowCount merken (das ist der Zeilenindex für die erste Nachricht aus Deiner Liste)
- RowCount entsprechend Anzahl Nachrichten erhöhen
- Nachrichten ab gemerktem Zeilenindex eintragen

So in etwa sollte es funktionieren. Ich hätte allerdings auch nicht unbedingt ein StringGrid genommen, bei anderen Komponenten fügt man einfach Items an und ist fertig damit.

Natcree 29. Mär 2013 10:42

AW: Daten ins stringgrid einlesen
 
Danke ich habe es jetzt

Delphi-Quellcode:
    i:=Form3.ElTreeStringGrid1.RowCount;
    for Index := Nachrichtenliste downto 1 do
       begin
         idmessage1.clear;
         idPOP31.RetrieveHeader(Index, IdMessage1);
         Form3.eltreestringgrid1.cells[0,i+index-1] := IdMessage1.From.Address;
         IdPOP31.Retrieve(index,idMessage1);
         Form3.eltreestringgrid1.cells[1,i+index-1] := IdMessage1.Subject;
         IdPOP31.Retrieve(index,idMessage1);
         Form3.eltreestringgrid1.cells[2,i+index-1]:= IdMessage1.body.GetText;
         IdPOP31.RetrieveHeader(index,idmessage1);
         Form3.eltreestringgrid1.Cells[3,i+index-1] := Datetostr(Idmessage1.Date);
         IdPOP31.RetrieveHeader(index,idmessage1);
         Form3.eltreestringgrid1.Cells[4,i+index-1] := IdMessage1.From.Name;
         {IdPOP31.Delete(index);}
       end;

Sir Rufo 29. Mär 2013 10:43

AW: Daten ins stringgrid einlesen
 
Hier mal ein Entwurf, wie das mit der Delphi-Referenz durchsuchenTObjectList und einem Delphi-Referenz durchsuchenTStringGrid funktioniert
Delphi-Quellcode:
unit MailInfo;

interface

uses
  Contnrs, // <- TObjectList
  Grids; // <- TStringGrid

type
  TMailInfo = class
  private
    FAddress : string;
    FSubject : string;
    FBody : string;
    FDate : TDateTime;
    FName : string;
  public
    property Address : string read FAddress write FAddress;
    property Subject : string read FSubject write FSubject;
    property Body : string read FBody write FBody;
    property Date : TDateTime read FDate write FDate;
    property Name : string read FName write FName;
  end;

procedure ShowListInStringGrid( AMailInfoList : TObjectList; AStringGrid : TStringGrid );

implementation

procedure ShowListInStringGrid( AMailInfoList : TObjectList; AStringGrid : TStringGrid );
var
  LItem : TMailInfo;
  LIdx : Integer;
  LRow : Integer;
  LCol : Integer;
  LValue : string;
begin
  // StringGrid anpassen
  with AStringGrid do
    begin
      FixedRows := 0; // keine festen Zeilen
      FixedCols := 0; // keine festen Spalten

      // Die Anzahl der Zeilen wird bestimmt durch die Summe der
      // - festen Zeilen
      // - Anzahl der Datenzeilen
      RowCount := FixedRows + AMailInfoList.Count;

      // Wir wollen 5 Spalten haben
      ColCount := FixedCols + 5;
    end;

  // Jetzt die Daten in das Grid schreiben
  for LIdx := 0 to Pred( AMailInfoList.Count ) do
    begin
      // Das MailItem aus der Liste casten und merken
      LItem := AMailInfoList[LIdx] as TMailInfo;

      // In welche Zeile werden wir schreiben?
      LRow := AStringGrid.FixedRows + LIdx;

      // Jetzt durch alle Spalten laufen
      for LCol := 0 to Pred( AStringGrid.ColCount ) do
        begin
          case LCol of
            0 : LValue := LItem.Address;
            1 : LValue := LItem.Subject;
            2 : LValue := LItem.Body;
            3 : LValue := DateToStr( LItem.Date );
            4 : LValue := LItem.Name;
          else
            LValue := '';
          end;

          // Mit dieser Abfrage verhindern wir ein unnötiges Neuzeichnen des Grids
          if AStringGrid.Cells[LCol,LRow] <> LValue then
            AStringGrid.Cells[LCol,LRow] := LValue;
        end;
    end;
end;

Sir Rufo 29. Mär 2013 10:44

AW: Daten ins stringgrid einlesen
 
Zitat:

Zitat von Natcree (Beitrag 1209340)
Danke ich habe es jetzt

Delphi-Quellcode:
    i:=Form3.ElTreeStringGrid1.RowCount;
    for Index := Nachrichtenliste downto 1 do
       begin
         idmessage1.clear;
         idPOP31.RetrieveHeader(Index, IdMessage1);
         Form3.eltreestringgrid1.cells[0,i+index-1] := IdMessage1.From.Address;
         IdPOP31.Retrieve(index,idMessage1);
         Form3.eltreestringgrid1.cells[1,i+index-1] := IdMessage1.Subject;
         IdPOP31.Retrieve(index,idMessage1);
         Form3.eltreestringgrid1.cells[2,i+index-1] := IdMessage1.body.GetText;
         IdPOP31.RetrieveHeader(index,idmessage1);
         Form3.eltreestringgrid1.Cells[3,i+index-1] := Datetostr(Idmessage1.Date);
         IdPOP31.RetrieveHeader(index,idmessage1);
         Form3.eltreestringgrid1.Cells[4,i+index-1] := IdMessage1.From.Name;
         {IdPOP31.Delete(index);}
       end;

Warum glaube ich, dass du es doch noch nicht so wirklich verstanden hast ...

BTW: du könntest deinen Code erheblich kürzen und damit erheblich performanter gestalten:
Delphi-Quellcode:
    i:=Form3.ElTreeStringGrid1.RowCount;
    for Index := Nachrichtenliste downto 1 do
       begin
         idmessage1.clear;
         idPOP31.RetrieveHeader(Index, IdMessage1);
         Form3.eltreestringgrid1.cells[0,i+index-1] := IdMessage1.From.Address;
         Form3.eltreestringgrid1.cells[1,i+index-1] := IdMessage1.Subject;
         Form3.eltreestringgrid1.cells[2,i+index-1] := IdMessage1.body.GetText;
         Form3.eltreestringgrid1.Cells[3,i+index-1] := Datetostr(Idmessage1.Date);
         Form3.eltreestringgrid1.Cells[4,i+index-1] := IdMessage1.From.Name;
         {IdPOP31.Delete(index);}
       end;

Natcree 29. Mär 2013 10:54

AW: Daten ins stringgrid einlesen
 
Ja hast recht zum Kürzen komme ich meistens immer erst später bis alles läuft . Doppelt gemoppelt hält besser. Ja auf dem weg zum könner fehlt bei mir noch sehr sehr viel grins. Aber darüber können wir ja mal in 10 Jahren nochmal schreiben grins. Danke euch beiden


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz