Copy Paste Problem

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Copy Paste Problem

Beitrag von Aliobaba »

Hallo,

bei mir tritt folgendes eigenartiges Verhalten auf:
Ich habe ein von TDBMemo abgeleitetes, mit einer Datenbank verbundenes Memo-Feld (Zeos).
Wenn ich innerhalb dieses Textfeldes per Tastatur mit Strg-C und Strg-V einen Text kopiere, dann funktioniert dies problemlos.
Wenn ich einen Text von "außerhalb" in die Zwischenablage gelegt habe, dann kann ich diesen Text mit der rechten Maustaste -> "Einfügen" (PopUp-Menü) ebenfalls problemlos einfügen.

Wenn ich aber von "außerhalb" einen Text per "Strg+V" einfüge, dann erscheint dieser Text zwar im DBMemo-Feld, verschwindet aber sofort wieder, sobald ich im Feld irgendeine Aktion mache (Mausklick oder Enter).

Code: Alles auswählen

        if Key = Ord('V') then
        begin
          Qtext.Edit;
          if DBMemoText.Focused = True then  Form1.DBMemoText.PasteFromClipboard;
          // ...         
          Qtext.Post;
          Key := 0
        end;
 

Ein ähnliches Problem hatte ich schon einmal; diesen Code habe ich eingefügt, bringt aber nichts:
viewtopic.php?f=55&t=9269

Hat jemand einen Tip?

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Copy Paste Problem

Beitrag von Aliobaba »

Hallo,

ich vermute, ich konnte das Problem selber lösen.
Mit wurde hier im Forum schon so oft geholfen und es könnte ja sein, dass irgendwann wieder irgend jemand auf dieses Problem stößt. Um "Leiden zu vermeiden" möchte ich deshalb meinen Thread nochmal "hervor holen" und berichten.

Vielleicht habe ich die Problematik ein wenig "unglücklich" beschrieben, weshalb mir niemand helfen konnte;
Deshalb hier nochmal:

Wenn ich in das "Haupttextfeld" (ein "TDBMemo"-Element) den Inhalt der Zwischenablage mit dem Menü, das die rechte Maustaste zur Verfügung stellt, einfüge, dann kann ich jeden Text, egal ob dieser Text "von außen" (damit meine ich ein Webseite oder ein Word-Dokument) oder von "innen" (damit meine ich einen beliebigen Text, der sich "in" einer Textdarstellung meines Programms befindet und den ich per "Strg-C oder per Mausmenü in die Zwischenablage gelegt habe) kommt, in dieses Feld einfügen und er wird auch in die Datenbank abgelegt (edit-post). Also Alles Bestens!

Wenn ich aber versuche, einen Text der Zwischenablage mit Strg-V in das TDBMemo-Feld einzufügen, dann macht es einen großen Unterschied, ob der Text von "Innen" oder von "Außen" kommt:
Kommt er von "Innen", dann funktioniert alles problemlos: Sowohl das "Mausmenü" als auch "Strg-V".
Kommt er von "Außen", dann funktioniert nur noch das Menü, das die rechte Maustaste zur Verfügung stellt, ganz normal.
Aber es kommt zu einem eigenartigen Verhalten, wenn ich per "Strg-V" versuche den Text einzufügen: Zunächst wird der Inhalt der Zwischenablage ganz normal in den Text eingefügt, er verschwindet aber sofort wieder, wenn ich in das Textfeld etwas schreiben will oder auch nur mit der Maus in das Feld klicke und auch bei sonstigen kleinsten Aktionen innerhalb des Programms.

Das Problem wird durch die gekennzeichnete zwei Code-Zeilen gelöst - und ich hoffe, meine aktuelle Euphorie erhält nicht noch einen Dämpfer:

Code: Alles auswählen

var
  strPuffer: string;
...
...
if Key = Ord('V') then
begin
          strPuffer := Clipboard.AsText;   //  < ------
          Clipboard.AsText := strPuffer;   //  < ------
 
          Qtext.Edit;
          if DBMemoText.Focused = True then  Form1.DBMemoText.PasteFromClipboard;
          if DBMemoHinweis.Focused = True then  DBMemoHinweis.PasteFromClipboard;
          if DBEditTitel.Focused = True then DBEditTitel.PasteFromClipBoard;
          Qtext.Post;
 
        //  Qtext.ApplyUpdates;     // brachte nichts!
        //  DBMemotext.Refresh;   // brachte auch nichts!
end;


Vielleicht - so jedenfalls meine Theorie - hat der Inhalt des Clipboards, wenn er "von außen" kommt eine Formatierung, die die Datenbank "nicht mag", so dass das Abspeichern verweigert wird. Durch die genannten Zeilen werden diese diese "unerlaubten Zeichen" (??) eliminiert.

Eine schöne Woche!
Aliobaba

... ein herrlicher Tag für Lazarus!!: Raus kann man momentan nicht wegen des Blitzeises :) 8)
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Antworten