Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизКак послать контролу сообщение о нажатии 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c