AGB  ·  Datenschutz  ·  Impressum  







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

Daten ins stringgrid einlesen

Ein Thema von Natcree · begonnen am 29. Mär 2013 · letzter Beitrag vom 29. Mär 2013
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Daten ins stringgrid einlesen

  Alt 29. Mär 2013, 09:52
kommt jetzt keine Fehler Meldung mehr er überschreibt die vorhandenen emails. Und nun?
wissen wir auch endlich was nicht funktioniert.

Wie teilst du dem StringGrid denn mit, dass du nun x Zeilen brauchst?
Wie ermittelst du, in welche Zeile du schreiben musst?
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
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Daten ins stringgrid einlesen

  Alt 29. Mär 2013, 10:01
Eigendlich übernimmt er ja nur den Index der Nachrichten liste muss ich hier jetzt noch ne 2. Schleife fürs Stringgrid einbauen?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Daten ins stringgrid einlesen

  Alt 29. Mär 2013, 10:05
Du musst dem StringGrid mitteilen, wieviele Zeilen du denn haben möchtest Delphi-Referenz durchsuchenTStringGrid.RowCount und in welche Zeile die Daten eingetragen werden sollen. Das passiert alles nicht automatisch.

Also, überlege dir, wie du an die Zeilenanzahl kommst und passe diese entsprechend an.
Dann überlege dir, wie du an den Zeilenindex kommst, wo du die neuen Daten eintragen willst und trage die Daten dort ein.

Und wenn du es richtig machen möchtest, dann erzeuge dir eine Klasse, die die Informationen zur Mail speichert und hängst diese einfach an eine Delphi-Referenz durchsuchenTObjectList .

Zur Aktualisierung des StringGrids schreibst du dir einfach eine Routine, die diese Liste in einem StringGrid anzeigt
Delphi-Quellcode:
procedure ShowListInStringGrid( AMailInfoList : TObjectList; AStringGrid : TStringGrid );
begin
  // hier jetzt das Geraffel für die Anzeige der Daten
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)

Geändert von Sir Rufo (29. Mär 2013 um 10:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#4

AW: Daten ins stringgrid einlesen

  Alt 29. Mär 2013, 10:06
Delphi-Referenz durchsuchenTStringGrid.RowCount, die Zeilen müssen ja erst einmal da sein, bevor man sie befüllen kann.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Daten ins stringgrid einlesen

  Alt 29. Mär 2013, 10:17
Da die nachrichtenliste dir var ist die mir die anzahl der zeilen gibt die ich brauche müsste ich ja den rowcount um diese anzahl vergrössern.

Richtig?

Dann müsste ich ihm anschliessend sagen das er aber der ersten leere Zeile die Daten über nehmen soll richtig??

Form3.ElTreeStringGrid1.RowCount:= Form3.ElTreeStringGrid1.RowCount+nachrichtenliste;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#6

AW: Daten ins stringgrid einlesen

  Alt 29. Mär 2013, 10:21
- 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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Daten ins stringgrid einlesen

  Alt 29. Mär 2013, 10:42
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;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Daten ins stringgrid einlesen

  Alt 29. Mär 2013, 10:44
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;
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
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Daten ins stringgrid einlesen

  Alt 29. Mär 2013, 10: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
Antwort Antwort


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 00:41 Uhr.
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