Entwickler-Ecke

Sonstiges (Delphi) - Zwischenablage auch nach Beendigung des Programmes behalten?


fsg4u - Fr 07.10.05 12:39
Titel: Zwischenablage auch nach Beendigung des Programmes behalten?
hey
wahrscheinlich ganz einfache Frage. Mein Programm kopiert einen String in die Zwischenabalge. Klappt auch ohne Probleme.Aber wenn ich das Programm schließe.Ist die Zwischenablage wieder leer.
Wie kann ich das beheben??
danke FSG

ps. ich lasse das Programm automatisch schließen mit close;
FSG

Moderiert von user profile iconKlabautermann: Postings zusammengefaßt.


jaenicke - Fr 07.10.05 13:07

Wie du das Programm schließt ist dabei uninteressant, aber wie kopierst du den String? Vermutlich fängst du das Schreiben an, kopierst dann den String, gibst die Zwischenablage aber nicht frei oder sowas.

Wie es geht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
uses
  ClipBrd;

//(...)

Clipboard.AsText := 'Test';


Oder auch mit den normalen Funktionen CopyToClipboard oder so von einem Memo o.ä.

Jedenfalls bleibt damit bei mir alles in der Ablage, auch wenn das programm geschlossen wird.


fsg4u - Sa 08.10.05 11:19

ich hab jetzt mal meinen ganzen Code geschickt. Und so bleibt es leider nicht in der zwischenablage(hab die inetadresse natürlich geändert)
Noch irgendeine Idee?
Danke FSG


Delphi-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:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
unit ipclientpas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,QClipbrd,urlmon, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private decla
    procedure FormCreate(Sender: TObject);rations }

  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  e:textfile;
  ip1:string;
  implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
UrlDownloadToFile(nil'http://blablabla.de/ip.htm''c:\ip.htm'0nil);
assignfile(e,'c:\ip.htm');
reset(e);
readln(e,ip1);
closefile(e);
ClipBoard.AsText:=ip1;
timer1.enabled:=true;
end;



procedure TForm1.Timer1Timer(Sender: TObject);
begin
close;
end;

end.


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt.


jaenicke - Fr 14.10.05 10:43

Du hast nicht geschrieben, dass du dein Programm auch für Linux schreibst!
Die benutzte QT-Bibliothek für Crossplatform-Development löscht in der Tat den Zwischenablageninhalt wieder.
Das liegt an der Konzeption der Zwischenablage unter Linux wenn ich das recht sehe, aber darauf muss ich ja hier nicht näher eingehen.

Klar ist:
Unter Windows funktioniert es erst mal, wenn du statt QClipBrd für Crossplatform einfach die Unit ClipBrd nur für Windows benutzt.
Und für Linux musst du dann ggf. mit Compilerdirektiven arbeiten...

Und wenn du mit Linux gar nicht arbeiten willst, dann musst du nur das Q vor der ClipBrd-Unit löschen und alles geht. In diesem Fall würde ich mich allerdings fragen, warum du überhaupt die Crossplatform-Unit benutzt hast.
Diese haben nämlich auch andere etwas eigentümliche Verhaltensweisen, die mit der Qt-Bibliothek zusammenhängen...


Amateur - Fr 14.10.05 11:06

und gibts nen grund warum du nen timer anmachst um das prog zu beenden? kannste auch einfach so ins oncreate oder onactivate close schreiben...


Martin1966 - Fr 14.10.05 11:13

Na ja, dann wäre wohl ein Projekt ohne ein Fenster das beste. Warum ein Fenster erzeugen wenn man es anschl. sofort wieder schließt? ;-)

Lg Martin


jaenicke - Fr 14.10.05 12:01

user profile iconAmateur hat folgendes geschrieben:
und gibts nen grund warum du nen timer anmachst um das prog zu beenden? kannste auch einfach so ins oncreate oder onactivate close schreiben...

Dein Username passt ja wie die Faust aufs Auge :rofl:
(Das ist natürlich ein Scherz :wink: )

Das geht jedenfalls nicht, schließlich wird das Fenster ja da gerade erst erzeugt, da KANN man es nicht wieder schließen.

Aber klar ist, exakt der Quelltext, der jetzt in dem FormCreate liegt kann natürlich 1-zu-1 in den Projekt-Quelltext und das Fenster aus dem Projekt raus.
(Menü Projekt --> Quelltext anzeigen, dort kann dann alles zwischen begin und end mit dem Code aus FormCreate ersetzt werden.)


Amateur - Fr 14.10.05 14:46

man kann über

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormActivate(Sender: TObject);
begin
close;
end;

das fenster wieder schließen lassen. der name passt nicht wie die faust aufs auge!
aber natürlich wäre ne consolenanwendung oder ganz ohne fenster das beste! thx


jaenicke - Mo 17.10.05 10:03

Ich meinte FormCreate, da geht es nicht! Deshalb hab ich ja auch von "dort wird ja das Fenster gerade erst erzeugt" gesprochen!


Amateur - Mo 17.10.05 14:07

ja ok deswegen hatte ich ja auch geschrieben oncreate oder onactivate... ist ja auch egal. jedenfalls geht es so. und das ist das wichtigste...