Главная страница
    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.48 MB
Время: 0.032 c
4-16818
ravennsk
2003-11-27 14:54
2004.02.06
блокировка процессов


1-16295
XenonXX
2004-01-26 04:54
2004.02.06
Как загестрировать хоткей для запуска програмы?


1-16217
RDA
2004-01-27 09:14
2004.02.06
Полный и краткий формат даты


8-16537
Urvin
2003-10-05 02:25
2004.02.06
Высокий/низкий звук из одного


14-16718
Igorek
2004-01-16 17:55
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский