Tom Wellige  

About Me
Home
My Blog

Favourites
Books
Drink

Open Source
Miscellaneous
CAN M3S Driver
HPShell
Web DB Editor
Open Queue

Miscellaneous
Wiki
Bookmark

My Programming Page - XKEYS




XKEYS

Contents of this page

  • XAPP.PAS, Unit holding the descent of TApplication with extended keyboard messages
  • XTEST.PAS, Testapplication



XAPP.PAS
{************************************************}
{                                                }
{   UNIT XAPP   Extended Keyboard Events         }
{   Copyright (c) 1996-97 by Tom Wellige         }
{   Donated as FREEWARE                          }
{                                                }
{   E-Mail: wellige@geocities.com                }
{                                                }
{************************************************}

unit XApp;

interface

uses App, Drivers, Objects, Views;

type
  PXApplication = ^TXApplication;
  TXApplication = object(TApplication)
    procedure GetEvent(var Event: TEvent); virtual;
  end;


const
  { New Keyboard Event }
  evXKeyBoard            = $0400;

  { Extended Key-Codes }
  kbAltDown              = $0011;
  kbAltUp                = $0012;
  kbCtrlDown             = $0013;
  kbCtrlUp               = $0014;
  kbLeftShiftDown        = $0015;
  kbLeftShiftUp          = $0016;
  kbRightShiftDown       = $0017;
  kbRightShiftUp         = $0018;

  WaitForKeyUp : boolean = false;

implementation

const
  ksNormal             = $0000;
  ksRightShift         = $0001;
  ksLeftShift          = $0002;
  ksCtrl               = $0004;
  ksAlt                = $0008;

  KeyState    : byte   = ksNormal;
  OldKeyState : byte   = ksNormal;

  Pending     : TEvent = (What: evNothing);


procedure TXApplication.GetEvent(var Event: TEvent);
var R: TRect;

  function ContainsMouse(P: PView): Boolean; far;
  begin
    ContainsMouse := (P^.State and sfVisible <> 0) and
      P^.MouseInView(Event.Where);
  end;

  procedure PutKeyEvent(var Event: TEvent; Key: word);
  begin
    Event.What   := evXKeyBoard;
    Event.KeyCode:= Key;
  end;

  procedure GetKeyStateEvent(var Event: TEvent);
  begin
    KeyState:= GetShiftState and $000F;
    if KeyState <> OldKeyState then
    begin
      if not WaitForKeyUp then
        case KeyState of
          ksLeftShift : PutKeyEvent(Event, kbLeftShiftDown);
          ksRightShift: PutKeyEvent(Event, kbRightShiftDown);
          ksAlt       : PutKeyEvent(Event, kbAltDown);
          ksCtrl      : PutKeyEvent(Event, kbCtrlDown);
          ksNormal    :
            case OldKeyState of
              ksLeftShift : PutKeyEvent(Event, kbLeftShiftUp);
              ksRightShift: PutKeyEvent(Event, kbRightShiftUp);
              ksAlt       : PutKeyEvent(Event, kbAltUp);
              ksCtrl      : PutKeyEvent(Event, kbCtrlUp);
            end;
        end;
      OldKeyState := KeyState;
      WaitForKeyUp:= false;
    end;
  end;


begin
  if Pending.What <> evNothing then
  begin
    Event:= Pending;
    Pending.What:= evNothing;
  end else
  begin
    GetMouseEvent(Event);
    if Event.What = evNothing then
    begin
      GetKeyEvent(Event);
      if Event.What = evNothing then
      begin
        GetKeyStateEvent(Event);
        if Event.What = evNothing then Idle;
      end else WaitForKeyUp:= true
    end;
  end;

  if StatusLine <> nil then
    if (Event.What and evKeyDown <> 0) or
      (Event.What and evMouseDown <> 0) and
      (FirstThat(@ContainsMouse) = PView(StatusLine)) then
      StatusLine^.HandleEvent(Event);
end;

end.

page up


XTEST.PAS
{************************************************}
{                                                }
{   PROGRAM XTEST  Testapp for XAPP Unit         }
{   Copyright (c) 1996-97 by Tom Wellige         }
{   Donated as FREEWARE                          }
{                                                }
{   E-Mail: wellige@geocities.com                }
{                                                }
{************************************************}

program XTest;

uses Drivers, XApp;

type
  TApp = object(TXApplication)
    procedure HandleEvent(var Event: TEvent); virtual;
  end;


procedure TApp.HandleEvent(var Event: TEvent);
begin
  inherited HandleEvent(Event);
  if Event.What = evXKeyBoard then
    if Event.KeyCode = kbAltUp then write(#7);
end;

var
  MyApp: TApp;

begin
  MyApp.Init;
  MyApp.Run;
  MyApp.Done;
end.

page up

This page was created using Code Colorizer -    http://www.chami.com/colorizer





Bookmark this page.
 
 

Copyright © Tom Wellige, 1995-2008
All Rights Reserved