Sve te komponente imaju CopyToClipboard pa je to i najbolji način da kopiraš selektovani sadržaj.
Ako neka nema onda možeš napisati class helper za recimo TWinControl, dodatna metoda npr. MyCopyToClipboard, tako da bi onda zvao NekaKontrola.MyCopyToClipboard.
A za implementaciju te metode možeš da iskoristiš simulaciju Ctrl+C u slučaju da kontrola ima fokus. Ako nema i ako ne možeš menjati fokus (barem privremeno) onda je teže i morao bi ručno pozivati odgovarajuće metode, slati win poruke ili pisati neki dodatni kod i to za svaku pojedinačnu kontrolu koja ti treba a nema sama CopyToClipboard.
Code:
procedure SimulateKey(const AKey: Word; const AShift: TShiftState);
type
TShiftKeyInfo = record
Shift: Byte;
VKey: Byte;
end;
ByteSet = set of 0..7;
const
ShiftKeys: array[0..2] of TShiftKeyInfo = ((Shift: Ord(ssCtrl); VKey: VK_CONTROL), (Shift: Ord(ssShift); VKey: VK_SHIFT), (Shift: Ord(ssAlt); VKey: VK_MENU));
var
bShift: ByteSet absolute AShift;
i: Integer;
begin
for i := 0 to High(ShiftKeys) do
if ShiftKeys[i].Shift in bShift then
keybd_event(ShiftKeys[i].VKey, MapVirtualKey(ShiftKeys[i].VKey, 0), 0, 0);
keybd_event(AKey, MapVirtualKey(AKey, 0), 0, 0);
keybd_event(AKey, MapVirtualKey(AKey, 0), KEYEVENTF_KEYUP, 0);
for i := High(ShiftKeys) downto 0 do
if ShiftKeys[i].Shift in bShift then
keybd_event(ShiftKeys[i].VKey, MapVirtualKey(ShiftKeys[i].VKey, 0), KEYEVENTF_KEYUP, 0);
end;
A pozivaš je sa SimulateKey(Ord('C'), [ssCtrl]);