Autor Beitrag
Bomania
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 139

Win XP

BeitragVerfasst: Mo 10.02.03 21:02 
Hallo,

ich möchte mittels dem SaveDialog eine neue Datei anlegen lassen und zugleich auch Text darin abspeichern. Bis jetzt sieht das bei mir so aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
...
 with SaveDialog1 do
  begin
    Filter:='HTML-Datei|*.html';
    InitialDir:=ExtractFilePath(ParamStr(0));
    if Execute then
    begin
      Dateiname:=FileName;
     end; // if
  end; // with
end;


Wie zu erkennen ist, fehlt mir der Teil zum anlegen der Datei/abspeichern von Text in der Datei. Kann mir da jemand helfen?

Danke
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Mo 10.02.03 21:22 
Hallo,

im Forum dürften dazu genügend Einträge existieren. Suche einmal danach.

Tipp: TFileStream, AssignFile in der Delphi-Hilfe nachschauen.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 10.02.03 22:19 
Wenn ich mal wieder vergessen habe wie das geht, dann gebe ich EOF in Delphi ein und drücke die F1 Taste. Es erscheint die Hilfe zu der Eof-Funktion. Dann klicke ich oben auf Beispiel. Da hast du ein wunderbares Beispiel wie man Texte abspeichert. Das EOF ist auf jeden Fall eine Eselsbrücke.

Ansonsten bin ich faul und schreibe meine Texte in ein TSringList. Dann gebe ich StringList.SaveToFile('c:\blabla.txt') und schon ist mein Text gespeichert.
Bomania Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 139

Win XP

BeitragVerfasst: Di 11.02.03 18:55 
Ich speichere den Text nun mit folgender Funktion ab:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure SaveStrToStream(const Stream: TStream; const Value: String); 
//Schreibt einen dynamischen String in einen Stream
var Len: Word;
begin
  Len := Length(Value);
  Stream.WriteBuffer(Len, SizeOf(Len));
  if Len > 0 then
    Stream.WriteBuffer(Pointer(Value)^, Len);
end;


Leider entsteht ein sehr unschöner Effekt: Wenn ich den Text aus einem TRichEdit abspeichere, dann befinden sich immer an erster Stelle ein oder zwei merkwürdige Zeichen. Muss man bei einem RichEdit etwas bestimmtes beachten?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 12.02.03 04:16 
Hm, also wenn du schon mit einem RichEdit arbeitest. Warum denn dann so kompliziert?

ausblenden Quelltext
1:
2:
If SaveDialog1.Execute then
  RichEdit1.Lines.SaveToFile(SaveDialog1.Filename);
Bomania Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 139

Win XP

BeitragVerfasst: Mi 12.02.03 07:27 
Danke für den Tipp. Ich hab das Problem nämlich etwas umständlich gelöst (aber es funktioniert):

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
procedure SaveStrToStream(const Stream: TStream; const Value: String); 
//Schreibt einen dynamischen String in einen Stream
var Len: Word;
begin
  Len := Length(Value);
  Stream.WriteBuffer(Len, SizeOf(Len));
  if Len > 0 then
    Stream.WriteBuffer(Pointer(Value)^, Len);
end;

...

var Dateiname:String;
var f:TextFile;
var FS:TFileStream;
     X:string;
begin
  with SaveDialog1 do
  begin
    Filter:='HTML-Dateien|*.html';
    InitialDir:=ExtractFilePath(ParamStr(0));
    if Execute then
    begin
      Dateiname:=FileName;
      FS:=TFileStream.Create(Dateiname,fmCreate);
      FS.Destroy;
      rtb_Ausgabe.SelectAll;
      X:=rtb_Ausgabe.SelText;
      AssignFile(f,Dateiname);
      ReWrite(f);
      Writeln(f,X);
      CloseFile(f);
    end; // if
  end; // with
end;