AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DrawText Speicher-problem
Thema durchsuchen
Ansicht
Themen-Optionen

DrawText Speicher-problem

Ein Thema von hansklok · begonnen am 8. Jul 2006 · letzter Beitrag vom 8. Jul 2006
Antwort Antwort
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#1

DrawText Speicher-problem

  Alt 8. Jul 2006, 21:43
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
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: DrawText Speicher-problem

  Alt 8. Jul 2006, 22:55
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
  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 04:07 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