_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
◇ 沈丁花の香りがそこここに ・・・・・・ 第717
☆モバイルオフィスの作り方 ★
Vol.0717
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
□ Windows狂想曲(思わぬWin11との出会い)
□ 楽しいサボのプログラミング講座ーその5
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
☆ Windows狂想曲(思わぬWin11との出会い)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
あるお客様のちょっとした機能を受け持つサーバーがあり(OSはクライアントで
すが仕事はサーバー同様なのです)そこで仮想OSを使ってWin7を起動しようとし
ていました。
そこで大惨事が・・・・
◇ Win7をどう起動する?
別にWin7が大好きなわけではないのですが、そのPCで主に使うソフトの素材
がWin7で無いと起動しないのです。
新しくWin10用の部品を買えば良いのですがかなり高額で(数百万レベル)、こ
れまでなんとかWin7でしのいできましたがさすがにPCの老朽化も進み、Win10
のPCを買ってもらいました。
そこで考えたのです。VmWareかHiperVでWin7を起動してこのソフトを走らせよ
うと・・・
まあ・・・著作権がらみの問題だから仕方がないのですがとりあえず仮想OSで
継続しようと言うことになり、Win10の最新PCがやってきたのです。
◇ 少し作業が長引いている内に・・・・
さて、あれやこれやと手こずっている内にあるとき再起動しようとスタートボ
タンを押そうとしたら・・・・
ないのです、スタートボタンが・・・・
しばらくは何が起こったか分からずにパニックになりかけたのですが、よく考
えたらまだ稼働前の引越中で、焦ることもないと思い返しよくでオスプレーを
眺めました。
すると真ん中ほどに各種のアイコンが固まっています。
このインターフェースはどこかで見たことがある・・・・
そうだジャパネット?田さんのテレビ通販のCMで見たんだ!
えっ!?Win11になっている????
Win7にしたかったのにWin11になっていました。
これは大惨事です。
◇ トホホな状態で考える
本当にトホホな状態ではありますが元々仮想OSを作るつもりだったので仮想化
できるソフトを試しました。
候補は二つ・・・・
・ VmWare
・ Hiper-V
です。
本当はマイクロソフト純正のHiper-Vが本命だったのですが、数々の困難に
見舞われ、Hiper-Vを断念しました。
◇ VmWare
とっても有名な仮想化のソフトで、これを使ってみると概ねやりたいことが出
来ました。
https://ja.wikipedia.org/wiki/VMware
・ USBを仮想OSに接続できる
・ キーボードを英語キーボードに出来る
・ Win7が機嫌良く稼働する
・ Win7対応の古いソフトが全部稼働する
・ ホストOS(Win10や11など仮想OSを起動するOS)との間でコピペが出来る
ちょっとインターフェースは古めかしくはありますが、操作は簡単で安定感
があります。
◇ Hiper-V
こちらが本命でなんとか使いたかったのですが・・・
https://ja.wikipedia.org/wiki/Hyper-V
・ USBを仮想OSに接続できない
・ キーボードを英語キーボードに出来なかった
・ Win7が機嫌良く稼働する
・ Win7対応の古いソフトが全部稼働する
・ ホストOS(Win10や11など仮想OSを起動するOS)との間でコピペが出来ない
この中で致命傷は”USBを仮想OSに接続できない”です。
今回のミッションには必須の次項で、あちらこちらと解説を探したのですが無
理のようでした。USB接続の外付けHDDなどはいけるようですが、それ以外のUS
Bはだめなようです。
それ以外は私の知識不足で、英語キーボードに出来なかったのは多分何かミス
をしたのだと思います。
またコピペはメニューを通してレベルでは出来るのですが、VMWareのように
[Ctrl]+[C]や[Ctrl]+[V]では出来ませんでした。
USBを除くと稼働が始まったらどちらでもよいことばかりなのですが、今回は
断念しました。
◇ そんなこんなでWin11上でWin7を起動する
そう言ったわけで不本意ながらWin11上でVMWareを起動して、そこでWin7を稼
働させました。
これはオオムネ18,000ほどの製品で、私どもの手にも負える価格です。
Hiper-VでいけたらOSの機能なのでタダだったのですがここは仕方ありませ
ん。
その後、不意のOSの再起動時でもOSが起動したときに(Win10とかWin11)も自動
的に起動できるようにもなり、またUSBをWin7起動時に認識するようにも出来
ました。
単なるWin10PCですから数ヶ月に1度はWindowsUpDateで再起動します。
しかしクライアントPCとはいえ、やっていることは24時間稼働の無人サーバー
と同じですからこのあたりのノウハウも重要なのです。
本当に”やれやれ・・・”といった感じです。なんでWin10がWin11にアプデーと
したのかもよくわかりませんが、結果オーライで良しとします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
☆ 楽しいサボのプログラミング講座ーその5
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
キーの移動はユーザーインターフェース上、とても重要です。
HTMLのシステムでは[TAB]キーで移動することが多いのですが、私は伝統にした
がって[Enter]キーで必要な入力項目をカーソルが移動する仕組みを基本として
います。
今回はこの仕組みのご説明です。
https://speedserve.sakura.ne.jp/MovileOffice/Sample2.html
◇ キーで移動
昔のMS-DOSの時代にはマウスはありませんでしたからカーソルの移動はキー
ボードだけでした。
Windowsになっても業務システムでカーソル移動をキーボード以外で行うこと
は基本はありません。
マウスで直接クリックした方が早い場合は別ですが、オペレーターのお姉さん
たちは目にもとまらぬ速さでキーボードを操作して入力をされます。
そのときに移動の順やリズムはとてもうるさくて、未だに[Enter]キーで必要
な場所に移動するように作ります。
でもまともにすべてのコントロール(入力要素)に1個づつキーイベントを追加
して行くと、プログラムが移動のためのイベントで埋め尽くされますね。
HTML5を学んだときに最初に試したことがこの移動のためのプログラムで、ど
んなコントロールがどれだけあっても極めて容易に移動順を決めたり変えたり
出来る仕組みを作りました。
◇ 再びイベントのお話し
イベントとは何かしたときに発効する機能で、現在私たちが行っているプログ
ラミングの手法の一つとしてイベント・ドリブンという考え方があります。
これはプログラムは起動しても何かのイベントが発生するまでじっとしている
という手法で、現在では当たり前の手法ですが、昔はそうではなかったのでと
ても大変でした。
今はプログラムは起動すると、フォームを表示してじっとしています。
前回もお話ししましたがわかりやすいイベントとしてボタンコントロールのク
リックイベントがあります。
これはボタンには元から備わっているイベントで、マウスでクリックされると
そのイベントが発動します。
イベントのパラメータに実行したいプログラムの名前を書いてやれば、ボタン
をクリックした瞬間にプログラムが稼働します。
さて、今回使うのはbodyコントロールのKeyDownイベントです。
プログラムの18行目をご覧ください。
”入力インターフェースのサンプル”プログラムを表示して、[F12]を押す
と、デバッガーと呼ばれるプログラムや設定などを見せてくれるフォームが起
動します。
これはChromeでもEdgeでもFireFoxでも同じです。
そこで18行目を見ると”<body onKeyDown = "FormKeyDown()">”というプログ
ラムが見えます。
この1行がとても強力なのです。
◇ Bodyにイベントを追加している
BodyとはWEBページそのもので、その上に様々なコントロールが載っている土
台のようなもので、ここにイベントをつけるとこのWEB(プログラム)のどこで
操作しても全部イベントが発動されます。
ここで”onKeyDown”というのはキーが押されたら・・・と言うイベントで、
他にKeyUpやKeyPresなど、キーボード関連だけでも数種類のイベントがありま
すが、私は伝統的にKeyDownイベントを使います。
"FormKeyDown()"というのは私が作ったプログラム(関数またはサブルーチン)
で、このWEBでキーボードが押されたら"FormKeyDown()"というプログラムを起
動しなさい・・・と言う意味です。
ここでキーボードが押されたらと言うのは[Enter]だけではなくあらゆるキー
ボードの動きをこのイベントがキャッチします。
必要の無い動きは次の"FormKeyDown()"で無視しているのです。
◇ 押されたキーを判断する
続いて520行目には"FormKeyDown()"と言うプログラムがいます。
Bodyで何かキーを押すと必ず520行目にプログラムは移動します。
ここで
if(event.keyCode == 13){
と書いていますね。
これは押されたキーのコードが13なら・・・と言う意味で13以外は無視されま
す。
そして13とは[Enter] キーのコードなのです。
event.keyCodeというのは最後に起こったイベント(この場合はキーが押され
た)のKeyCodeを判断するためのプログラムで、eventという文字で表されるも
のの中には.keyCodeだけではなくてたくさんのプロパティーやメソッドが格納
されています。
やはりデバッガの[Source]タブで521でブレークポイントを作ってプログラム
を一時停止し、eventのうえにマウスポインタを持ってくると、eventが保持し
ているプロパティーなどの一覧が表示されますから是非ご覧ください。
その数あるプロパティーの内、私が知りたいのはKeyCodeで、その中身を知る
ことでどのキーが押されたのか判断できます。
このプログラムでは13番以外はすべて無視しています。
◇ どこでキーが押されたか判断する
押されたキーが13番(Enter)だと分かったら次はどのコントロールで[Enter]が
押されたかを判断しないといけません。
単純にカーソルの移動であっても押されたコントロールの次のコントロールに
移動したいわけですからどのコントロールで押されたかを知ることは重要で
す。
そこで登場するのが同じeventのsrcElement.idです。
私が作るHTMLはほぼすべての要素に固有のIDを付加しています。
例えば入力箇所のコードを入力するテキストボックスの1個目は”Code1”とい
うIDを付加しています。
idと同様にnameというプロパティーもあるのですが、私はidを使うことに決め
ています。
もしnameを使いたいときはevent.srcElement.nemeで取得出来ます。
どちらにしても重要なことはコントロールを特定する名前(idやname)が付加さ
れていることで、どのコントロールでキーが押されたかが判断できると言うこ
とです。
イベントを使うことはプログラムの基本中の基本だのですが、うまく整理して使
わないと同時多発的にイベントが発生して混乱することもあります。
私は基本的にイベントはこのBodyのOnKeyDownしか仕込みません。競合を避けた
いからです。
次回はこのイベントをうまく使って簡単に移動順を制御する方法です。
配列変数という便利だけれどちょっと難しい変数を利用します。
イベントをイメージできるようになってください。
━━━━━━━━━━━━━━━━━━━━━━