Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DrawText Speicher-problem (https://www.delphipraxis.net/72899-drawtext-speicher-problem.html)

hansklok 8. Jul 2006 20:43


DrawText Speicher-problem
 
Hallo, ich habe ein Problem:

Ich gebe auf eine Canvas mehrzeiligen Text mit der DrawText- Procedure aus.

...
Delphi-Quellcode:
var
  s: String;
  r: TRect;
begin
  r:= Rect(10,10,300,200);
  s:= Mem01.Text;
  Text:= PChar(s);
  DrawText(Handle,PChar(Text),length(Text),r, DT_Wordbreak);
Nun möchte ich den Text in einer Datei speichern. Das ist kein Problem. Wenn ich die Datei öffne, soll der Text wieder per DrawText auf eine Canvas ausgeben werden und zwar mit den gleichen Zeilenumbrüchen bzw. Tabstops, wie sie ursprünglich in die Memo eingegeben wurden. Nun speicher die Datei aber den Text als einen String und gibt diesen hintereinanderweg auf die Canvas aus. Zwar mit einen Zeilenumbruch, da es ja eine Beschränkung was das Ausgaberechteck betrifft gibt, aber die Zeilenumbrüche, die ursprünglich da waren werden ignoriert.
Kann mir bitte jemand ein Beispiel posten, bei dem der Text in eine Datei gespeichert und aus der Datei inklusive Zeilenumbrüche wieder ausgelesen werden kann?

MfG

hansklok

Der_Unwissende 8. Jul 2006 21:55

Re: DrawText Speicher-problem
 
Hi,
hier ein einfaches Beispiel, wie du das ganze mit einem Stream machen könntest:

Delphi-Quellcode:
procedure saveToFile(const FileName : String);
var stream : TMemoryStream;
    s : String;
    stringLength : Integer;
begin
  s := 'Dies ist ein Mehrzeiliger' + chr(13) + chr(10) + 'Text';
  stringLength := length(s);

  stream := TMemoryStream.Create;

  try
    stream.Position := 0;

    stream.Write(stringLength, sizeOf(Integer));
    stream.Write(s[1], stringLength);

    stream.SaveToFile(FileName);
  finally
    stream.Free;
  end;
end;

function loadFromFile(const FileName : String) : String;
var stream : TMemoryStream;
    stringLength : Integer;
begin
  result := '';

  stream := TMemoryStream.Create;

  try
    stream.LoadFromFile(fileName);
    stream.Position := 0;

    stream.read(stringLength, sizeOf(Integer));

    if stringLength > -1 then
    begin
      setLength(result, stringLength);
      stream.read(result[1], stringLength);
    end;

  finally
    stream.Free;
  end;
end;
Das ganze solltest du dann ohne Probleme auch auf ein Canvas mehrzeilig zeichnen können

Gruß Der Unwissende


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:54 Uhr.

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