На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Программное нажатие клавиш
      ExpandedWrap disabled
        {PostKeyEx32 function}
         
         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 }
         
        // пример обработки
         
        procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        begin
          if (ssCtrl in Shift) and (Key = VK_RETURN) then ShowMessage('111');
        end;
         
        // пример посылки
         
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          ListBox1.SetFocus;
          PostKeyEx32(VK_RETURN, [ssCtrl], True);
        end;
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0169 ]   [ 16 queries used ]   [ Generated: 2.05.24, 19:17 GMT ]