Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Daten ins stringgrid einlesen

  Alt 29. Mär 2013, 11:43
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat