![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Копирование выделенного текста в буфер
leonidus © (2006-12-25 09:44:00)Господа, подскажите пожалуйста, мне нужно что бы пользователь нажав назначенную в мой программе "горячую клавишу" и удерживая ее получил выделенный текст из буфера. Т.е. пользователь нажимает скажем Shift и держит, программа копирует выделенный текст и выдает его на экран.
Для копирования выделенного в буфер, я делаю так:
procedure ClearShiftState;
begin
if GetKeyState(VK_SHIFT) < 0 then
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
if GetKeyState(VK_CONTROL) < 0 then
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
if GetKeyState(VK_MENU) < 0 then
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
end;
procedure CopySelectionFromActiveWindow;
var
Wnd: THandle;
begin
Wnd := GetFocusedControl;
if Wnd <> 0 then
begin
ClearShiftState;
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(Ord('C'), 0, 0, 0);
keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
end;
end;
Т.е. фактически эмулирую нажатие Ctrl+C+C, но дело в том, что если "горячая клавиша" Ctrl то все работает прекрасно, но вот если другая клавиша, например Shift то не работает. Думаю это из-за того, что в момент эмуляции нажатия Ctrl+C+C Shift уже нажат, а как это обойти?
leonidus (2006-12-27 08:39:00) [1]На сколько я знаю WM_COPY работает только с контролами типа TEdit, TRichEdit и т.п., мне же нужно что бы можно было получать слово из любого конторола где возможно выделение текста, будь то Word, Excel, FireFox или The Bat.
GrayFace (2006-12-26 08:49:00) [2]Господа, подскажите пожалуйста, мне нужно что бы пользователь нажав назначенную в мойпрограмме "горячую клавишу" и удерживая ее получил выделенный текст из буфера.
Значит не RegisterHotKey.
Копать в сторону пункта меню с ShortCut = Shift и WM_COPY. Если пункт в главном меню не должен быть виден, сделай попап, назнач на Form.PopupMenu и в OnContextPopup Handled:=true.
Eraser (2006-12-25 22:30:00) [3]> [0] leonidus © (25.12.06 09:44)
не туда копаете.
см. в сторону RegisterHotKey и WM_GETTEXT и т.п.
leonidus (2006-12-25 21:02:00) [4]Удалено модератором