Zwischenablage-Schleife funktioniert nicht

Hallo zusammen,
als Foren-Admin muss ich immer wieder viele Links kopieren und per Nachricht schicken, das ist aber mit der Zeit unhandlich, will mir also einen eigenen Linksammler programmieren (hab nicht allzuviel ahnung von delphi), ich hab dann einfach ein memo fenster, einen start und einen stopp knopf. Wenn ich start drücke, soll im memo fenster jeder neue inhalt aus der zwischenablage nacheinander ausgegeben werden, mit stopp, stoppe ich dann diese „aufnahme“, so dass ich am ende einfach alles markieren muss und kopieren und dann hab ich die links und muss die nicht alle einzeln zusammenfügen.
Hier ist mein Ansatz: (Hab auch schon bei den uses clipbrd angefügt)

procedure TForm1.BtStartClick(Sender: TObject);
VAR CBn, CBa:string; //CBn=ClipBoardneu und ClipBoardalt
i:integer;
begin
i:=1;
CBa:=‚a‘;
while i

Leider bleibt der aber wenn ich auf Start drücke hängen und lässt sich nur noch mit Gewalt beenden, wieso?

Und noch zwei Fragen:

  1. Wie kann ich abfragen ob der Anfang der Zwischenablage mit http anfängt, damit ich auch wirklich nur links darein bekomme?
  2. Wie kann ich am Ende mit einem Knopfdruck alles markieren und kopieren?

Hoffe ihr Profis könnt mir helfen,
liebe Grüße

Hallo

Leider bleibt der aber wenn ich auf Start drücke hängen und
lässt sich nur noch mit Gewalt beenden, wieso?

In der Schleife fehlt ein Application.ProcessMessages.
Ohne diesen Befehl wird erfolgt keine Abfrage auf gedrückte tasten usw.

Und noch zwei Fragen:

  1. Wie kann ich abfragen ob der Anfang der Zwischenablage mit http anfängt, damit ich auch wirklich nur links darein
    bekomme?

if copy(cbn,1,5)=‚http:‘ then …

  1. Wie kann ich am Ende mit einem Knopfdruck alles markieren?

Form1.Memo1.SelectAll markiert den kopletten Inhalt des Memos

Form1.Memo1.Text enthält den Inhalt des Memos als String mit Zeilenschaltungen

Viel Erfolg
Joachim

Hey, ersteinmal danke für die Hilfe, das mit dem http funktioniert schonmal…
Das problem ist jetzt aber, dass er mit der fehlermeldung abbricht ‚Cannot open clipboard‘, den ersten schon von anfang an kopierten link fügt er ein, wenn ich aber einen neuen kopiere, dann bricht er mit dieser fehlermeldung ab.

er weist dann auf die folgende zeile hin:

If CBn=Cba then else if copy(cbn,1,5)='http:' then

So sollte das ganze funktionieren:

begin
 interrupt:=false;
 CBa:='';

 while Not Interrupt do
 begin
 Application.ProcessMessages;
 Try
 CBn:=Clipboard.AsText;
 except
 CBn:='';
 end;

 If (cbn\>'') and (CBn=Cba) then
 else
 begin
 memo1.lines.add(CBn);
 CBa:=CBn;
 end;
 end;
end;

Ersteinmal danke für deine Bemühungen,
aber wieder der gleiche Fehler, hab das 1 zu 1 übernommen aber wenn ich etwas neues in die Zwischenablage tue bricht er ab wieder mit „Cannot open Clipboard“ und verweist mich auf folgende Zeile:

 CBn:=Clipboard.AsText;

Die Anweisung CBn:=Clipboard.AsText; steht in einem Try…Except Block.
Deshalb sollte das Programm bei einem Fehler weiterlaufen.

Wenn das Programm trotzdem mit einer Fehlermeldung abbricht, solltest du mal überprüfen ob unter Tools|Debugger-Optionen|Sprach-Exceptions die Option „Bei Delphi-Exception stoppen“ ausgeschaltet ist.

Joachim

Okay die Fehlermeldung kommt schonmal nicht mehr, aber dennoch, es funktioniert nicht, es ist immernoch so dass delphi den ersten kopierten link in der zwischenablage behält solange das programm aktiviert ist, ich habs mal ausprobiert währenddessen mal einzufügen in nen texteditor und selbst wenn ich was anderes in die zwischenablage kopiert habe ist immer nur der erste link in der ablage drin, irgendwie wird da was geblockt…

Ich habe noch eine kurze pause von 100 mSec eingebaut:

VAR CBn, CBa:string; //CBn=ClipBoardneu und ClipBoardalt
begin
 interrupt:=false;
 CBa:='';

 while Not Interrupt do
 begin
 sleep(100);
 Application.ProcessMessages;
 Try
 CBn:=Clipboard.astext;
 except
 end;

 If (cbn\>'') and (CBn=Cba) then
 else
 begin
 memo1.lines.add(CBn);
 CBa:=CBn;
 end;
 end;
end;

Bei mir funktioniert das so einwandfrei.
Falls du immer noch Probleme hast, dann poste mal dein Programm hier, dann kann ich mal testen ob´s funktioniert.

Ich habe noch eine kurze pause von 100 mSec eingebaut:

perfekt! es funktioniert ;D
vielen vielen dank für deine hilfe joachim :smile: