_ | _ | _ | _ | |
_ | Visual Basic World | _ | _ | |
_ |
![]() |
情報局 | _ | _ |
_ | _ | _ | _ |
シュレディンガー音頭スクリーンセーバのコメント付きプログラムが添付されていました。
残念ながら、プレビュー画面の表示は出来ません。
始めまして、野中ともうします。
ご注文の品を添付します。
スクリーンセーバを作る場合に必要な事は
1)画面いっぱいのサイズにする
2)最前面に表示する(IMEのバーなどより前に)
3)二重起動防止
4)マウスアイコンを消す
5)入力を感知して終了。
6)設定画面の表示
7)scrファイルの作成
等があります。
1)画面いっぱいのサイズにする
はまあ簡単です。
添付プログラムみたいな事をしなくても、どうとでもなります。
もしあなたが初心者でうまくできないなら、フォームの
BorderStyleを無しにしましょう。きっと出来ます。
2)最前面に表示する(IMEのバーなどより前に)
はちょっと難しいです。
適当にやっても一応前面には出ますが、他のアプリケーションで「常に前面に表示」が選択されていると、それより下になってしまいます。
ここがまずつまづく点でしょう。
僕の場合、WindowsAPIを利用して「常に前面に表示」にしています。
しかし、これだけではMS-IMEのバーに負けるときがあるので、さらに「IME-MODE」を「オフ固定」にしたピクチャボックスにフォーカスを当てる事で回避しています。
3)二重起動防止
これが僕には一番手強かったんですが、AppオブジェクトのPrevInstanceプロパティを参照して成功しました。
マニュアル見てもわかんないですよね。
何故こんなのが必要かというとたとえばスクリーンセーバ実行までの待ち時間が「3分」と指定してあると、スクリーンセーバが立ち上がっていようがいまいがもう一つ立ち上がるからです。
馬鹿な仕様ですが仕方ありません。Cとかでは簡単に出来るそうですが。
これが無く、かつ6)に出る処理をしっかりやっていないと、「画面のプロパティ」の「スクリーンセーバ」で選択したとたんにはまります。
4)マウスアイコンを消す
これもAPIを使った方がスマートなのかもしれませんが、これを作り出したころはAPIの「A」も知らなかったので、透明なアイコンを用意してそれをメインのフォームのアイコンにする事により解決しています。
もしあなたが「アイコンファイルを作れない」とお悩みなら、
http://www.vector.co.jp/authors/VA007769/
ここにいいのがあります。
シェアウエアですが。
シェアが嫌なら、多少機能は落ちますが
http://www.t3.rim.or.jp/~koumei/khsoft.htm
ここにもあります。
5)入力を感知して終了。
これはフォームのkeydownやMouseMoveに終了用のコードを書くだけです。
ただし、ここで注意しないといけないのはMouseMoveはフォームの表示時にかならず一度呼ばれるという事です。
ただ「End」とか「Unload Me」とか書くと実行したとたんに死にます。
ちょっと注意してください。
6)設定画面の表示
プログラムを実行するとき、引数が指定されます。それは
Command
で参照できます。
内容は
"/s" スクリーンセーバとして
"/p nnnn" プレビュー画面表示用。nnnnの部分にプレビュー画面のウィンドウハンドルが入る。
"" ただ.scrファイルを実行したとき
"/c"、 「画面のプロパティ」の「スクリーンセーバ」で「設定」を選んだとき。
あと、NTでは設定画面を求める引数が違う("/i"か"/e"か...忘れました。)
のでそれも考慮に入れましょう。
僕のプログラムではいろいろ試しながらやったのでえらく汚いですが、あれならNTでも95、98でもちゃんと動く事は確認しています。
7)scrファイルの作り方。
exeファイルの拡張子を変えるだけです。
なんて簡単なんだ!!
以上概論でした。
それから僕のプログラムだけに関して。
添付プログラムの重要と思われるれる部分にはコメントを入れておきました。
しかし人に見せる事を前提に作ったわけではないので汚いです。
わからない事、聞きたい事があったらまたお気軽にメール下さい。
最近メールが来なくて(盆休みなのか?)暇なんです。
さて、「画面のデバイスコンテキスト云々」といった所はスクリーンセーバの本質とは関係ありませんが、作っていたころ知ったテクニックで結構面白い効果が楽しめそうなので、とりあえず適当に入れてます。
(これを使ってデスクトップキャラクタも作れます。どうやら市販の物もこれを使っているらしい(少なくともみかん星人は使ってた。)。NTでも動くし。
僕のホームページにある物は使ってませんが。(使ったバージョンもあるけど上げてない。))
もしこの辺も知りたかったらまたメール下さい。とりあえず、あれは本質には関係無いという事で。
また、これはプログラムをやり始めたころに作ったプログラムを元にしているのでフォーム名が変です。
スタートアップフォームは「frmTitle」である事に注意してください。
それから、
6)設定画面の表示
の
"/p nnnn"プレビュー画面表示用。nnnnの部分にプレビュー画面のウィンドウハンドルが入る。
の所は、何度やってもうまく行かないので無視してます。すいません。
もしここをどうしても出したいのでしたら、違う方に当たる事をお勧めします。
いろいろ試したのですが、結局わかりませんでした。
申し訳ない。うっうっ。
でも俺の友人もここが表示できないままのプログラムをバイトで作って10万(!!!)もらってたからまぁいいでしょう。
と、そんなとこですか。「プログラムくれ」と言ってきた人はあなたでまだ2人目なんで、何を書いたらいいのか解らないので敬語やら何やらの入り交じった変な文章ですがご勘弁を。
また質問、疑問があったらメール下さい。スクリーンセーバも出来たら教えてくださいね。
戻る ') } if (((navigator.appName.indexOf("Microsoft Internet Explorer") >= 0) && (4 <= parseInt(navigator.appVersion.substring(0, 3))))) { document.write('
') } //-->