したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

■■■20レス以内で済むF-BASICの質問はこちらへ■■■

58もじゃ:2004/08/02(月) 14:40
>51 >53 >57 TOKOさま
>52 chigayaさま
>54 nisiiさま
>56 上村さま
そして管理人のF橋さま

貴重なアドバイスを頂きまして、ほんとうにありがとうございました。
一人ではきっと解決できなかったであろう問題を、皆様の助言によりおおむねやっつける
ことが出来ましたので、お礼申し上げると共にご報告致します。

【私の環境はWinXP/Proです】

#include "WINDOWS.BI"

var shared MAINFORM as object :MAINFORM.ATTACH GETDLGITEM("MAINFORM")
var shared TIMER1 as object :TIMER1.ATTACH GETDLGITEM("TIMER1")
var shared EDIT1 as object :EDIT1.ATTACH GETDLGITEM("EDIT1")

declare function SETWINDOWPOS lib "user32" alias "SetWindowPos" (byval HWND as long, byval HWNDINSERTAFTER as long, byval X as long, byval Y as long, byval CX as long, byval CY as long, byval UFLAGS as long) as long

declare sub MAINFORM_START edecl ()
sub MAINFORM_START()
TIMER1.SETINTERVAL 1000
TIMER1.ENABLE -1
end sub

declare sub TIMER1_TIMER edecl ()
sub TIMER1_TIMER()
beep
A= SETWINDOWPOS(MAINFORM.GETHWND, -1, 0, 0, 0, 0, &H43)
MAINFORM.SHOWWINDOW 0
MAINFORM.SETFOCUS
MAINFORM.SHOWWINDOW -1
EDIT1.SETFOCUS
A= SETWINDOWPOS(MAINFORM.GETHWND, -2, 0, 0, 0, 0, &H43)
end sub

while -1 :WAITEVENT :wend


↑こんな感じでやってみました。(教えて頂いたソースを組替えてみただけですけど・・・)

メインフォーム上に、エディットボックス1個とタイマーコントロール1個を用意しました。
10秒おきにタイマーイベントが発生するようにしています。
タイマーイベントの発生時にBEEP音を鳴らしてみました。
そしてまず強制的に「最前面化(トップモースト)」を行っています。
次にメインフォームを非表示に、その状態でメインフォームにフォーカス移動、
更にメインフォームを表示に。
そしてエディットボックスにフォーカス設定。
最後に「最前面化」を解除しています。

これで私のやりたかったことが「一応」できるようになりました!

サンプルプログラムを起動したあと、1回目のタイマーイベントまで待ちます。
それ以降は、メモ帳やEXCELなどを自由に立ち上げます。
例えばメモ帳を立ち上げた場合、カーソルはそちらに移りキーボードからの入力は
メモ帳内に反映されます。
しかし、タイマーイベントが発生すると「お見事!!」、カーソルがサンプルプログラムに
戻ってきます。
これで24時間待機させているプログラムを作成し、常にカーソル(フォーカス)を獲得
し続けることができそうです。
ただ、まだ完璧ではないようで条件によっては「カーソルのたぐり寄せ」が行われない
場合もあります。

最初はまったく思い通りにいかず、あきらめようと思いましたが、皆様からいろいろなお知恵を
拝借しましてようやくここまでこれました。
これからもぜひ宜しくお願いします、ありがとうございました。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板