Ins Clipboard einen Text kopieren ?

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Ins Clipboard einen Text kopieren ?

Beitrag von pluto »

Hallo,
ich möchte gerne einen Text ins Clipboard senden.

Kein Problem habe ich hinbekommen.
Das Problem ist nur, sobald ich Clipboard.Free aufrufe ist der Text wieder Weg.

Ich weiß das es unter Linux (bei mir aufjedenfall) immer wieder zu Probleme, kommt wenn ich einen Text Markiere. Daher die Frage ist es ein bug in der Clipbrd Unit. oder ein Bug unter Linux oder evltl. auch nur Ubuntu ?
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Text aus der Zwischenablage kopieren ?

Beitrag von pluto »

Hallo,
warum geht folgedner Code nicht ?

Code: Alles auswählen

Clipboard:=TClipboard.Create(ctClipboard);
    Clipboard.Open;
    if Clipboard.HasFormat(CF_TEXT) then
    Writeln('"',Clipboard.AsText,'"','\',Clipboard.FormatCount);


Ich habe gesehen, beim VCL EDiT das sie das da genauso so machen.
und in einigen Foren Beiträgen in der DP machen sie das auch so.
und die Zwischenablage ist auch was drin. Aber es geht einfach nicht.
AsText ist leer !

EDIT:
Seltsam, wenn ich das Open weglasse scheint es zu gehen.... Aber warum ?
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Wieso erstellst du eigentlich nen Clipboard?

Sollte nicht ein direkter Zugriff möglich sein, wenn eh nur Text drin ist.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Clipboard.AsText := 'Test';
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text := Clipboard.AsText;
end;


PS: ich betrachte das mal als ein Thema.
Johannes

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Wirf doch mal einen Blick auf clipbrd.pp im lcl Unterverzeichnis.

knight

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

@monta
Danke für den Tipp. mir ist zwar aufgefallen das es was gobales gibt in der unit, aber naja...

Dann bleibt das Problem noch das sobald die Anwendung beendet wird, der Markierte Text weg ist.... gibt es da eine Möglichkeit ?
MFG
Michael Springwald

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Beitrag von DiBo33 »

pluto hat geschrieben:Dann bleibt das Problem noch das sobald die Anwendung beendet wird, der Markierte Text weg ist.... gibt es da eine Möglichkeit ?


Ist zwar eine Weile her, aber evtl. fehlt dir die Antwort noch!

Das Problem ist bekannt und passiert bei vielen Programmen so, Abhilfe schaffen die Clipboard-Manager.

Für Gnome -> glipper
Für KDE -> klipper

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich habe Gnome..... ist das Programm nicht immer Oben beim Start ?

das ist immer ägerlich da kopiere ich was in einem Dialog schließe es und dann kann ich es nicht mehr einfügen....
werde ich mal ausprobieren... danke.
(Warten lohnt sich halt)

edit01: Vielen Dank für den Tipp, habe es gerade Installiert und bin sehr zufrieden damit.
MFG
Michael Springwald

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Beitrag von DiBo33 »

Packe es dir am Besten in den Autostart.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Der einzigeste Harken ist: Der Text kann nicht länger als 99 Zeichen lang sein.... naja evlt. bauen die das ja noch aus.. Auf jedenfall vielen Dank für den tipp.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Ins Clipboard einen Text kopieren ?

Beitrag von pluto »

Ich habe wieder Probleme mit der Cliboard:
Ich habe bisher noch keine Möglichkeit gefunden diese grenze von 99 Zeichen zu ändern.
Wenn ich jetzt diese Code ausführe geht das bei kleinern Texten Problemlos:

Code: Alles auswählen

 
procedure TPLEdit_TextBuffer_StringList.Edit_Copy(const aStrList:TStrings=nil);
var
  StrList:TStrings;
  x,i,c:Integer;
  str:String;
begin
  NoInsertKey:=True;
  if Assigned(aStrList) then
    StrList:=aStrList
  else
    StrList:=TStringList.Create;
 
  for i:=BlockList[0].BlockStart.y to BlockList[0].BlockEnd.y-1 do begin
    c:=UTF8Length(Lines[i]);
    for x:=1 to c do begin
      if isSel(x,i) then begin
        str:=str+Lines[i][x];
      end;
    end; // for x
    StrList.Add(str);
    str:='';
  end; // for i
 
  if not Assigned(aStrList) then begin
    Clipboard.Clear;
    Clipboard.AsText:=StrList.Text
    StrList.Free;
  end;
end; // TPLEdit_TextBuffer_StringList.Edit_Copy   
 

Sobald ich aber den ganzen Text Kopieren möchte geht das schon nicht mehr. Kann mir jemand sagen ob es evtl. noch eine bessere/andere Möglichkeit gibt einen Text in die Zwischenablage zu Kopieren ? Oder mache ich was Falsch ? Wenn ja was ?

Edit01: Ich weiß das der letzte Beitrag etwas länger her ist, aber ich denke es lohnt sich dafür nicht einen neuen Thread aufzumachen oder ?

Edit02: Es kommt folgende Fehler Meldung:
Gdk-ERROR **: file gdkselection.c: line 246 (gdk_string_to_compound_text): assertion failed: (property.encoding == gdk_atom_intern ("COMPOUND_TEXT", FALSE) && property.format == 8)
aborting...
/media/sda6/Michael/lazarus-0.9.27.src//tools/runwait.sh: line 17: 7197 Abgebrochen $CommandLine
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Ins Clipboard einen Text kopieren ?

Beitrag von theo »

Wie kommst du denn auf die Idee mit den 99 Zeichen?
Aus Synedit kannst du doch auch grosse Texte kopieren. Schau halt nach wie's da gemacht ist.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Ins Clipboard einen Text kopieren ?

Beitrag von pluto »

Ich habe das schon 100% so gemacht wie das synedit gemacht habe, aber es geht einfach nicht.
Komischerweise habe ich den Effekt: Wenn ich einmal etwas kleiners kopiert habe und dann alles Markiere geht es manchemal
Ich meine ich habe diese Zahl durch Tests damals ermittelt. Genau weiß ich das auch nicht mehr.

Ich finde es nur seltsam das es mit kleineren Texten geht und mit größeren nicht geht. Mit GTK2 geht es im Übrigen auch nicht.
Hast du das bei dir auch so gelöst wie das Beispiel von Oben ?
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Ins Clipboard einen Text kopieren ?

Beitrag von theo »

pluto hat geschrieben:Hast du das bei dir auch so gelöst wie das Beispiel von Oben ?


Bei WOPR? Nö, da schmeisse ich ja auch verschiedene Formate aufs Clipboard:

Code: Alles auswählen

 
  fcfnative := RegisterClipboardFormat('application/woprtext');
  fcfplain := RegisterClipboardFormat('text/plain');


Code: Alles auswählen

 
ClipBoard.AddFormat(fcfnative, fCopyNode.Streamer.Stream);
strm := TMemoryStream.create;
StringToMemStream(TWoprDocument(fCopyNode).ConvertToPlain, strm);
ClipBoard.AddFormat(fcfplain, strm);

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Ins Clipboard einen Text kopieren ?

Beitrag von pluto »

Damit kopierst du CODE in die Zwischen Ablage ?
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Ins Clipboard einen Text kopieren ?

Beitrag von theo »

pluto hat geschrieben:Damit kopierst du CODE in die Zwischen Ablage ?

Beides. Einmal Text für's kopieren zu anderen Anwendungen und einmal das interne Format mit allen Formatierungen für den Gebrauch innerhalb von WOPR oder verschiedenen Instanzen von WOPR. Man könnte auch noch HTML ins Clipboard legen.
Man kann ja jeden Stream ins Clipboard schmeissen.

Antworten