AGB  ·  Datenschutz  ·  Impressum  







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

Memo lässt Zeilen verschwinden

Ein Thema von aphexx · begonnen am 25. Mär 2011 · letzter Beitrag vom 31. Mär 2011
 
aphexx

Registriert seit: 23. Apr 2010
19 Beiträge
 
#1

Memo lässt Zeilen verschwinden

  Alt 25. Mär 2011, 15:08
Delphi-Version: 2009
Hallo!

Ich bin gerade dabei ein Chat-Programm für Dropbox zu entwickeln.
Nix großes und manche Stimmen halten es für überflüssig, aber ich finds toll

Hintergrund: Ich arbeite mit einem Verzeichnis in dem x txt-Dateien liegen.
Diese lade ich bei einer Aktualisierung in ein array (da das integrierte Datum zum sortieren beutzt wird) vom typ record
(Username, Datum/Zeit, Nachricht). Danach wird alles in einem Memo angezeigt.

Das Problem ist, dass immer der vorletzte Eintrag (von beispielseise 3 txt-Dateien) nur mit Username und Datum angezigt wird.
Die Nachricht ist nicht zu sehen. Das Array läuft sauber, die Daten exisiteren, nur die Darstellung nicht

Vielleicht hilft es, wenn ich zusätzlich die EXE bereitstelle?

Hier ist der Code. Unwichtige Funktionen/Prozeduren habe ich ausgeklammert.

Delphi-Quellcode:
unit main;

interface

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

function RandomString(const len: Integer = 30; const CharSet: string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'): string;overload;

type
  TEntry = record
    User: String[25];
    Msg: TStringList;
    DatumZeit: String;
  end;
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    BSend: TButton;
    MOutput: TMemo;
    MMessage: TMemo;
    EUser: TEdit;
    Label1: TLabel;
    EDiv: TEdit;
    Label2: TLabel;
    BSort: TButton;
    Icons: TImageList;
    BRefresh: TButton;
    procedure FormCreate(Sender: TObject);
    procedure BSendClick(Sender: TObject);
    procedure BSortClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure BRefreshClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Entry: TEntry;
  Entries: Array of TEntry;
  AufAb: Boolean;

implementation

{$R *.dfm}

procedure GetFilesInDirectory(Directory: string; const Mask: string;
                              List: TStrings;
                              WithSubDirs, ClearList: Boolean);
[...]
end;

procedure Sortieren(Aufsteigend: Boolean);
var
  E: TEntry;
  i, j, max: Integer;
  x, y: TDateTime;
begin
  E.Msg := TStringlist.Create;
  max := Length(Entries);
  for i:=0 to max-1 do
  for j:=0 to max-1 do
  begin
     DateSeparator := '.';
     ShortDateFormat := 'dd.mm.yyyy';
     LongTimeFormat := 'hh:nn:ss.zzz';

     if Aufsteigend = True
     then
     begin
       x := StrToDateTime(Entries[i].DatumZeit);
       y := StrToDateTime(Entries[j].DatumZeit);
     end
     else
     begin
       x := StrToDateTime(Entries[j].DatumZeit);
       y := StrToDateTime(Entries[i].DatumZeit);
     end;

     if x > y then
      begin
       E := Entries[i];
       Entries[i] := Entries[j];
       Entries[j] := E;
     end;
  end;
  E.Msg.Clear;
end;

procedure InitFillEntries(Liste: TStringList);
var
  i, zeilen, j: Integer;
  Inhalt: TStringlist;
begin
  Inhalt := TStringlist.Create;

  if Length(Entries) > Liste.Count then
  begin
    for i := 0 to Length(Entries) - 1 do
    begin
      Entries[i].Msg.Clear;
      Entries[i].User := '';
      Entries[i].DatumZeit := '';
    end;
  end;

  SetLength(Entries, Liste.Count);

  for i := 0 to Length(Entries) - 1 do
  begin
    if FileExists(Liste[i]) then Inhalt.LoadFromFile(Liste[i])
    else
    begin
      ShowMessage(Liste[i] + #13 + 'does not exist.');
      Exit;
    end;

    Entries[i].User := Inhalt.Strings[0];
    Entries[i].DatumZeit := Inhalt.Strings[1];

    Entries[i].Msg := TSTringlist.Create;
    Entries[i].Msg.BeginUpdate;
    Entries[i].Msg.LoadFromFile(Liste[i]);
    Entries[i].Msg.Delete(0);
    Entries[i].Msg.Delete(0);

    Entries[i].Msg.EndUpdate;
  end;
  Sortieren(AufAb);
  Inhalt.Free;
end;


procedure PassEntries;
var
  i, c, j: Integer;
  L, laden: TStringlist;
  Liste: TStringlist;
  s, dir: String;
begin
  L := TStringlist.Create;
  Liste := TStringlist.Create;
  Laden := TStringlist.Create;

  dir := ExtractFilePath(ParamStr( 0 ))+'dbchat\';

  GetFilesInDirectory(dir, '*.txt', Liste, False, True);

  L.BeginUpdate;

  InitFillEntries(Liste); //Array Füllen

  for i := 0 to Length(Entries) - 1 do
  begin
    L.BeginUpdate;
    L.Add(Entries[i].User);
    L.Add(Entries[i].DatumZeit);
    L.Add('');
    L.Add(Trim(Entries[i].Msg.Text));

    for c := 0 to 19 do s := s + Form1.EDiv.Text;
    L.Add(s);
    s := '';
  end;
  L.EndUpdate;

  Form1.MOutput.Lines.Clear;

  Form1.MOutput.Lines.Assign(L);

  Liste.Free;
  laden.Free;
  L.Free;
end;

function RandomString(const len: Integer; const CharSet: string): string;
[...]
end;

procedure TForm1.BSendClick(Sender: TObject);
[...]
end;

procedure TForm1.BSortClick(Sender: TObject);
begin
[...]
end;

procedure TForm1.BRefreshClick(Sender: TObject);
begin
  PassEntries;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  dir : string;
begin
  Randomize;
  // Get the current directory
  dir := GetCurrentDir;
  if DirectoryExists('dbchat') = True
  then
    begin
      AufAb := True;
      PassEntries;
    end
  else
  begin
   CreateDir('dbchat');
   ShowMessage('Directory created:' + #13 + dir + 'dbchat');
  end;
  MMessage.Lines.Clear;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  //Leeren
  for i := 0 to Length(Entries) - 1 do
  begin
    Entries[i].Msg.Clear;
    Entries[i].User := '';
    Entries[i].DatumZeit := '';
  end;
  SetLength(Entries, 0);
end;

end.
  Mit Zitat antworten Zitat
 


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 16:34 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 by Thomas Breitkreuz