Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zwischenablage auslesen (https://www.delphipraxis.net/90937-zwischenablage-auslesen.html)

Pixelator 26. Apr 2007 10:16


Zwischenablage auslesen
 
Hallo zusammen
wie das eben so ist möchte man als blutiger Einsteiger manchmal etwas voreilen weil man ja so auf Ideen kommt...
In welcher Art von Anwendung (Vorlage) kann mich mit dem folgenden Code eine Exe erzeugen. Das Programm soll unsichtbar im Hintergrund ausgeführt werden. Ziel ist es einen Text aus der Zwischenablage in eine Textdatei zu schreiben.
Die Fehlermeldung ist, das Delphi ein Semikolon oder INITIALIZATION erwartet. Wer hilt mir?
Delphi-Quellcode:

unit Unit1;

interface

implementation
uses Windows, SysUtils, Clipbrd;

function ClipboardTxtToFile (sFileTXT : string) : boolean;
var
   ps1, ps2 : PChar;
   dwLen : LongWord;
   tf : TextFile;
   hData : THandle;

   begin
  Result := False;

  with Clipboard do begin
   try
    Open;
     if(HasFormat(CF_TEXT)) then begin
      hData := GetComponent(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
[edit=Christian Seehase]Delphi-Tags korrigiert. Mfg, Christian Seehase[/edit]

Klaus01 26. Apr 2007 10:23

Re: Zwischenablage auslesen
 
Delphi-Quellcode:
 

unit Unit1;

interface

implementation
uses Windows, SysUtils, Clipbrd;

function ClipboardTxtToFile (sFileTXT : string) : boolean;
var
  ps1, ps2 : PChar;
  dwLen : LongWord;
  tf : TextFile;
  hData : THandle;

begin
  Result := False;

  with Clipboard do begin
  try
   Open;
   if(HasFormat(CF_TEXT)) then
     begin
       hData := GetComponent(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.
Du könntest auch einmal Deine Formatierung überdenken.

Wenn das eine Consolenapplikation werden soll, dann sollte der Programmkopf etwas so ausschauen.

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  { TODO -oUser -cConsole Main : Insert code here }
end.
Wenn es eine Windowsapplikation werden sollte, dann fehlt Dir die Deklaration der Widowsform:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
end.
Grüße
Klaus

Pixelator 26. Apr 2007 11:14

Re: Zwischenablage auslesen
 
Zuerst mal vielen Dank für die schnelle Antwort

Zu deiner Anmerkung welche Art von Anwendung es werden soll möchte ich mal kurz erklären was ich vor habe.
Eine Macromedia Flash stand alone Anwendung (da bin ich zuhause) schreibt mir Variableninhalte als Text in die Zwischenablage.
Flash soll dann die ClipboardTxtToFile.exe mit dem Parameter z.B C:\score.txt ausführen. Der Anwender soll davon nix mit bekommen.

Der Hauptfehler war der fehlende Punkt hinter dem letzten end. Mein Script ist jetzt ohne Unterstreichungen sauber.
Beim Compilieren erhalte ich jetzt aber folgenden Fehler: [DCC Fehler] Unit1.pas(23): E2010 Inkompatible Typen: 'TComponent' und 'Integer' bei if(HasFormat(CF_TEXT)) then. Würdest du das für mich nochmal nachschauen?

Mit bestem Dank
Pixelator

Klaus01 26. Apr 2007 11:33

Re: Zwischenablage auslesen
 
Warum willst denn Du mit Komponenten arbeiten wo Du doch nur Text aus dem Clipboard holen willst?

Delphi-Quellcode:
function ClipboardTxtToFile (sFileTXT : string) : boolean;
var
  tf : TextFile;

begin
  Result := False;

  with Clipboard do
    begin
      try
        Open;
        if(HasFormat(CF_TEXT)) then
          begin
            AssignFile(tf, sFileTXT) ;
            ReWrite(tf) ;
            Write(tf, AsText) ;
            CloseFile(tf) ;
           Result := True;
         end;
      finally
        Close;
      end;
    end;
end;
Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 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