Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Информационный Канал Subscribe.Ru

Ежедневная рассылка сайта Мастера DELPHI

DELPHIMASTER.ru

Выпуск от 17.09.04 09:18

Лучшее из нашего FAQ   |x|
Функция keybd_event() принимает значения до 244 - как мне отправить нажатие клавиши с кодом #255 в элемент управления Windows?
Это может понадобится для иностранных языков или для специальных символов. (например, в русских шрифтах символ с кодом #255 - я прописное). Приведенный в примере метод, не стоит использовать в случае если символ может быть передан обычным способом (функцией keybd_event()).

procedure TForm1.Button1Click(Sender: TObject);
var
   KeyData : packed record
       RepeatCount : word;
       ScanCode : byte;
       Bits : byte;
   end;
begin
   {Let the button repaint}
   Application.ProcessMessages;
   {Set the focus to the window}
   Edit1.SetFocus;
   {Send a right so the char is added to the end of the line}
   //  SimulateKeyStroke(VK_RIGHT, 0);
   keybd_event(VK_RIGHT, 0,0,0);
   {Let the app get the message}
   Application.ProcessMessages;
   FillChar(KeyData, sizeof(KeyData), #0);
   KeyData.ScanCode := 255;
   KeyData .RepeatCount := 1;
   SendMessage(Edit1.Handle, WM_KEYDOWN, 255,LongInt(KeyData));
   KeyData.Bits := KeyData.Bits or (1 shl 30);
   KeyData.Bits := KeyData.Bits or (1 shl 31);
   SendMessage(Edit1.Handle, WM_KEYUP, 255, LongInt(KeyData));
   KeyData.Bits := KeyData.Bits and not (1 shl 30);
   KeyData.Bits := KeyData.Bits and not (1 shl 31);
   SendMessage(Edit1.Handle, WM_CHAR, 255, LongInt(KeyData));
   Application.ProcessMessages;
end;



Источник: Дельфи. Вокруг да около.

Комментарий от "Aleksey Moiseev" (moiseev@samara-gsm.ru)

Этот способ не годится, если нельзя получить handle у Edit-а, в который надо послать сообщение, что бывает, когда вводишь символы в чужую программу.

Для передачи русских символов в keybd_event, например, того же 'я', надо сначала переключить раскладку клавиатуры на русский, а затем вызвать key bd_event, передав ему scan-код символа.
Для переключения! расклад ки в чужой программе можно делать так:

var rus,curKey,progKey: HKL;
    hwProg,progId : THandle;
begin
   // получить handle окна чужой программы
 hwProg := findWindow('<класс окна>','<заголовок окна>');
   // Получить идентификатор чужого процесса
 progId := GetWindowThreadProcessId(HwProg,nil);  
 SetForegroundWindow(hwProg);
 SetActiveWindow(hwProg);
   // Получить ссылку на русскую раскладку
 rus:=LoadKeyboardLayout('00000419', 0);  
   // Переключить раскладку на русскую
 ActivateKeyboardLayout(rus,KLF_ACTIVATE);  
 curKey := GetKeyboardLayout(0);  // Получить текущую раскладку
   // Получить текущую раскладку в чужой программе
 progKey := GetKeyboardLayout(progId);
   // переключить раскладку в hwProg  if progKey <> curKey then begin
   sendMessage(hwProg,WM_INPUTLANGCHANGEREQUEST,1,curKey);  
   Application.processMessages;
  // можно вставить задержку, что-нибудь типа delay(1000) из rxlib
 end;

 keybd_event(lo(VkKeyScan('я')),0,0,0);  // Ввести символ, например, 'я'

// Таким же образом переключить раскладку обратно
...
end;

»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
  • необходимо выделить фрагмент изображения
    на TImage. он выделяется, но происходит перерисовка компонента и соответсвенно "мерцание". как избавиться от этой ...
  • Обработка звука!!!
    Проблема такая, нужно получить изображение звуковой волны (ну как в Winamp-e аквалайзер), каким принципом пользоваться? ...
  • И опять com порт
    Есть TV tuner с ним в комплекте ДУ пульт, кот. подключается через COM порт...каким образом можно получить сигнал с ...
  • Форма "прозрачная" для кликов
    Хочется, что бы форма под Win2K и XP была не только полупрозрачной, но и "Прозрачной" для кликов мышкой. Можно ли это ...
  • Определяю IP
    Определяю IP в локальной сети по имени компа: const WINSOCK_VERSION = $0101; function GetIPAddress(name: string): ...
  • Игруху выставил
    http://www.monolife.fatal.ru/bigpuzzle.zip В деле разработок программ и игр на Delphi я являюсь новичком. Поэтому не ...
  • TWebBrowser
    TWebBrowser как запретить отключение в нем картинок и Flash. Спасибо заранее за ответы.
У нас большой выбор статей   |x|
Hooks - аспекты реализации
Что же происходит в системе когда мы "ставим" ловушку и что это вообще такое - ловушка ?
Ловушка (hook) - это механизм Windows, позволяющий перехватывать события, предназначенные некоторому приложению, до того как эти события до этого приложения дойдут.
Функции-фильтры - это функции, получающие уведомления о произошедшем событии от ловушки.
В зависимости от типа ловушки функции-фильтры могут изменять события, отменять их или просто реагировать на них...
Новинки книжного рынка   |x|
Технология разработки программного обеспечения
Книга является классическим руководством по технологии разработки программного обеспечения. В ней рассматриваются основные этапы процесса разработки программного продукта, включая его описание, проектирование, собственно разработку, интеграцию и тестирование частей, тестирование программы в целом и сопровождение. Каждый из этапов подробно иллюстрируется на конкретных примерах. Отдельные главы посвящены определению типа процесса разработки и управлению проектом. Материал сопровождается упражнениями для закрепления теоретических знаний. Предназначена для студентов и аспирантов, специализирующихся в области программного обеспечения, а также для профессиональных разработчиков.
Автор: Брауде Э. Д.
Опрос населения :)
Как часто вы заглядываете на наш сайт?
»»» Регулярно
»»» Раз в неделю
»»» Когда нужна помощь
»»» По почтовой рассылке
»»» Сделал стартовой страницей
Для души

Хокку дня
О, как печально звучат под окном
Три ненастоенных сямисэна
Пьяные гейши достали...

Афоризмы
Где хорошо, там и... тоска по родине.

Фраза дня
Кто с чем к нам зачем, тот от того и - того! (А. Невский)

Дурацкие законы (информация предоставлена сайтом kurilka.com)
В Австралии запрещено составлять и читать гороскопы, а также заниматься гаданиями во всех видах. Закон считает это преступным колдовством.
В провинции Виктория на пляж Брайтон Бич можно купаться только в купальнике, который закрывает тело от горла до колен

И на закуску коротенький анекдот
Я долго думал, что такое 90х60х90. Оказалось, что это 486 000.

Фотоприколы.
Начните день с хорошего настроения!
http://www.delphimaster.ru/cgi-bin/prikol.pl?id=1694


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (merlin@delphimaster.ru)

Добро пожаловать на сайт -= Мастера DELPHI =- 

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.mdelphi
Отписаться

В избранное