Search code examples
delphiclipboardtaction

extending the delphi TEditCopy action to also copy listbox items to clipboard


I have a form with most of its functionality implemented using standard TAction. I have a menu, a toolbar, and some toobuttons. I have implemented clipboard copy/paste with no code at all, just using TEditCopy and TEditPaste actions. It works perfect in the TEdit and TMemo boxes I have.

Now, I want it to work with TListBox, too. Specifically, I want to be able to copy the selected list item in a TListBox using the very same menuitems, key shortcuts and toolbuttons.

So, I believe I will need to extend the TEditCopy Action. But it doesn't seem very straight forward to me. In particular, the TEditAction checks for the focused control to be a TCustomEdit control, which a TListBox it is not. I am a little afraid that it will be just too much work.

The obvious alternative is to just forget about the standard actions and implement the copy to clipbard in the OnExecute method of a generic TAction.

But, before giving up, do you have some idea, hint or trick that would help me extend the standard TEditCopy action?


Solution

  • You should either override the event handlers of a TAction or create a new descendant that combines the code from TEditAction/TEditCopy with the extra handling for TListBox.

    The extension point for actions is setting the OnExecute/OnUpdate event handlers, and that won't work here because it would disable the existing TEdit handling. You could descend from TEditCopy and override the methods, but it would probably be as much code as a new class that descended straight from TAction. There might be some other low-level hack that would work, but I don't see it, and even if there were, it's guaranteed to be less maintainable than the documented approach.