Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Schreiben in Zwischenablage (https://www.delphipraxis.net/116107-schreiben-zwischenablage.html)

Buttercreme 23. Jun 2008 16:30


Schreiben in Zwischenablage
 
Hallo Leute,

Ich bekomme immer wieder die gleiche Fehlermeldung wenn ich versuche etwas in das Clipboard zu kopieren:

"Zwischenablage kann nicht geöffnet werden."

Aus der Zwischenablage auslesen kann ich allerdings. Mir ist es egal ob das Clipboard leer gemacht wird oder einen bestimmten string enthält (z.B. clear). Folgendes habe ich bereits versucht:

Delphi-Quellcode:
Edit1.SelectAll;
Edit1.CopyToClipboard;
Delphi-Quellcode:
clipboard.free
Delphi-Quellcode:
clipboard.open;
clipboard.astext := 'clear';
clipboard.close;
Es kommt allerdings immer der selbe Fehler das die Zwischenablage nicht geöffnet werden kann. Hatte jemand schon einmal ein ähnliches Problem?

Klaus01 23. Jun 2008 16:47

Re: Schreiben in Zwischenablage
 
Hallo,

hast Du Clipboard schon irgendow erstellt?

Delphi-Quellcode:
clipboard := TClipBoard.create
?

Grüße
Klaus

DeddyH 23. Jun 2008 16:51

Re: Schreiben in Zwischenablage
 
Es wäre mir neu, dass das nötig ist. Einfach die Unit Clipbrd einbinden (ähnlich wie bei Printer).

marabu 23. Jun 2008 16:58

Re: Schreiben in Zwischenablage
 
Hallo,

die Zwischenablage wird durch Open() gesperrt und durch Close() entsperrt, was aber nur bei relativ komplexen Schreibvorgängen nötig ist. Eventuell wurde auch ein GlobalLock() erworben? Verwaiste Sperren werden spätestens bei einem Neustart von Windows aufgehoben und dann funktioniert das auch wieder:

Delphi-Quellcode:
uses
  Clipbrd;

begin
  ClipBoard.AsText := 'godiva';
end.
Grüße vom marabu

RavenIV 24. Jun 2008 08:15

Re: Schreiben in Zwischenablage
 
Ich kenne das auch so, dass man beim ClipBoard kein Open und Close machen muss.
Aber ein Create und Free hat's bei mir immer gebraucht.

Delphi-Quellcode:
procedure TFoTrayIcon.KopierenClick(Sender: TObject);
var
  Clip: TClipboard;
begin
  Clip := TClipboard.Create;
  if EdNummerName.SelText = '' then // ist ein Text markiert?
  begin // kein Text markiert, alles kopieren
    Clip.AsText := EdNummerName.Text;
  end
  else
  begin // nur den markierten Text kopieren
    Clip.AsText := EdNummerName.SelText;
  end;
  Clip.Free;
end;

procedure TFoTrayIcon.EinfuegenClick(Sender: TObject);
var
  Clip: TClipboard;
begin
  Clip := TClipboard.Create;
  EdNummerName.Text := Clip.AsText;
  Clip.Free;
end;

roga 24. Jun 2008 09:22

Re: Schreiben in Zwischenablage
 
Hallo,

also ich schließe mich DeddyH voll und ganz an - Unit "Clipbrd" einbinden und alles lief bisher ohne Probleme, ob Text oder Grafiken...

Gruß roga

Buttercreme 24. Jun 2008 16:09

Re: Schreiben in Zwischenablage
 
Hab so ziemlich alles versucht. Leider kommt die Message immer wieder. Naja ich wühle noch ein bisschen. Wenn ich noch etwas finde poste ich die Lösung hier.

Trotzdem schonmal Danke für die Hilfe.

RavenIV 24. Jun 2008 16:12

Re: Schreiben in Zwischenablage
 
Häng doch mal Dein Projekt an.
Vielleicht ist da ja auch ein anderer Fehler drin, der Seiteneffekte auslöst...

Buttercreme 24. Jun 2008 16:40

Re: Schreiben in Zwischenablage
 
Ist ein relativ großes Projekt. Deshalb hier nur der Teil wo ich mit dem Clipboard arbeite:

(Bis zum Form1.Edit1.Text:=old.text; funktionier es auch noch. Evtl. auch weiter aber das kann ich in der Anwendung ja nicht sehen.)

Delphi-Quellcode:
procedure GetID;
begin

sleep(500);

Clipboard.Free;
old := TStringList.Create;
old.Text:=Clipboard.AsText;

Form1.Edit1.Text:=old.text;

SetForegroundWindow(wnd1);
ShowWindow(wnd1, 1);

clears := TStringList.Create;
clears.Text := 'clear';
Clipboard.AsText := clears.Text;

sleep(50);

PostKeyDown(VK_CONTROL);
PostKeyDown(Ord('C'));
PostKeyUp(VK_CONTROL);
PostKeyUp(Ord('C'));

sleep(500);

Clipboard.Free;
current := TStringList.Create;
current.Text:=Clipboard.AsText;
Form1.Edit2.Text:=current.text;

insert2:=trim(current.Text);

if discon >= 5 then
begin
  ShowMessage ('DISCONNECT');
  restart:=1;
  exit;
end;

if insert2 = 'Owned' then
begin
  discon:=discon +1;
  RefreshList;
  exit;
end;

if insert2 = 'Owned2' then
begin
  discon:=discon +1;
  RefreshList;
  exit;
end;


if rundisc = 1 then
begin
  rundisc:=0;
  if current.Text = 'clear' then
  begin
    discon := discon + 1;
    if discon >= 5 then
    begin
      ShowMessage ('DISCONNECT');
      restart:=1;
      exit;
    end;

  end;
end;

if old.Text <> current.Text then
begin
  insert:=trim(current.Text);
  Form1.Memo1.Lines.Add(insert);

DeddyH 24. Jun 2008 16:56

Re: Schreiben in Zwischenablage
 
Ersetz mal
Delphi-Quellcode:
ClipBoard.Free;
durch
Delphi-Quellcode:
ClipBoard.Clear;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:40 Uhr.
Seite 1 von 2  1 2      

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