Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   "gelöst"clipboard als txt datei abspeichern (https://www.delphipraxis.net/107027-geloest-clipboard-als-txt-datei-abspeichern.html)

Triples 21. Jan 2008 00:47


"gelöst"clipboard als txt datei abspeichern
 
Guten Nabend :-D
Ich komme mal sofort zum punkt.
Und zwar möcht ich den text aus dem clipboard als txt datei abspeichern,wo aber gefprüft wird ob der eintrag schon drin steht.und wenn ja zur nächsten zeile spring und dort weiter schreibt bzw nicht den 1 eintrag überschreibt.
Habe hier auf dieser seite http://delphi.about.com/cs/adptips20...ltip0301_4.htm nun ein code snipsel gefunden.
Leider bekomme ich beim compelieren ne fehler meldung.
Könte jemand so net sein und mir unter die arme greifen bitte.
Wo habe ich was an dieser stelle falsch gemacht?

Delphi-Quellcode:
begin
ClipboardTxtToFile(cliptext.txt);
end
Zitat:

[Fehler] main12.pas(193): Undefinierter Bezeichner: 'c'
[Fehler] main12.pas(193): Operator oder Semikolon fehlt
[Fehler] main12.pas(194): ';' erwartet, aber '.' gefunden
[Fehler] main12.pas(200): Deklaration erwartet, aber Dateiende gefunden
[Fataler Fehler] Auslesen.dpr(5): Verwendete Unit 'main12.pas' kann nicht compiliert werden
Delphi-Quellcode:
procedure TfrmMain12.Memo1Change(Sender: TObject);
begin
showmessage(Clipboard.AsText);

end;

procedure TfrmMain12.Edit1Change(Sender: TObject);
begin
Memo1.Text := Clipboard.AsText;
end;
procedure TfrmMain12.Button1Click(Sender: TObject);
function ClipboardTxtToFile
         (sFileTXT : string) : boolean;
var
   ps1, ps2 : PChar;
   dwLen : DWord;
   tf : TextFile;
   hData : THandle;
begin
  Result := False;
  with Clipboard do begin
   try
    Open;
     if(HasFormat(CF_TEXT)) then begin
      hData := GetClipboardData(CF_TEXT) ;
      ps1 := GlobalLock(hData) ;
      dwLen := GlobalSize(hData) ;
      ps2 := StrAlloc(1 + dwLen) ;
      StrLCopy( ps2, ps1, dwLen ) ;
      GlobalUnlock( hData ) ;

      AssignFile(tf, sFileTXT) ;
      ReWrite(tf) ;
      Write(tf, ps2) ;
      CloseFile(tf) ;

      StrDispose( ps2 ) ;
      Result := True;
     end;
    finally
     Close;
   end;
  end;
end;
begin
ClipboardTxtToFile(cliptext.txt);
end.
Edit so habe es geschaft nun mit diesem Code exampel die zwischen ablage zu speichern,aber leider wird immer der erste eintrag wi der saveclipboard.txt überschrieben.
Wie geht das nun das dieses nicht pasiert sonder delphi die datei halt öfnet und das schreiben fortsetz und nicht überschreibt?

Delphi-Quellcode:
var
  slWork : TStringList;

begin
  // Zwischenablage öffnen
  Clipboard.Open;
  try
    // Wenn kein Text enthalten ist, fertig
    if not Clipboard.HasFormat(CF_TEXT) then exit;
    // Der Einfachheit halber eine Stringliste zum Auslesen
    // dann lässt sich einfach SaveToFile benutzen
    slWork := TStringList.Create;
    try
      slWork.Text := Clipboard.AsText;
      slWork.SaveToFile('c:\temp\saveclipboard.txt');
    finally
      FreeAndNil(slWork);
    end;
  finally
    Clipboard.Close;
  end;
end;
So sollte die datei später aufgebaut sein.
Delphi-Quellcode:
1 eintrag der zwischenablage
2 eintrag
3 eintrag
Edit so nun habe es ich selber gelöst.

Delphi-Quellcode:
procedure TfrmMain12.Button1Click(Sender: TObject);
var
  slWork : TStringList;
  dir, log : string;
begin
  // Zwischenablage öffnen
  Clipboard.Open;
  try
    // Wenn kein Text enthalten ist, fertig
    if not Clipboard.HasFormat(CF_TEXT) then exit;
    // Der Einfachheit halber eine Stringliste zum Auslesen
    // dann lässt sich einfach SaveToFile benutzen
    slWork := TStringList.Create;
    try
      slWork.Text := Clipboard.AsText;
      dir := ExtractFilePath(Application.Exename);
      log := Edit1.text;;
      AppendOrWriteTextToFile(dir + '\logfile.txt', log)
    finally
      FreeAndNil(slWork);
    end;
  finally
    Clipboard.Close;
  end;
end;
procedure TfrmMain12.Memo1Change(Sender: TObject);
begin
  Button1.Click;
end;

end.

marabu 21. Jan 2008 05:14

Re: "gelöst"clipboard als txt datei abspeichern
 
Moin Emil,

erst speicherst du den Text aus der Zwischenablage in eine StringList und dann verwirfst du diese StringList, ohne ihren Inhalt an die Datei anzuhängen?

Delphi-Quellcode:
procedure FileAppend(fn: TFileName; s: TStream);
var
  mode: Word;
begin
  if FileExists(fn)
    then mode := fmOpenWrite or fmShareDenyWrite
    else mode := fmCreate;
  with TFileStream.Create(fn, mode) do
  try
    Position := Size;
    CopyFrom(s, 0);
  finally
    Free;
  end;
end;

procedure TDemoForm.Button4Click(Sender: TObject);
var
  s: TStream;
begin
  with Clipboard do
  begin
    Open;
    try
      if Clipboard.HasFormat(CF_TEXT) then
      begin
        s := TStringStream.Create(AsText);
        try
          FileAppend(ExtractFilePath(ParamStr(0)), s);
        finally
          s.Free;
        end;
      end;
    finally
      Close;
    end;
  end;
end;
Freundliche Grüße


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