Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2010, 10:01   #1
basil
Пользователь
 
Регистрация: 21.06.2007
Сообщений: 14
Злость Виртуальная клавиатура

Написал экранную клавиатуру.
Никакой отсебятины.

Всё работает, кроме...

Короче необходимо выделять текст в потомке RichEdita, а именно:

Shift-Down, Shift-End т.е построчно со смещением вниз и До конца строки.
но почему-то не работает. Может кто-нибудь поможет.
Проверялось так. Shift держу на физической клаве, а Down жму на виртуальной.
Срабатывают и Ctrl-X и Ctrl-V и Ctrl-Ins по той схеме.
А Shift-Down, Shift-Ins, Shift-End вообще все комбинации с Shift- *** не работают.
Работать будет на Тачь скрин экране. К сожалению пока нет, чтобы проверить на нём.
Проверял на Windows экранной клаве - там работает всё.
Помогите, что у меня с Shiftom?

Код:
Код:
procedure TForm_KlavaMain.ColorBtn69Click(Sender: TObject);
var
  n:integer;
begin
  n:=TColorBtn(sender).TabOrder;
  begin
     if n<>56 then
          Form_Aplication.progr.SetFocusEdit;

      case n of
        0   :  PostKeyEx32( vk_Back    , [], False);
        1   :  PostKeyEx32( vk_Tab     , [], False);
        2  :  PostKeyEx32( vk_Return  , [], False);
        3  :  PostKeyEx32( vk_Shift   , [], False);
        4  :  PostKeyEx32( vk_Control , [], False);
        5  :  PostKeyEx32( vk_Escape  , [], False);
        6  :  PostKeyEx32( vk_Space   , [], False);
        7  :  PostKeyEx32( VK_MENU    , [], False);
        8  :  PostKeyEx32( vk_End     , [], False);
        9  :  PostKeyEx32( vk_Home    , [], False);
        10 :  PostKeyEx32( vk_Left    , [], False);
        11 :  PostKeyEx32( vk_Up      , [], False);
        12 :  PostKeyEx32( vk_Right   , [], False);
        13 :  PostKeyEx32( vk_DOWN     , [], False);
        14  :  PostKeyEx32( VK_PRIOR   , [], False);
        15  :  PostKeyEx32( VK_NEXT    , [], False);
        16  :  PostKeyEx32( vk_Insert  , [], False);
        17  :  PostKeyEx32( vk_Delete  , [], False);
        18 :  PostKeyEx32( vk_Add     , [], False);
        19 :  PostKeyEx32( vk_Subtract, [], False);

20  :  PostKeyEx32(Ord('0'), [], False);
21  :  PostKeyEx32(Ord('1'), [], False);
22  :  PostKeyEx32(Ord('2'), [], False);
23  :  PostKeyEx32(Ord('3'), [], False);
24  :  PostKeyEx32(Ord('4'), [], False);
25  :  PostKeyEx32(Ord('5'), [], False);
26  :  PostKeyEx32(Ord('6'), [], False);
27  :  PostKeyEx32(Ord('7'), [], False);
28  :  PostKeyEx32(Ord('8'), [], False);
29  :  PostKeyEx32(Ord('9'), [], False);
30   : PostKeyEx32(Ord('A'), [], False);
31   : PostKeyEx32(Ord('B'), [], False);
32   : PostKeyEx32(Ord('C'), [], False);
33   : PostKeyEx32(Ord('D'), [], False);
34   : PostKeyEx32(Ord('E'), [], False);
35   : PostKeyEx32(Ord('F'), [], False);
36   : PostKeyEx32(Ord('G'), [], False);
37   : PostKeyEx32(Ord('H'), [], False);
38   : PostKeyEx32(Ord('I'), [], False);
39   : PostKeyEx32(Ord('J'), [], False);
40   : PostKeyEx32(Ord('K'), [], False);
41   : PostKeyEx32(Ord('L'), [], False);
42   : PostKeyEx32(Ord('M'), [], False);
43   : PostKeyEx32(Ord('N'), [], False);
44   : PostKeyEx32(Ord('O'), [], False);
45   : PostKeyEx32(Ord('P'), [], False);
46   : PostKeyEx32(Ord('R'), [], False);
47   : PostKeyEx32(Ord('S'), [], False);
48   : PostKeyEx32(Ord('T'), [], False);
49   : PostKeyEx32(Ord('U'), [], False);
50   : PostKeyEx32(Ord('Q'), [], False);
51   : PostKeyEx32(Ord('W'), [], False);
52   : PostKeyEx32(Ord('X'), [], False);
53   : PostKeyEx32(Ord('Y'), [], False);
54   : PostKeyEx32(Ord('Z'), [], False);
55   : PostKeyEx32(Ord('V'), [], False);
56   : begin
            formstyle := fsNormal;
            Close;
       end;
     end; // case
  end;

  end;

procedure TForm_KlavaMain.FormCreate(Sender: TObject);
begin
      formstyle := fsStayOnTop;
end;

Последний раз редактировалось Stilet; 02.10.2014 в 08:16.
basil вне форума Ответить с цитированием
Старый 15.02.2010, 10:17   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Код:
if (key = Ord('M')) and (ssCtrl in Shift) then
Этот код в КейДаун ловит CTRL-M... Для Шифта должно быть аналогично.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 15.02.2010, 10:48   #3
basil
Пользователь
 
Регистрация: 21.06.2007
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Код:
if (key = Ord('M')) and (ssCtrl in Shift) then
Этот код в КейДаун ловит CTRL-M... Для Шифта должно быть аналогично.
Забыл расписать:
Код:
procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean);
{************************************************************
* Procedure PostKeyEx32
*
* Parameters:
*  key    : virtual keycode of the key to send. For printable
*           keys this is simply the ANSI code (Ord(character)).
*  shift  : state of the modifier keys. This is a set, so you
*           can set several of these keys (shift, control, alt,
*           mouse buttons) in tandem. The TShiftState type is
*           declared in the Classes Unit.
*  specialkey: normally this should be False. Set it to True to
*           specify a key on the numeric keypad, for example.
* Description:
*  Uses keybd_event to manufacture a series of key events matching
*  the passed parameters. The events go to the control with focus.
*  Note that for characters key is always the upper-case version of
*  the character. Sending without any modifier keys will result in
*  a lower-case character, sending it with [ssShift] will result
*  in an upper-case character!
// Code by P. Below
************************************************************}
type
  TShiftKeyInfo = record
    shift: Byte;
    vkey: Byte;
  end;
  byteset = set of 0..7;
const
  shiftkeys: array [1..3] of TShiftKeyInfo =
    ((shift: Ord(ssCtrl); vkey: VK_CONTROL),
    (shift: Ord(ssShift); vkey: VK_SHIFT),
    (shift: Ord(ssAlt); vkey: VK_MENU));
var
  flag: DWORD;
  bShift: ByteSet absolute shift;
  i: Integer;
begin
  for i := 1 to 3 do
  begin
    if shiftkeys[i].shift in bShift then
      keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
  end; { For }
  if specialkey then
    flag := KEYEVENTF_EXTENDEDKEY
  else
    flag := 0;

  keybd_event(key, MapvirtualKey(key, 0), flag, 0);
  flag := flag or KEYEVENTF_KEYUP;
  keybd_event(key, MapvirtualKey(key, 0), flag, 0);

  for i := 3 downto 1 do
  begin
    if shiftkeys[i].shift in bShift then
      keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),
        KEYEVENTF_KEYUP, 0);
  end; { For }
end; { PostKeyEx32 }
Мне не нужно if... Мне нужно то что написано выше....

Последний раз редактировалось Stilet; 02.10.2014 в 08:16.
basil вне форума Ответить с цитированием
Старый 15.02.2010, 10:57   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Эта строчка была приведена для размышления, при чем здесь If вообще? Я показал как ловить контролы и шифты...

ЗЫ. Есть такой тег как #, не пробовали пользоваться? У людей сразу появляется желание читать Ваш код...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 15.02.2010, 11:03   #5
basil
Пользователь
 
Регистрация: 21.06.2007
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Эта строчка была приведена для размышления, при чем здесь If вообще? Я показал как ловить контролы и шифты...

ЗЫ. Есть такой тег как #, не пробовали пользоваться? У людей сразу появляется желание читать Ваш код...
Да Shift ловить надо, если потом сам расписываешь как в RichEdit выделять строки по Shift-Down.
Я и так поймать могу:
Код:
function ShiftDown : Boolean;
var
  State : TKeyboardState;
begin
  GetKeyboardState(State);
  Result := ((State[vk_Shift] and 128) <> 0);
end;
И фиксируется в if ShiftDown then... что Shift нажат, а вот реакции RichEdit-а НЕТУ...

Что не так у меня.?

Цитата:
Сообщение от Utkin Посмотреть сообщение
Эта строчка была приведена для размышления, при чем здесь If вообще? Я показал как ловить контролы и шифты...

ЗЫ. Есть такой тег как #, не пробовали пользоваться? У людей сразу появляется желание читать Ваш код...
Нашёл блин...

PostKeyEx32( vk_DOWN , [], true); а не false...

Фух...

Цитата:
Сообщение от basil Посмотреть сообщение
Нашёл блин...

PostKeyEx32( vk_DOWN , [], true); а не false...

Фух...
Короче так:
Код:
...     8  :  PostKeyEx32( vk_End     , [], true);
        9  :  PostKeyEx32( vk_Home    , [], true);
        10 :  PostKeyEx32( vk_Left    , [], true);
        11 :  PostKeyEx32( vk_Up      , [], true);
        12 : PostKeyEx32( vk_Right , [], true);
        13 : PostKeyEx32( vk_DOWN , [], true);
        14  :  PostKeyEx32( VK_PRIOR   , [], False);
        15  :  PostKeyEx32( VK_NEXT    , [], False);
        16  :  PostKeyEx32( vk_Insert  , [], true);
... И всё пашет....
Спасибо всем.

Последний раз редактировалось Stilet; 02.10.2014 в 08:17.
basil вне форума Ответить с цитированием
Старый 02.10.2014, 00:34   #6
ALEXandr20333
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 76
По умолчанию

а у кого есть исходник вирт клавы?????
ALEXandr20333 вне форума Ответить с цитированием
Старый 02.10.2014, 08:16   #7
indexx
Заблокирован
 
Регистрация: 12.09.2014
Сообщений: 544
По умолчанию

У Embarcadero есть.
indexx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Виртуальная таблица promer БД в Delphi 17 16.07.2014 09:11
Виртуальная функция в С++ MrJenika Помощь студентам 6 04.01.2010 18:12
- Что есть вообще виртуальная операционка? - Для каких целей она нужна? Alex Cones Операционные системы общие вопросы 7 24.12.2009 22:54
Виртуальная клавиатура Alex Cones Мультимедиа в Delphi 2 10.05.2009 20:03
Виртуальная клавиатура для браузера, несколько вопросов nnova Общие вопросы Delphi 2 19.12.2008 16:19