4
votes

why it is not possible to copy selected text in TDBMemo component into clipboard? DELPHI 7, Windows Vista. Following code fails to catch ctrl+c event, whereas ctrl+a works fine.

uses clipbrd;

    procedure THierarchierForm.dbm1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin

    if (Key=Ord('A')) and (ssCtrl IN Shift) then begin
    dbm1.SelectAll;
    Key:=0;
    end;

    if (Key=Ord('C')) and (ssCtrl IN Shift) then begin
    Clipboard.AsText:=dbm1.SelText;
    Key:=0;
    end;

    end;

Thanx

1
I don't know the answer to your question, but you are doing it all wrong. If you want to handle shortcuts you should use a shortcut handler rather than KeyDown. You would copy to the clipboard with CTRL+SHIFT+ALT+C and any combination including CTRL. If you want to copy a memo to the clipboard then I believe you should call dbm1.CopyToClipboard.David Heffernan
I know it is not correct, but it troubles me a lot, that I can not to catch it. I do not want to copy whole memo, but only selected part. What is "shortcut handler"?lyborko
CopyToClipboard does what you want. I always try to handle these events with the Shortcut property (e.g. on a menu or an action). Just writing Shift=[ssCtrl] would be better, but best of all would be Shift*[ssShift,ssAlt,ssCtrl]=[ssCtrl] but that is getting a little pedantic. Anyway, if you do it that way, move it out to a helper function.David Heffernan
I don't know much about TDBMemo, but the ordinary TMemo handles Ctrl+C (X, V, Z) intrinsically. Anyhow, @David is right about his comments.Andreas Rejbrand

1 Answers

3
votes

The code you present works in the context of a plain vanilla form. There must be something else interfering.

The most obvious is that your form has KeyPreview set True and so your form handles CTRL+C.

Note that I stand by my reservations expressed in the comment to your question.