Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-16071
Goida
2004-01-12 10:28
2004.02.06
Сортировка DBGrid


14-16723
fag2000
2004-01-16 10:49
2004.02.06
Книги по ораклу


1-16485
Sash1
2004-01-27 10:52
2004.02.06
Проблема с record в property


1-16344
aldor
2004-01-23 17:53
2004.02.06
Thread-safe код - это как?


3-16156
innok
2004-01-14 16:12
2004.02.06
печать отчета





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский