1つ目の問、横方向のみ移動したい? これは簡単ですね。yを無視すればいいです。
次の問が難しいでしょうね。
多分、今までループでマウスを監視していたのでしょう。
それではドラッグ中に他の処理を進めることは難しいです。できなくはないですが、
少々テクニック(というかタスクの分割。要は自分でms単位の仕事の時間割を組む。)が必要で、仰々しいプログラムになってしまうでしょう。
そんなことをしなくても、「割り込み」を使えば大分楽に実装できます。
そのためにWinAPIを使います。
↓こんなのでどうでしょうか?
*define
;< System >
;< libs >
#uselib "user32.dll"
#func MoveWindow "MoveWindow" int, int,int, int,int, int
;< GUI >
;< WindowMessage >
#define WM_LBUTTONDOWN 0x0201
#define WM_LBUTTONUP 0x0202
#define WM_MOUSEMOVE 0x0200
*Mkwindow
;< screen0 >
#define WITH_SCR0 400
#define HEIGHT_SCR0 300
bgscr 0,WITH_SCR0,HEIGHT_SCR0,0
hwnd_scr0 = hwnd
oncmd gosub *Interrupt_WM_LBUTTONDOWN, WM_LBUTTONDOWN
oncmd gosub *Interrupt_WM_LBUTTONUP, WM_LBUTTONUP
oncmd gosub *Interrupt_WM_MOUSEMOVE, WM_MOUSEMOVE
pos_scr0_prev = 0,0
pos_mouse_scr0_prev = -1,-1
*Main
;例えばアプリケーションの本業が以下であるとする。(※defineはプリプロセスで消化されるので「業」ではない)
;▽+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++▽
#define INTERVAL_LOOP 10
#define RADIUS 50
#define FONTSIZE 20
#define Math_a 3.0
#define Math_b 1.0
#define Math_α 1.0
#define Math_β 2.0
BgColor = 200,200,200
MesColor = 100,100,100
θ = 0.0
Δθ = deg2rad(90) ;〔rad/sec〕
font msgothic, 25,0
repeat
redraw 0
color bgcolor(0),bgcolor(1),bgcolor(2) : boxf
θ += Δθ*INTERVAL_LOOP/1000
pos WITH_SCR0/2 + Math_α*cos(Math_a*θ)*RADIUS - 160, HEIGHT_SCR0/2 + Math_β*sin(Math_b*θ)*RADIUS - FONTSIZE
color MesColor(0),MesColor(1),MesColor(2)
mes "ドラッグ中も制御はHSPに。"
redraw 1
await INTERVAL_LOOP
loop
;△+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++△
*Interrupt_WM_LBUTTONDOWN
pos_scr0_LastMouseLButtonDown = ginfo_wx1, ginfo_wy1
pos_mouse_scr0_LastMouseLButtonDown = mousex, mousey
return
*Interrupt_WM_LBUTTONUP
return
*Interrupt_WM_MOUSEMOVE ;ウィンドウのドラッグ処理
getkey KeyCode_LButton_Mouse, 1
if KeyCode_LButton_Mouse = 0 : return ;左ボタンが押されていなければここでおしまい
oncmd 0
MoveWindow hwnd_scr0, ginfo_mx - pos_mouse_scr0_LastMouseLButtonDown(0), pos_scr0_LastMouseLButtonDown(1), WITH_SCR0,HEIGHT_SCR0, 1
wait 0
oncmd 1
return
忙しいのでコメントは付けていません。
コードをもとになるべく自分で調べて考えてください。(アルゴリズム的なところは特に。いちいち説明するとキリがないので。)
ググるといいかもしれないヒントのワードを挙げておきます。
「WinAPI」
「割り込み」
「ウィンドウメッセージ」
分からないところがあったら後で聞いてください。時間が許せば回答します。
そうこうしているうちに、もっとエレガントなソリューションを提案してくれる人がいるかもしれません...。