Предмет дискуссии - получение дельты мышки и решение вопроса ввода с клавиатуры.
Старт дискуссии тут: Мышка FreeBasic (Получение мгновенного шага) - Basic - CyberForum.ru

Проблема первая:
Получить дельту стандартным способом не удалось.
Проблема вторая: При старте программы иниц. русская раскладка, ASCII коды с которой
поступали "кривые".

В теме пока опубликую промежуточный простой вариант решения этих вопросов.

Первую проблему решаем через WinAPI функциями GetCursorPos, SetCursorPos, отлавливая
событие мышки(которое получаем с помощью функций FB).
Вторую проблему решаем также через WinAPI, функциями GetKeyboardLayout,
ActivateKeyboardLayout. Устанавливая при старте программы английскую раскладку.

Код freebasic:
#INCLUDE ONCE "FbGfx.bi"
#INCLUDE ONCE "Windows.bi"
'  $Lang: "FBLite"
 
     TYPE MY_SCEVENT FIELD = 1
           EvTip AS INTEGER
           UNION
                TYPE
                      ScnCod AS INTEGER
                      AscCod AS INTEGER
                END TYPE
                TYPE
                      X AS INTEGER
                      Y AS INTEGER
                      Dx AS INTEGER
                      Dy AS INTEGER
                END TYPE
                Button AS INTEGER
                Z AS INTEGER
                W AS INTEGER
           END UNION
     END TYPE
    '    Декларации
DECLARE SUB  Init ()
 
DECLARE SUB  LoadCur ()
DECLARE SUB  ALLInput ()
 
 
    '    Технич. переменные
 
          ' |>    Экран    <|
DIM SHARED AS UINTEGER ScreenXRez, ScreenYRez
 
          ' |>    Мышь    <|
DIM SHARED AS INTEGER Mx, My, Mb, MbO
DIM SHARED AS LONG MxE, MyE
DIM SHARED AS POINT Md, Cntr
DIM SHARED MyProgEv AS MY_SCEVENT
DIM SHARED Mdx AS INTEGER, Mdy AS INTEGER
 
          ' |>    Курсор    <|
DIM SHARED CurImg(991) AS UBYTE
 
 
ScreenXRez = 640: ScreenYRez = 480           '  Фиксированное разрешение
SCREENINFO ScreenXRez, ScreenYRez           '  Разрешение рабочего стола
 
ScreenEvent
     Init
 
 
COLOR  , RGB(10, 20, 50)
     DO: CLS
         ALLInput
 
             PUT (Mx, My), CurImg, ALPHA
 
         FLIP
         SLEEP 2, 1
     LOOP
 
 
CurDatL:
DATA 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DATA 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DATA 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DATA 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DATA 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DATA 1, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
DATA 1, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0
DATA 1, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0
DATA 1, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0
DATA 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0
DATA 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0
DATA 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DATA 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DATA 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DATA 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 
SUB  Init ()
   '    Экран
 SCREENRES ScreenXRez, ScreenYRez, 32, 2, 1
 SCREENSET 1, 0
   '    На английскую раскладку
 IF GetKeyboardLayout (0) = 68748313 THEN
    ActivateKeyboardLayout(HKL_NEXT, KLF_SETFORPROCESS)
 END IF
   '    Загрузим курсор
 LoadCur
 
   '     Мышку в центр
Mx = ScreenXRez SHR 1
My = ScreenYRez SHR 1
SetMouse Mx, My, 0, 1
   '     И возьмём координаты "глобального" центра
GetCursorPos(@Cntr)
 
END SUB
 
SUB  LoadCur ()
DIM  ix AS INTEGER, iy AS INTEGER, Cv AS UINTEGER
RESTORE CurDatL
    FOR iy = 0 TO 14
          FOR ix = 0 TO 14
          READ Cv
          SELECT CASE Cv
             CASE 1: Cv = RGBA(0, 0, 0, 255)
             CASE 2: Cv = RGBA(255, 255, 255, 255)
             CASE ELSE: Cv = RGBA(0, 0, 0, 0)
          END SELECT
                PSET (ix, iy), Cv
    NEXT ix, iy
    GET (0, 0)-(14, 14), CurImg(0)
END SUB
 
SUB ALLInput ()
 
   ' ___   Мышь   ___
 IF (Screenevent(@MyProgEv)) THEN 'если произошло событие
     SELECT CASE MyProgEv.EvTip    'тогда узнаем какое
         CASE EVENT_MOUSE_MOVE        '   Перемещение мыши
           '   Определяем новые координаты мыши
             GetCursorPos(@Md)
 
           '   Ставим мышь в центр
             SetCursorPos(Cntr.x, Cntr.y)
 
           '   Считаем дельту
             Mdx = Md.x - Cntr.x
             Mdy = Md.y - Cntr.y
 
           '   Добавляем к координатам приращение мыши
             Mx = Mx + Mdx: My = My + Mdy
 
           '   Границы мыши
             IF Mx < 0 THEN Mx = 0
             IF Mx > ScreenXRez - 1 THEN Mx = ScreenXRez -1
             IF My < 0 THEN My = 0
             IF My > ScreenYRez - 1 THEN My = ScreenYRez -1
 
         CASE EVENT_WINDOW_CLOSE    '   Закрытие окна
             END
     END SELECT
 END IF
 
   '___   Клавиатура   ___
     Kb$ = INKEY$
     IF Kb$ = CHR(27) THEN END
END SUB