Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

Как послать контролу сообщение о нажатии Ctrl+C?   Найти похожие ветки 

 
LaidBack   (2004-01-28 13:44) [0]

Чтобы у него вызвалось событие OnKeyDown с параметрами Key=Ord("C") и Shift=[ssCtrl]?


 
stas ©   (2004-01-28 13:51) [1]

Допустим контрол это Edit1 то так:

Edit1.SetFocus;
windows.keybd_event(3,0,0,0);


 
LaidBack   (2004-01-28 13:56) [2]

Почему 3?
К тому же необходимо передавать нажатие без активации контрола...


 
Stas ©   (2004-01-28 14:04) [3]

К тому же необходимо передавать нажатие без активации контрола...
Так тогда просто:

Var s:TShiftState; I:Word;
begin
S:=[ssCtrl]+s;
I:=67;
Edit1Keydown (Edit1,I,s);


 
Некто   (2004-01-28 14:05) [4]

WM_KEYDOWN + F1


 
AKul ©   (2004-01-28 14:15) [5]


> LaidBack (28.01.04 13:44)

Зачем это нужно?
Если требуется просто достать выделенный текст из Edit"а (или запихнуть в буфер обмена), то можно воспользоваться Edit.SelText.
Если же надо заставить вызваться OnKeyDown, то см. предыдущие посты.


 
LaidBack   (2004-01-28 14:17) [6]

2 Некто..я вопросы без F1 не задаю. Так что без умностей :)
Событие OnKeyDown не описано...нужно вызвать внутренний обработчик. Пробовал так:

SendMessage(LL.Handle, WM_KEYDOWN, VK_CONTROL, 0);
SendMessage(LL.Handle, WM_KEYDOWN, Ord("C"), 0);

Вызывается сначала Key=VK_CONTROL, а затем Ord("C")при этом Shift все время передается как []


 
LaidBack   (2004-01-28 14:20) [7]

2 AKul:
У меня в MainMenu есть Item c ShortCut Ctrl+C, так вот он перехватывает все подряд у моего DbGrid. Мне необходимо, чтобы он перехватывал только когда у грида EditorMode=False.


 
Stas ©   (2004-01-28 14:26) [8]

Так когда у грида EditorMode=True ты на Item ставь Enabled:=false


 
AKul ©   (2004-01-28 14:30) [9]

Или же очищай ShortCut у Item"а, потом восстанавливай...


 
LaidBack   (2004-01-28 14:33) [10]

Ну не очень-то красивые решения...во первых события нет на изменение EditorMode...Просто изящнее было бы отдавать или не отдавать контролу Ctrl+C.


 
LaidBack   (2004-01-28 14:42) [11]

Решение нашел на китайском форуме и оно работает!

procedure TForm1.Button1Click(Sender: TObject);
var
KeyBrdSt : TKeyboardState;
begin
GetKeyboardState( KeyBrdSt );
KeyBrdSt[ VK_CONTROL ] := $80;
SetKeyboardState( KeyBrdSt );
SendMessage( LL.Handle, WM_KEYDOWN, Ord("C"), 0 );
KeyBrdSt[ VK_SHIFT ] := $00;
SetKeyboardState( KeyBrdSt );
end;


 
stas ©   (2004-01-28 14:43) [12]

Ну проверяй в обработчике Item
if EditorMode then
begin
S:=[ssCtrl]+s;
I:=67;
Edit1Keydown (Edit1,I,s);
end else
begin
//команды Item
end;


 
LaidBack   (2004-01-28 15:13) [13]

Я же писал, что события KeyDown у контрола нет, но есть внутренний обработчик Ctrl+C, вот ему-то и надо было послать эту комбинацию!


 
YuRock ©   (2004-01-28 15:25) [14]

Может, я не угадал, но помоему лучше слать сообщение WM_COPY...


 
Stas ©   (2004-01-28 15:27) [15]


> LaidBack (28.01.04 13:44)
> Чтобы у него вызвалось событие OnKeyDown с параметрами Key=Ord("C")
> и Shift=[ssCtrl]?


> LaidBack (28.01.04 15:13) [13]
> Я же писал, что события KeyDown у контрола нет


Помоему ты запутался !



Страницы: 1 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
1-16486
Night Flame
2004-01-27 15:28
2004.02.06
DrawGrid


14-16637
Cerber
2004-01-13 15:55
2004.02.06
Хостинг


14-16617
Думкин
2004-01-15 06:14
2004.02.06
С днем рождения! 15 января.


3-16146
Yamaha
2004-01-15 09:24
2004.02.06
Вставка записей в TDBF


8-16522
o2
2003-10-02 14:45
2004.02.06
DirectX