ホームへ戻る|Data Base 桐 User Board|過去ログ一覧|検索|プロパティ |ほっ! |
▼過去ログ No50 |
書き込み数 : 2500件 |
|
|
||||||||||||
最近もりあがってますねぇ〜 (^^; 遅きに失した感がありますが#2468について... >ps.実験の結果、 >サブフォームのフォーム開始(長整数 &表番号)に >「&subwfm=&hwindow」を、設定してみましたが、ここでは40がはいります。 ですね、子供でも孫でもサブフォームの&hwindowは親(一番上位の)フォーム をさすようで、ハンドル=&hwindowで、まるでルートディレクトリから階層 を下がってくるようにサブフォームのオブジェクトを指定する場合や必要も ありますねぇ(もともとそういうもんなんでしょうけど...)。 >&mainwfm=&hwindow >&subwfm=&hwindow-1 なるほど...編集表のあるメインフォーム+サブフォームなら、&hwindow+1 これ頂きます (^^)v っで私も実験... どこからか 手続き実行 窓番号取得("めとさぶ.wfm") として 01...手続き定義開始 窓番号取得(文字列 &窓名) 02...変数宣言 整数{&list[40]},文字列{&wfm[40]} 03...ウィンドウリスト取得 &list 04... 繰り返し &秒=1,40 05... if (&list[&秒]>#U) 06... ウィンドウ情報取得 &秒,フォーム名=&wfm[&秒] 07... 条件 (#文字位置(&wfm[&秒],&窓名)>0) &実行リターン=&秒 08... 条件 (#文字位置(&wfm[&秒],&窓名)>0) 繰り返し中止 09... end 10... 繰り返し終了 11...手続き定義終了 最初は03・05・09はなくて単純に「ウィンドウ情報取得」を40回まわせばよいと 思ったのですが、ウィンドウ情報取得コマンドは無効なハンドルを指定すると 未定義を返すのではなくて、完全にエラーで止まってしまうのでありました (+_+) ではではと03あたりを付加、ウィンドウリスト取得で、&listが未定義でないとき 時だけ「ウィンドウ情報取得」をすれば...甘い...ウィンドウリスト取得コマンド は親フォームのウィンドウリストしか返さないのだ! という訳で実験は大失敗 (;_;) 感想...サブフォームはウインドに非ず ゴミっす...済みません m(_ _)m |
|
|
||||||||||||
要するに当該イベントハンドラ内で、桐のデフォルトの機能を一時的に 殺す(実行させない)ことなんですが、「キーダウン」イベントの比較 的判りやすそうな例を挙げてみます。 一覧表(あるいは伝票).wfmがあったとします。グループ項目がある としまして、例えばDOSの画面伝票のように[Up][Dn]で前後のグループ に移動させたいとしましょう。 コマンド牡丹をふたつ設けて(機能を「グループ指定」、同パラを「次」 または「前」とする)それを利用する方法もありますし、あるいはkev の記述で グループ指定 次,終了状態=&実行リターン としておく方法があります。 しかるに、Win桐の一覧表(あるいは伝票).wfmにおける、[Up][Dn]キー のデフォルトの機能は(グループ内で)レコードの上下移動(1画面単位 の大移動)とされています。 さて、kevの「キーダウン」イベントを次のように記述したとします。 if(&仮想キーコード=34) /*[Dn]キー*/ メソッド呼出し @次牡丹.実行() または次のようにしても同じです。 if(&仮想キーコード=34) /*[Dn]キー*/ グループ指定 次,終了状態=&実行リターン このようにして動かしてみると、確かに次グループに移動はしますが、引 き続いて桐のデフォルトの機能であるレコード移動も併せて発生してしま っていることが判ります。 発生順序はkevの記述(またはコマンド牡丹)→桐デフォルトの機能となりま す。このことは上記記述を次のようにしたら確認できます。 if(&仮想キーコード=34) /*[Dn]キー*/ メソッド呼出し @次牡丹.実行() 確認 "実行順序を確認しませう" 場合によっては、桐デフォルトの機能も併せ実行させたい場合もあります が、この場合はそうではなく、単にグループ移動だけに止めたいのだとす れば、ここで「&処理中止=1」を入れることになります。 if(&仮想キーコード=34) /*[Dn]キー*/ &処理中止=1 メソッド呼出し @次牡丹.実行() こうすると、引き続いての[Dn]キーの桐のデフォルトの機能(レコードの 1画面移動)は実行されません。なお、記述位置は前の方でも後ろの方で もどこでもいいみたいです。 ……と、こんな感じでお判りいただけましたでしょうか? |
|
|
||||||||||||
悲しげさん>おはようございます。 実は「Rp2.kev」を以前拝見したとき、「&処理中止=1」は、気づいていました。 >if(&仮想キーコード=9) /*[Tab]キーで新剤入力*/ > &処理中止=1 > call 新剤入力() >else if(&仮想キーコード=111 .or &仮想キーコード=191) /*スラッシュ[/]キーで新処方(別患者)入力*/ > &処理中止=1 > call 新処方入力() なにかおまじないみたいにはいってるな?と思っただけで、そのとき質問 すれば良かったですね。 それで、修正結果、うまく動くようになりました。 どうもありがとうございます。 ※[キーダウン]イベント helpの最下段より−−−−−−−− >&処理中止/長整数(参照) >このハンドラが終了したあとの処理を、中止するかどうかを指定します。 値 説明 >0 続けます(規定値)。 >0以外 中止します。 説明してもらったあとに読んでも、まだ意味不明。 |
|
|
||||||||||||
どもっ、【多遊】さん >「A処理ボタン・B処理ボタン・C処理ボタン・戻しボタン」が、 >あって、それぞれキー操作を「A」「B」「C」「スペース」に >割り当てたフォームがあるとします この部分に続く記述の意味するところが実はよく判っていませんが(^^;)、 もし、「キーダウン」イベントで判断しているのであれば、 ---------------------- else if(&仮想キーコード=32) /*[Space]キー*/ &処理中止=1 メソッド呼出し @b戻し牡丹.実行() ---------------------- とすればどうでしょう? 「&処理中止=1」が味噌です。 こうすると、どこにフォーカスが在っても、[Space]キーではこの牡丹 の実行以外の挙動はしません。 ついでに云えば、 ---------------------- else if(&仮想キーコード=13) /*[Enter]キー*/ &処理中止=1 ---------------------- とすれば[Enter]キーでも牡丹を実行できなくすることができます。 でも、そうするくらいなら、牡丹のフォーカスを「キー操作禁止」 にすればいいのか。(^^;) ちなみに「キー入力」イベントでは「&処理中止」の引き数が無い ので、使えないように思います。 ・・・とは、2496とかを読む前に書いたことでして、何だか全然 関係なかったような? |
|
|
||||||||||||
一人でさわいで馬鹿みたいですが、ようやく結果(対策)が、わかりました。 >>なんか対策が必要なんでしょうか? >else if(&仮想キーコード=32)に、 >メソッド呼び出し @b戻し.フォーカス設定() >を、追加してみました。 >・・・・・・たんなる戻し処理が2度実行されるように変わっただけです。 正しくは else if(&仮想キーコード=32) メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&STR) if(&STR<>"b戻し") メソッド呼び出し @b戻し.フォーカス設定() メソッド呼び出し @b戻し.実行() end else if(&仮想キーコード=**) フォーカスが「b戻し」ボタンにあるときは、それだけでスペースで実行されます。 そうでない場合は、フォーカスを「b戻し」に移動させたあと実行すればいいだけでした。 でも、(&STR<>"b戻し")のとき >メソッド呼び出し @b戻し.実行() を、記載すると2度実行されそうですが、1度しか実行されない????? まあ、よくわかりませんが、とりあえず動くようになりました。 |
|
|
||||||||||||
アックンさん、悲しげさん、おばんでございます。 懇切丁寧なご解説、有り難うございました。 >小松さん曰くの「半角カタカナ記述を全角に直しても結果は >変わらない」と云うのは勘違いと云うか 仰るとおりでした。 昨晩、イベント定義の半角を全角に変えてフォームを動かすと 従前同様動いたので、全角半角無関係と思ったのですが、本日 やってみたら動きませんでした。 要するに昨晩は、定義を書き替えたものを上書き保存する前に 動かしていたので、当然、従前通り動いたのでした。 大変、ご迷惑をおかけしました。 >日欧表記については、自分が考えて書いて自分が書き直して >作っていくものですから、ご自身がわかりやすい日本語表記 >に統一することをおすすめします。 安心しました。日本語でやっていきます。 ただアックンさんの仰るように英文表記も読めるようにだけは なりたいと思っています。 実は前にアックンさんに教えて頂いた関数式や一括処理コマンド は英文表記になれていないため解読に苦労しました。 一括処理の方はいまだに理解できておりませんが。 イベント定義の半角全角の区別はお陰様にてスッキリしました。 有り難うございました。 |
|
|
||||||||||||
>なんか対策が必要なんでしょうか? else if(&仮想キーコード=32)に、 メソッド呼び出し @b戻し.フォーカス設定() を、追加してみました。 ・・・・・・たんなる戻し処理が2度実行されるように変わっただけです。 |
|
|
||||||||||||
フォームのコマンドボタンの実行には、 ・直接マウスでクリック ・カーソルでフォーカス設定後、Enterキーを押す ・プログラム等で メソッド呼び出し @bボタン名.実行()・・・・等でしょう。 ところが、スペースキーでも実行されてしまうのですね いままで、コマンドボタンの実行はマウスの時は、直接ボタンクリック、 キーボード時はカーソルを移動して、Enterキーを押すものと思ってました。 「A処理ボタン・B処理ボタン・C処理ボタン・戻しボタン」が、 あって、それぞれキー操作を「A」「B」「C」「スペース」に 割り当てたフォームがあるとします マウスでクリックすると正常に動くのに、キーボードから操作を行うと、 戻し処理(スペースを押す)を行ったあと、フォーカスのあるボタンまで 引き続き実行されてしまいます。 なんか対策が必要なんでしょうか? |
|
|
||||||||||||
2491訂正 × メソッド @フォーム.変数変更() ○ メソッド呼出し @フォーム.変数変更() いつも method と書いているからですね。うっかり .and 反省っす。(^^;) |
|
|
||||||||||||
どもっ、小松さん、 既にアックンからコメントされていますので、それに補足します。 >このような定義の記述で、 >フォーム::レコード移動とか、method @フォーム.変数変更() >など半角カタカナ記述を全角に直しても結果は変わらないようですが、 >どうして敢えて半角にしているのかいつも疑問に思っています。 半角に決めたのはK3の方でして、ユーザが敢えて半角に書き換えたり している訳ではありません。 それと例えば半角カタカナの 手続き定義開始 フォーム::レコード移動(長整数 &行番号,長整数 &総件数,長整数 &明細番号) を 手続き定義開始 フォーム::レコード移動(長整数 &行番号,長整数 &総件数,長整数 &明細番号) のように全角カタカナに書き換えると、このイベント手続きは実行さ れません。 あるいは、半角カタカナの メソッド呼出し @フォーム.変数変更() を メソッド @フォーム.変数変更() のように全角カタカナに書き換えると、こちらはエラーとなります。 要するに、オブジェクト名として半角の「フォーム」と全角の「フォーム」 は別モノとして扱われると云うことのようです。だから桐デフォルトで 用意されている「フォーム」(半角)の他に、ユーザが全角の「フォーム」な るオブジェクトを新設することも可能だったりする訳です。 ですから、小松さん曰くの「半角カタカナ記述を全角に直しても結果は 変わらない」と云うのは勘違いと云うか、おそらくはここや幅田さんの BBSの表示(自動変換仕様)上の問題に限られたことであって、桐で の記述上の問題には当てはまりませんです。この点、補足しておきます。 あ、拙文がこのBBS上でも半角カナのままで表記されているのは、私 がちょいとした技を使っている訳でして、その内訳についてはまた別な 機会に(他の方から)。(^^;) * あ、それから「メソッド呼出し」を「method」と書くのは何となくの私 のクセでして、BBSに書くような時は、やはりきちんとオーソドック スな日本語表記にすべきでした。うっかり .and 反省。(^^;) * ついでにアックン、 >変数変更メソッドは、イベントが終了したら画面に反映するから、 >ふつうは再描画・描画更新が不要で、 >イベント終了前に更新したいときは再描画・描画更新を使う。 これは違うような・・・・ ヘルプの記述によれば、「変数変更」も、「再描画」と同じくイベント 終了後に描画が更新されるための予約のようですから、イベント手続き 内で即時更新したい場合に必要とされるのは「描画更新」なのでわ? |
|
|
||||||||||||
小松さん、こんにちは。 1)小松さんがご指摘になった「フォーム」というのは、 桐が最初から決めているオブジェクト名で、半角カナの「フォーム」です。 手続き定義開始 フォーム:: ・・ method @フォーム ・・ method @フォーム ・・ これらはすべて半角カナの「フォーム」が正解です。 全角カナにするとエラーになるはずです。 エラーが出ないときは、フォームの「オブジェクトの属性」>イベント(タブ)>ここの「レコード移動」のチェックマークか、 または「イベントを使用する」にチェックマークがないため、イベントが生きてないのかもしれません。 2)ここ【多遊】さんと、幅田さんの両掲示板は、半角カナをそのまま送信しても、 全角カナに自動的に直してくれるはずです。 3)日欧表記については、自分が考えて書いて自分が書き直して作っていくものですから、ご自身がわかりやすい日本語表記に統一することをおすすめします。 私の場合は欧文表記しかできなかった世界から桐に入ったため、欧文の方が判読しやすいので、あえて欧文表記に修正しています。 自分にわかりやすくするために、わざわざそうしているわけです。 日本語から英語に一括や手動で変換するのは余計な作業です。 そういうことに時間や労力を割くのはやめた方がいいと思います。 他にやらなければいけないことがいくらでもあるのですから。 ただ、他人がどちらで書いていても、それを読めるようになってほしいです。 ユーザが表記を選べるということは、とてもいいことだと私は思います。 |
|
|
||||||||||||
悲しげさん、大雪で埋もれていたようですが、なんとか無事だったようでなによりです。 ぼくちんが理解しているのはこうなんですが。 1)オブジェクト更新コマンドは即座に更新を画面に反映するから、 変数変更・再描画・描画更新メソッドは不要。 2)変数変更メソッドは、イベントが終了したら画面に反映するから、 ふつうは再描画・描画更新が不要で、 イベント終了前に更新したいときは再描画・描画更新を使う。 では、さらなる解明をよろしくね。 アックン(=^・^=) |
|
|
||||||||||||
多遊さん、悲しげさん、おはようございます。 私の疑問に対する懇切丁寧なご解説有り難うございます。 お陰様にてもう少しマニュアルを良く読もうという気になってきました。 すみませんがもう一つ全く基本的質問をお許し下さい。 ------------------------- 手続き定義開始 フォーム::レコード移動(長整数 &行番号,長整数 &総件数,長整数 &明細番号) &文字数=#文字数([文言]) *method @t文字数.再描画(0) method @フォーム.変数変更() method @フォーム.描画更新() 手続き定義終了 ------------------------- このような定義の記述で、 フォーム::レコード移動とか、method @フォーム.変数変更() など半角カタカナ記述を全角に直しても結果は変わらないようですが、 どうして敢えて半角にしているのかいつも疑問に思っています。 コマンドによっては半角と全角をキチンと区別しなければならないものも あるようですが、半角、全角を使い分ける基準があるのでしょうか。 定義内容をメール送付する場合、半角カタカナ厳禁と言うことでいちいち 全角カタカナに直さなければならず、管理工学はどうして半角カタカナ コマンドにしているのか、何か意味があるのかいつも疑問に思っていました。 又、今後、一括処理やイベントの定義を書いていくについてのコマンド表記方法 ですが、メソッド呼び出し、methodのような日本語表記と英字表記の、メリット デメリットがあればご教示頂ければ幸いです。 私自身としては日本語表記の方が判りやすいのですが。 |
|
|
||||||||||||
意味が判りにくそうなので2点補足。(^^;) >「再描画」の方は、オブジェクトの指定を一部か全部か使い分けが可能 >ではあることもさりながら、変数をソースにしないオブジェクトも対象 >となる。 ↑ 例えば、「オブジェクト操作」コマンドで「ラベルオブジェクト」を変更 したような場合など。 >あと他にも有りますでしょうか?(「−1」パラメータで桐自体も含む他 >ウィンドウも扱えるってことはありますが、自ウィンドウに関して) ↓ ・・・・・・・・・・・・・・(「ウィンドウ更新コマンド」の方は「−1」 パラメータで桐自体も含む他ウィンドウも扱えるってことはありますが・・・ |
|
|
||||||||||||
さてさて、悩ましいのは、「再描画」と「変数変更」の違いです。 まず、「再描画」の方の説明を引用すると --------------------------------------------------------------- 指定したオブジェクトの操作結果だけをウィンドウ上に反映させるた めに、再描画を予約します。 このメソッドは、変数をソースに指定しているオブジェクトの再描画を 制御するために使用します。たとえば、同じ変数値をソースにしている オブジェクトがふたつあるとき、一方のオブジェクトの値だけを、画面 上に表示するために使用します。 --------------------------------------------------------------- 次に「変数変更」の方 --------------------------------------------------------------- 変数を使用しているフォーム上のオブジェクトを、すべて再描画するよ う予約します。 予約した再描画は、イベントハンドラがすべて終了したときに実行され ます。 イベントハンドラ内(または一括処理内)で変更した変数の値は、その ままではフォーム上に反映されません。このメソッドを使用して、対象 オブジェクトの再描画を予約する必要があります。 ・・・・・・・・・・ [サブフォーム名]または[グループ値リスト]に変数を使用している[サブフォーム]は、こ のメソッドを使用しないと、再描画がスケジュールされませんので注意し てください。 --------------------------------------------------------------- う〜ん、これだけだと違いは「同じ変数値をソースにしているオブジェ クトがふたつあるとき」と「サブフォーム名」と「グループ値リスト」 で変数を使っている時くらいしか読み取れません。 私は、このふたつの一番の違いは次のような点ではなかろうかと想像し ているのですが、どうなのでしょう? 「再描画」の方は、オブジェクトの指定を一部か全部か使い分けが可能 ではあることもさりながら、変数をソースにしないオブジェクトも対象 となる。片や「変数変数」の方は、変数をソースにしたオブジェクトだ けに限定される。 とすれば、多くの場合「再描画」の方だけでいいじゃん、特に「変数変 更」を使う必要ないじゃん、とも思われるのですが、後者の方は変数ま わりに限定されるので、描画が高速である。・・・違うかな?(^^;) * あ、長くなってすいませんが、もう1点。(^^;) これはむしろ私からの質問です。「再描画」メソッドの最後の引き数に ついて。 --------------------------------------------------------------- 再描画するレコード数に応じて、1 または 0 を指定します。 引数 1 全レコードを再描画します。 0 処理対象行の指定したオブジェクトのみを再描画します。 おもに、一覧表形式または伝票形式のフォームで、処理対象行のオブジ ェクトだけを再描画する場合に指定します。 再描画するオブジェクトとして、「@フォーム明細部」または「@フォーム」を指 定した場合は、1 と同じ結果になります。 --------------------------------------------------------------- 1が全レコードであることは判るのだが、指定したオブジェクトだけで はなく、全オブジェクトが対象となるのか? 次、0は処理対象行の1レコードだけが対象となることは判るし、指定 したオブジェクトのみが対象となることも判るが、では指定した1レコ ードの全オブジェクトを対象としたい場合は、どうするのか? 「『@フォーム明細部』または『@フォーム』を指定した場合」が「1と同じ結果」 と云うのは、「全レコード」と云うよりも「全オブジェクト」ではない のか?(全レコード且つ全オブジェクトと云う解釈も有り?) これ、かねてよりの疑問です。(^^;) * あ、追伸です。 「再描画」「変数変更」「描画更新」のメソッド群と「ウィンドウ更新」 コマンドの違いも悩ましかったのですが、この度その違い(の一端?)が 理解できました。それは、「ウィンドウ更新」コマンドは表示モードでし か使えないが、上記メソッド系は更新中のモードでも使えた、ってこと。(^^;) あと他にも有りますでしょうか?(「−1」パラメータで桐自体も含む他 ウィンドウも扱えるってことはありますが、自ウィンドウに関して) |
|
|
||||||||||||
どもっ、【多遊】さん、 代わりに説明ありがとうございました。<(_ _)> 私の方の勘違いもあったので、まずは以下に訂正したkevを挙げます。 -------------------------------------------------------------- 名札 メイン var 固有,長整数{&文字数,&制限} &制限=50 /*4000文字対策なら、ここは3950くらいが妥当か?*/ * 手続き定義開始 フォーム::レコード移動(長整数 &行番号,長整数 &総件数,長整数 &明細番号) &文字数=#文字数([文言]) *method @t文字数.再描画(0) method @フォーム.変数変更() method @フォーム.描画更新() 手続き定義終了 手続き定義開始 t文言::編集文字列変更() var 自動,文字列{&編集字} method @t文言.編集文字列取得(&編集字) &文字数=#文字数(&編集字) if(&文字数>&制限) 確認 "文字数が"+#str(&制限)+"を超えました!" &編集字=#sstr(&編集字,1,&制限),&文字数=#文字数(&編集字) method @t文言.編集文字列設定(&編集字) end *method @t文字数.再描画(0) method @フォーム.変数変更() method @フォーム.描画更新() 手続き定義終了 -------------------------------------------------------------- 補足します。(【多遊】さんの説明と一部重複しますが) 今回の場合は次の4つの記述のいずれでも同じ結果となります。 1 method @t文字数.再描画(0) 2 method @フォーム.変数変更() 3 method @t文字数.再描画(0) method @フォーム.描画更新() 4 method @フォーム.変数変更() method @フォーム.描画更新() ▼「再描画」メソッドは、当該手続き範囲の実行を終えた時点で、画 面を再描画するための、一種の「予約」行為になります。 ▼「変数変更」メソッドも、取り敢えずは同上のようなもの、つまり は「予約」行為としてご理解下さい。 ▼「描画更新」メソッドは、当該手続き範囲を終える前に、その途中 でも即時に更新させるものです。これは上の二つ、「再描画」か「変 数変更」の存在が前提でありまして、これらの「予約」を即時実行さ せると云うことです。手続き範囲を抜け切ってから(のんびりと?) 再描画させることで構わない場合だと、このメソッドは不要とも云え ます(1と2の場合)。 長いので続きは別稿とします。 |
|
|
||||||||||||
あれっ!。旧ファイルはそのまま開けるようになったのでは? 「KD1331:旧バージョンの形式です。再定義してください」 が、でます。 どこかで、V3のファイルもそのまま読み込めると、みたような 気がしますが・・・フォームだけだったでしょうか? 勘違いですね。 |
|
|
||||||||||||
またまた、異常?な症状ですが、サブフォームの上に オブジェクトを配置しても表示されないようです 仕様でしょうか。それともなにか方法がありますか? (なんで、そんなのが必要かと聞かれると弱いのですが・・・) |
|
|
||||||||||||
小松さんこんばんは。 >上記のような理解で良いのかどうか、 そうですね。 しいて書かせていただきますと、以前に >実は、ミニコミ誌3誌に法律四方山話的な連載を書いており、800字とか >1000字とかの制限があります。 と書かれていましたので、文字数分ルーチンを準備するのも大変ですから >if(&文字数>800) /*&文字数が800字を越えた場合*/ 事前に&制限文字数=800など変数で準備し、 >if(&文字数>&制限文字数) /*&文字数が800字を越えた場合*/ などとかかれるのもいいかと思います。 >メソッド呼び出し @フォーム.変数変更() 変数に値を代入したときは、普通は自動で行われます。が、 その値を他で参照するときや、続けて同じイベント内をループ しているときなど、故意に利用します。 一応手続き(イベント)を終了したときは、自動で、更新されますが、 今回みたいにリアルタイムに処理を行うときは、是非入れてください。 通常は、 >メソッド呼び出し @t文字数.再描画(0) とペアで使用されるといいと思います。 |
|
|
||||||||||||
悲しげさん、おはようございます。 昨日ご指導頂いたリアルタイム文字数表示イベントについてマニュアルを見ながら 私なりの解説を付けました。 定義部分を自分の言葉に置き換えないと理解できないからです。 名札 メイン 変数 固有,長整数{&文字数} * 手続き定義開始 フォーム::レコード移動(長整数 &行番号,長整数 &総件数,長整数 &明細番号) *使用フォームで、レコード即ち行を移動したときに発生するイベント開始 &文字数=#文字数([文言]) /*&文字数に、[文言]内の文字数を代入する*/ メソッド呼び出し @t文字数.再描画(0) *[文言]の操作結果だけをウィンドウ上に反映させるために、再描画を予約\ (0)は、処理対象行の指定したオブジェクトのみを再描画 メソッド呼び出し @フォーム.変数変更() *変数を使用しているフォーム上のオブジェクトを、すべて再描画するよう予約 手続き定義終了 手続き定義開始 t文言::編集文字列変更() /*一般手続イベント開始*/ 変数 自動,文字列{&編集字} メソッド呼び出し @t文言.編集文字列取得(&編集字) *[文言]から編集文字列を取得して、&編集字に代入 &文字数=#文字数(&編集字) /*&編集字の文字数カウント結果を&文字数に代入*/ if(&文字数>800) /*&文字数が800字を越えた場合*/ 確認 "文字数が800を超えました!" /*確認用のメッセージボックスを出す*/ &編集字=#部分列(&編集字,1,800),&文字数=#文字数(&編集字) *&編集字に1文字から800文字目までを代入し、&文字数に800を代入 メソッド呼び出し @t文言.編集文字列設定(&編集字) *[文言]オブジェクトの編集文字列を&編集字に置き換え、これにより801文字目以降を削除 end メソッド呼び出し @t文字数.再描画(0) /*[文言]の800字を再描画*/ メソッド呼び出し @フォーム.変数変更() /*[文言]の800字を再描画*/ 手続き定義終了 上記のような理解で良いのかどうか、又 メソッド呼び出し @フォーム.変数変更() の意味がイマイチよく判らず、がどうして必要になるのかを、 ご教示頂ければ幸いです。 |
|
|
||||||||||||
○○さん>こんばんは。お名前が書いてあると呼びやすいですね >イベントと一括の違いについて教えてください! 一言ではかけませんし、私も100%理解しているわけではないのですが、 感じたままを書いてみます どちらも結果は、同じ物を作成することができます。大きな違いは2つあります 一括処理は、何かの作業を行う(データーの入力・絞り込みや集計等加工・印刷等) 行程を書いていきます。 イベントはその行程のなかで、「時(とき)」を、操作することができます 例えば、データの入力の場合 一括処理では、訂正・追加モードに入り、データーの入力、終了です。しかし イベントでは、同じデーターの入力時でも、「訂正モードに入ったとき、文字を入力 しているとき、入力終わったとき、表示モードになったとき」などに、別の判断する 処理を行うこととが、可能です。 あと1つは、イベントは先ほどの「時(とき)」が、発生したときに実行する事が できます。他にもマウス操作や、表を開いたときなどあります (イベントの詳細は、リファレンスを参照ください) では、なにもしないときは、イベントは発生しないのか? 答えは発生します(正確には、させることも可能です)。タイマーのイベントが 使用できますので、スクリーンセーバーみたいに一定時間使用しなかったら なにかを行うことも出来ます。 >v8はイベントを組まないと、v5の一括のような動きはしないんでしょうか? V5とV8の大きな違いは、DOS版 か WINDOWS版 かということです。 従って「イベントを組まないと」これは、違うと思います。 V8の一括でかなりの部分が動きます。ただ、画面描画等大きく異なってるものも ありますが互換モードもありますので、だいじょうぶと思います。 これはある程度という意味ですので、V8用に作成(修正)されたほうが安心ですね >イベントは、v5の >一括に似てるような気もするんだけど・・・・・ この「イベント」の意味が少しわかりませんが、コマンドの書き方でしょうか? それでしたら、ほぼそのままV5の物を使用できます。 ただ単に、拡張子が、CMDとKEVの違いでしたら、呼び出し方の違いぐらいで あまりメリットはありません。 せっかく、V8を使用して、イベントを利用されるようでしたら、フォームに コマンドボタンを置いただけのメニューなど作成(テスト)して見てください。 便利さがよくわかります。 また、作成方法やご不明な点がございましたら、何でも書き込んでくださいね。 他の方のホームページにも、同様の説明がご紹介されてますので参照ください |
|
|
||||||||||||
多遊さんはじめまして。 イベントと一括の違いについて教えてください! v8はイベントを組まないと、v5の一括のような動きはしないんでしょうか? v5からv8に変換すると動くんですが、今レポートやフォームを初めから作成 中で、再構築中なんですが、どうも理解にくるしんでます。イベントは、v5の 一括に似てるような気もするんだけど・・・・・ なんて言ったらいいか・・・んー 言いたいことがうまく伝わったかなあ よろしくお願いします! |
|
|
||||||||||||
悲しげさん、いつもお世話様です。 早速、使用して、感激しているところです。 実は、ミニコミ誌3誌に法律四方山話的な連載を書いており、800字とか 1000字とかの制限があります。 これまでワープロで作成していたのですが、過去のデータを参照しながら書 けるように桐フォームを利用し始めました。 #文字数を利用していたのですが、リアルタイム表示が出来ればと熱望して おりました。 悲しげさんにとっては簡単なイベントでしょうが、私自身では逆立ちしても 不可能です。 定義内容も良く理解できませんが、私なりに解読に努めます。 本当に有り難うございました。心より御礼申し上げます。 |
|
|
||||||||||||
どもっ、小松さん、イベントを使えば簡単に実現できると思います。 以下kevの例(制限50文字として) -------------------------------------------- 名札 メイン var 固有,長整数{&文字数} * 手続き定義開始 フォーム::レコード移動(長整数 &行番号,長整数 &総件数,長整数 &明細番号) &文字数=#文字数([文言]) method @t文字数.再描画(0) method @フォーム.変数変更() 手続き定義終了 手続き定義開始 t文言::編集文字列変更() var 自動,文字列{&編集字} method @t文言.編集文字列取得(&編集字) &文字数=#文字数(&編集字) if(&文字数>50) /*実際には3950くらいが妥当か?*/ 確認 "文字数が50を超えました!" &編集字=#sstr(&編集字,1,50),&文字数=#文字数(&編集字) method @t文言.編集文字列設定(&編集字) end method @t文字数.再描画(0) method @フォーム.変数変更() 手続き定義終了 ------------------------------------------- 表には[文言]なる項目があるとします。 wmfでそれに対応するテキストオブジェクト名がt文言です。 ・・・・と説明しても判りにくいかもしれないので、取り敢えず wfm,kev,tblのセットをお送りします。(^^;) |
|
|
||||||||||||
すみません。又小松です。 私はワープロ文書の桐化を試みてきましたが、4000字を越える長文データ 処理方法に悩んできました。 佐田先生から、自己表の表引きによる方法を示唆されましたが、やってみると 一括処理、イベントでは動かなくなり、目的を達せませんでした。 ところが、今般、ふと、一覧表レポートで簡単に実現できることを発見しました。 気付いてみると実に簡単なことでした。 これが今回送ったメニューの内の事情聴取書です。 桐で長文データを作成していて必要と感じたのは、項目内で、今、何字目を書いて いるかを確認する方法です。 #文字数で、簡単に判りますが、確定しないと表示されません。 訂正モードで、リアルタイムに何字目を書いているか判る方法があればと大変便利 になるのですが。 こんなことは名人各位には造作もないことかも知れませんが。 ご指導頂ければ幸いです。 |
|
|
||||||||||||
小松です。今、圧縮したサンプルファイル(約1M)を多遊さんとOgoさん宛に 送ったところです。 今後こんなことをしたいという希望を申し上げます。 電話受付簿の任意データを絞り込み、クリック一つでベッキーを立ち上げ、 当該データをベッキーに自動的に読み込ませ(私には、ここが難しそうです)、 私のメールアドレスに送付すること。 実は今回の5日間の出張中、アルバイト事務員からの電話連絡報告が、もどかしく 面倒で、電話連絡簿に記載した文書データをメールで送らせた方が合理的を感じた 次第です。 |
|
|
||||||||||||
多遊さん,Ogoさん、おはようございます。 >そんなにお気づかいなく、いつもの「おばんです」で、おいでくださいネ。 >「名人達人」のかたもいらっしゃいますが、桐を使用されてる方なら >みなさん大歓迎ですから。 有り難うございます。お言葉に甘えて、又書き込みさせて頂きます。 正直に言うと、10日の多遊さんの一連のご解説書込内容は、レベルが 高すぎて私には理解不能な点が多いのですが、読むだけは読んでいこうと 思っています。 将来、何かに役立つことがあるはずですので。 ところで日弁フェアに出展した法律事務処理システムの一部をサンプル データ付きで整理しましたので、Ogoさんと、多遊さんにDM致します。 一応、当日配布した一太郎ファイルによる解説レジュメも入れておきました。 名人・達人各位の目には稚拙極まるもので、暇なときで結構ですので改善点等 アドバイス頂ければ幸いです。 |
|
|
||||||||||||
尾形さん>こんばんは。 >ですよね! よかった。こんなことを考えるのは私一人かと思いました。 >「常に最前面に表示」のオプションが欲しい >利用価値高いと思う (^^) ほかにも欲しい機能はたくさんあるとありますが、一つでも二つでも 解決してくれたらと思います。 |
|
|
||||||||||||
>モーダルにすれば、後ろのフォームがさわれないし、普通のフォームに >すれば、前後が入れ替わってしまうし・・・・・ ですよね! 「常に最前面に表示」のオプションが欲しい 利用価値高いと思う (^^) |
|
|
||||||||||||
プログラムを作成していてエラーがでるのは、”(ダブルコーテーション)を 利用した計算式。 今回もあいかわらず、エラー続出。少し長くなったり、変数や関数を含むと 間違いやすいですね。 そこで、基本に戻って 文字列+文字列・・・この方法もありますが、あくまで応用で、ちゃん とした関数があります。 例:併合に変数ファイル名・変数項目を指定するとき 1.&STR="併合 "+""""+&temp表+""""+",両方,編集表=する,{[番号]照合[番号],["+#文字列(&面)+"]複写[作業]}" 2.&STR=#連結("併合 ","""",&temp表,"""",",両方,編集表=する,{[番号]照合[番号],[",#文字列(&面),"]複写[作業]}") どちらが見やすいですか?もちろん、どちらも正解です。 ちなみに、どちらも&STRには、下記が生成されます。(事前に変数には、代入済みとして) 併合 "GAMEtemp.tbl",両方,編集表=する,{[番号]照合[番号],[2]複写[作業]} |
|
|
||||||||||||
一太郎12・花子12のヴァージョンアップ案内が届く 今回で2回目だが、こういうのに予約して購入する割合は? 確かに、インターネットデスク(60MB)とか、その他特典が ついては、いるようだが、街のショップで購入した方が やすい感じがします。その他、還元ポイントなども付いてくるし ところで、ジャストシステムの五郎って、現役ですか? あまりみかけないけど。もしかして、桐も五郎ユーザーに 同じようなことを・・・ 近くのTゾーンが閉店しました。最近は○○○カメラみたいに カメラ屋がパソコン販売する店が多いですね。 桐V9の案内はいつ届くのでしょう。 |
|
|
||||||||||||
いま、やりたいこと。フォーム複数表示して、その全部のフォームが 同時に利用出来るシステム pokoponさんが以前ご紹介されてました「リモコン」のフォーム版です 特定のフォームは常に最前面に配置しながら、バックのフォームも操作 できる物が望みです。 モーダルにすれば、後ろのフォームがさわれないし、普通のフォームに すれば、前後が入れ替わってしまうし・・・・・ |
|
|
||||||||||||
オブジェクト操作コマンドは、普通のフォームでは、 オブジェクト操作 @obj{*****} この場合、ハンドルは省略可能です。 では、サブフォーム付きで、オブジェクト操作を行うときは オブジェクト操作 @sub,@obj{*****} サブフォーム名+オブジェクト名で、指定します。 (と、いうか、設定してました。) サブフォーム付きのフォームを開いた状態で、ファイルパレットで 確認すると、サブフォームも1つの番号を占有してますね。 試したのは、メニューみたいなスタイルで、対象表がない物の中に、 さらに対象表のないサブフォームを、組み込んだ形です。 他に何も開いてない状態で起動した場合、本体フォームの番号が40で、 サブフォームが39に設定されるようです(表示は同名です)。 (ちなみに、表が設定されている場合は、1〜始まってます。) さて、疑問は、このサブフォームのフォーム番号は、関数やイベントで 取得できるものでしょうか? 現在、 &mainwfm=&hwindow &subwfm=&hwindow-1 で、行ってます。そこで、上記オブジェクトを次のように訂正します >オブジェクト操作 @sub,@obj{*****} オブジェクト操作 ハンドル=&subwfm,&obj{*****} 今回、ライブラリーを使用したものを作成してみました。 どのフォーム(イベント)から、呼び出しても、正常に動かす為に 大変役にたちました。 いかがでしょうか?ご存じの方、是非お願いいたします。 ps.実験の結果、 サブフォームのフォーム開始(長整数 &表番号)に 「&subwfm=&hwindow」を、設定してみましたが、ここでは40がはいります。 |
|
|
||||||||||||
小松さん>こんばんは。ちょっと休みをとって留守してました。 >この掲示板は、名人達人専用のようで書込しづらいのですが、 >勇気を持って書き込ませて頂きます。 そんなにお気づかいなく、いつもの「おばんです」で、おいでくださいネ。 「名人達人」のかたもいらっしゃいますが、桐を使用されてる方なら みなさん大歓迎ですから。 >ここ5日間程連続出張中でしたが、事務所から私の携帯電話の連絡が面倒で、 >桐でベッキーv1を立ち上げ、桐の電話連絡簿任意複数行データを自動的に >ベッキーに読み込ませ、送付する方法を模索しております。 あいかわらず研究熱心ですね。もし、よろしければ、私にも、その辺の データをお手配いただけましたら、さいわいです 来年2月になるとまた、予算が始まり、ずるずると5月まで、決算で忙しく なります。逆いえば、1月いっぱいは時間がありますので、 ・・そんな訳で、現在桐でゲーム作成中です。(とんでもないですね) |
|
|
||||||||||||
Ogoさん、おばんです。いつもお世話様です。 低レベルで、恥ずかしく、とてもOgo名人にお見せするような代物ではありません。 しかし、Ogoさんに見て頂き、改善点等示唆して頂ければ望外の喜びです。 低レベルですが、量だけは膨大にあり、取り敢えず、その中で、破産宣告手続に関する ものだけ整理して、OgoさんのHPにあるアドレスに送付いたしますので宜しくお願い 申し上げます。 顧客IDと事件IDをベースにしてリレーショナル化を試みております。 尚、4〜8日まで事務所旅行で留守にしていたため、溜まった仕事の整理で忙しく データを整理して送付まで少々時間を下さい。 と言いながらHP巡りは、していますが(^_^;)。 |
|
|
||||||||||||
>12月4日に日弁コンピュータフェアがあり、私の法律事務処理システム >(名人の前システムというのは恥ずかしいのですが)を発表してきました。 私がそれを入手できますか?(できればサンプル付きで) |
|
|
||||||||||||
多遊さん、お久しぶりです。いつもお世話様です。 この掲示板は、名人達人専用のようで書込しづらいのですが、 勇気を持って書き込ませて頂きます。 ここ5日間程連続出張中でしたが、事務所から私の携帯電話の連絡が面倒で、 桐でベッキーv1を立ち上げ、桐の電話連絡簿任意複数行データを自動的に ベッキーに読み込ませ、送付する方法を模索しております。 J. Saitoさんの桐V8 メール一斉送信 1.51 が、参考になりそうですが、 何れ井戸端BBSで質問させて頂きますので宜しくお願い申し上げます。 12月4日に日弁コンピュータフェアがあり、私の法律事務処理システム (名人の前システムというのは恥ずかしいのですが)を発表してきました。 お陰様にて大変好評でその場では今度こそ桐を勉強したいと言う弁護士が 複数名表れましたが、いつまで続くことやら。 |
|
|
||||||||||||
関数のヘルプなどを見るとき、いちいち一覧表に戻らなくても <<(<) >>(>)で、次々とヘルプを見ることができます。 暇なときは、ゆっくりヘルプを読むのもいいかも知れません。 psそんな訳(?)で、また、不在になります |
|
|
||||||||||||
少し前のアプリケーションで、ネットワークに対応していないものが ありますが、いったん桐でネットワーク先のドライブを指定すると そのアプリケーションでも使用できるようです。 もちろん読み書きができるて助かるのですが、なんだか変ですね 少し得した気持ちになります。 |
|
|
||||||||||||
#文字置換( str1 , n , str2 ) の、桐のhelpでは >半角コンマで区切られた文字列 str1 の n 番目の部分列を str2 に置き換えた文字列を返す。 > n がゼロ以下であれば str1 を返す。 > n が未定義値であれば未定義値を返す。 > > 【例】 #文字置換("剣,盾,兜",1,"黄金の剣") > → "黄金の剣,盾,兜" 以上のように、説明が記されてますが &STR=#u &STR=#文字置換(&STR,10,"桐") を行うと、いきなり ",,,,,,,,,桐"のように文字列が作成されます。 事前に、コンマ区切りの文字列を準備しておかなくても正しく実行されます。 |
|
|
||||||||||||
フォーム上のオブジェクトを移動させていとき、 例上方向に20の場合の式は オブジェクト操作 &obj{&xpt=始点X,&ypt=始点Y} &ypt=#文字列(#数値(&ypt)-20)+" pt" オブジェクト操作 &obj{始点X=&xpt,始点Y=&ypt} このように記述してますが、そのまま計算式でも可能なようです。 オブジェクト操作 &obj{&xpt=始点X,&ypt=始点Y} オブジェクト操作 &obj{始点X=&xpt,始点Y=#文字列(#数値(&ypt)-20)} そのうえ、最後の"pt"も、なくてもいいようです。 ※一応、標準が"pt"になってるようですね。 ちなみに、オブジェクトの属性画面で「10cm」と入力すると自動で(?) 「283.5pt」と、変換されます。20cmは「566.9pt」です。 おもしろ半分でついでに、試してみました。 「inch」・・実はエラーになります(単位記号は)3文字までしか受け付けない。 「in」で変換できます。お暇な方は、是非お試しください。 ということは、 >オブジェクト操作 &obj{始点X="10cm",始点Y="10cm"} で、いけるかも?試していません。 |
|
|
||||||||||||
普通変数の比較式は、「if(&文字列A=&文字列B)・・・」と、書きますが 配列変数は同様に、「if(&文字列A[2]=&文字列B[2])・・・」でしょうね。 ところで、配列変数全部を比較するときは、 繰り返し &i=1,5 条件(&文字列A[&i]=&文字列B[&i])・・・・・・ 繰り返し終了 または 条件(&文字列A[1]=&文字列B[1]) .and &文字列A[2]=&文字列B[2]) .and ・・・・・・) このように書いてますが、配列数が多くなると、ただ式が長くなるだけです。 なにか、配列変数を全部簡単に比較する方法はなかったでしょうか? ヒントでもないのですが、配列に値を代入するときは、 &文字列A[1]="あ" &文字列A[2]="い"・・・・・・でも、いいですが、 &文字列A={"あ","い","う","え","お"} これでも、可能です。 ただ、「{"あ","い","う","え","お"}」これを、そのまま &STR={"あ","い","う","え","お"} みたいに、変数には代入できません &STR="あ,い,う,え,お"と、変換すれば可能です その方法が見つかると、ダイレクトに変数全部の比較が簡単に出来るかと 思います。いかがでしょうか ほかの方法でも、もちろん結構です。 |
|
|
||||||||||||
先着1名様にブツ届きました。 詳細次号。 |
|
|
||||||||||||
太郎さん>こんにちは >パソコンから電話は出来ないでしょうか? >パソコンには、マイク端子・スピーカー端子がついているのですが。 >ヘッドセットもあります。 書かれてるとおりです。マイクもスピーカーもありますね。 こんなことは出来るのでしょうね。ただ、いま付いてるマイク・スピーカーが そのまま使用できるかどうかはわかりませんが。 私は詳しくないですが、多少他のオプションが必要かもしれませんが また、いまできなくても時間の問題でしょうね 話は変わりますが、以前に聞いた話です。お年寄りや寝たきりの方が お元気かどうかをセキュリティ会社が調べるのに、いちいち電話では 確認できないので、とった方法です ポットに無線かなにかをセットして、使用回数や利用時間を見て、 サポートしてるとか聞いたことがあります。 最近は、「携帯で声も送れるそうですので・・・・」本末転倒のCMです ps.DOSのころ、wtermだったと思いますが、外部から電話がかかると パソコンの画面に「Ring」とメッセージが残ってたように記憶してますが? |
|
|
||||||||||||
HERBさん>こんばんは >システムのバックアップ、保存してあるファイルでも更新日を選 >択し任意の更新日の段階に戻せます、削除したファイルも一定期 >間なら元に戻せます、3種個別にバージョンアップできるようで いろいろご紹介ありがとうございます。 もちろんバックアップは意識して行われてると思いますが、方法は メニュー等(コマンドボタンや、プログラム)で、行われてますか? それともwindowsのコピーや他のツール等を使用されてますか? 以前、依頼を受けたシステムに組み込んだものは、メニューから 終了すると日付によって、5カ所に自動保存するように組みました。 1・6・11・16・・・は、1番目 2・7・12・17・・・は、2番目 ・・ 5・10・15・20・・は、5番目に保存しています。 これだと、もしものとき、通常は1日分の再入力ですみます。 いろいろ方法はあるかと思いますが、みなさんは、どのように されてるのでしょうね。 |
|
|
||||||||||||
はじめまして 桐にまったく関係ないのですが質問してもいいでしょうか? もしだめでしたら、削除して下さい。 よろしくお願いいたします。 パソコンから電話は出来ないでしょうか? パソコンには、マイク端子・スピーカー端子がついているのですが。 ヘッドセットもあります。 インターネット電話ってどうなっているのでしょうか? よろしくご指導下さい。 |
|
|
||||||||||||
多遊さん、HERBです。 >極端にいえば、「データー削除後」保存しても、アプリケーシ >ョンでは元に戻せなくても、そのお助けソフトが定期的にバッ >クアップしてくれてたりして、元に戻せるようなプログラムで >も作った方が・・・ エーアイソフト、以下、サイト。 http://www.aisoft.co.jp/japanese/products/syscmb2/syscmb2.asp 私はシステムコンボ2というソフトを購入しました、システムレ スキュー、ディスクツール、ファイルコンパクト3種のソフトが 統合されたソフトです。 システムのバックアップ、保存してあるファイルでも更新日を選 択し任意の更新日の段階に戻せます、削除したファイルも一定期 間なら元に戻せます、3種個別にバージョンアップできるようで 、先日案内メールが届きました。 最新版ではハードディスクから完全削除もできるようです、ウィ ルスソフトと連動してファイルを圧縮する時にスキャンしながら 圧縮、解凍します、ただ、Win98、Meのみ対応です。 >HERBさん> >>ちなみにまだベッキー1を使って >やはり、テキストの関係ですか?。こんなにたくさんのメーラ >ー その通りです(*^^*) |
|
|
||||||||||||
http://www.idg.co.jp/report/security/backnumber/us_topics/200102/sec20010226_01_us.html 多分、 MS-ie / MS-Outlook (express) を標的にしていると 思うんだが。 VBS なんてテキストファイルなんだから、桐の一括処理でも 「ウィルス作成ツールキット」を組むことは容易でしょう。 |
|
|
||||||||||||
悲しげさん、 >ところで、我がネスケを4.78(ついでにieも最新版←番号失念)にアップ >デートしようと思いつつ、 〜〜〜〜〜 もっと、早く気がつけば良かった。 (^^; 既に輸送中…… ところで、「最新版」の定義ですけど、基本的に、 MS-ie x.xx の 少数1桁までを限定して、それ以上 のバージョンアップは止めた方がいいですよ(仕事 に使う機械なら尚更)。 理由はもちろん、Windows 自体の互換性が確保不能 になってしまうため、最悪の場合、これまで動いて いたソフトで動かなくなるものが出て来る可能性が あるからです(私は「よりレスポンスが悪くなる」 ことも嫌悪しますが)。 MS-ie 4.0 (Win 95c / Win 98) は最新版が 4.01 sp2 MS-ie 5.0 (Win 98 SE) も最新版が 5.01 sp2 MS-ie 5.5 (Win Me) は最新版が 5.50 sp2 MS-ie 3.0 (Win 95b ) は最新版が 3.02 だけど、流石 にこれはどうかなぁ(でも、古過ぎて MS-JAVA の互換 性も怪しいし、 MS-Outlook Express も存在しないし、 WSH も含まれないから、却って安全なんですよ)。 また、 MS-ie 4.0 以上は、デフォルトの MS-JAVA には セキュリティ上の問題があるのに、これを放置している 人が殆どです。よって、 MS JAVA Virtual Mashine だ けでもちゃんと入れ代えておきましょう。 また、MS-ie を更新する際は、必ず「MS-Outlook Express も含んだ全部」をインストールして、リブート 後に MS-Outlook Express をアンインストールするよう にして下さい( WSH もね)。 でないと、Windows の中にセキュリティ問題を抱えた ままの古いバージョンの MS-Outlook Express (WSH) のコンポーネントが残ってしまい、 MS-ie がこれを 利用して何かを行なう可能性があるからです。 |
|
|
||||||||||||
>本当に迷惑ですね。ところで、なぜ、急にこんなに広がったのでしょうね >(パソコンの)ウイルスという言葉は、かなり以前から聞いた様に思いますが >メールでのやりとりが簡単になったから、一斉に広がったのでしょうね。 メリッサ/ラブレターと順調に進化を続けて来たのが、 ニムダで大ブレークして、更に「類似品」では「効率化」 が達成していると言うことでしょう。 メリッサは MS-Word の VBA (マクロ) を使って Outlook のアドレス帳を参照しながらメールで増殖するという大 ブレークスルーだったと思うし、ラブレターは VBS を 使ってもっと汎用的に WSH をインストールしている機械 なら MS-Office がなくても大丈夫になり、Win 98 以降 の機械なら最も普及しやすくなった(更に、2重拡張子 の罠も完備された)。 この後に実は html メールを使って MS-Outlook (Express) ユーザーに「プレビューだけで、ユーザーの動作を必要 とせずに勝手に添付ファイルを開かせる」技が明らかに なっています(当初はコンパイルされた HELP ファイル でした)。 ここまで、マイクロソフトは全て場当たり的なパッチし か出しておらず、セキュリティ根本のポリシーは変化 していません。 つまり、VBA も VBS も HTML メールも JAVA Script も、MSの作った「便利」を「安心」に優先させる機能 =「他人の機械を勝手に動かすことが可能な機能」は 有効なままなのです(特に、 MS-ie がこれを前提とし ていることが致命的に問題)。 ニムダは更に直接 MS-ie の心臓部を突いて来ました。 「ホームページを見るだけで感染するウィルス」 しかも、サーバーに対しても( Win NT/2K + MS-IIS の組み合わせにだけ有効ですが)、増殖する仕掛け まで入れてあったのですから、「ウィルス界の芸術」 ではないかと Ogo は思います。 実はこれらのための対策パッチは既に何ケ月も前から MSのホームページで公開されていたのに、全く適用 されていないことが明らかになったわけです。 後は、類似品にちょっとした工夫を加れば(例えば、 アドレス帳からではなく、 MS-ie のキャッシュから メールアドレスを抜き出すとか)、「増殖」の効率 化が達成できるってなもんです。 MS-Outlook (Express) は、「被害者」が「加害者」 としてウィルスを増殖させるわけですから(1世代 ごとの増殖率はどれくらいだと思いますか? 5倍 か10倍か100倍か……)。 なお、「ニムダ」を見た時の感想から言えば、それ まで「ウィルス」と言えば、英語の添付ファイル名 だったので、日本人に取ってはなかなかひっかかり にくかったものが、ここに来て(添付ファイル名は やっぱり英語ではあるのですが)ローカルディスク 内では日本語のファイル名を使って増殖していって います。 これは日本人にとって大変にヤバイわけです。 # ウィルスが添付するファイル名を、ローカルHD # の中にあるファイル名を流用するというパターン # は以前にありましたけどね。 多分、それまでは英語圏の人が母国語でのみ通用す るようなプログラミングしかしていなかったのが、 ソフトの内部ユニコード化などと相まって、汎言語 的な処理に洗練されて来たからなのでしょう。 # もちろん VBA や VBS で書かれた(即ち、コンパ # イルされていない)ウィルスなら、現物を入手さ # えすれば、これを日本語訳(日本語化)は簡単に # できますよ(私でさえも)。 # 日本語ローカル用のウィルスなら、日本人の実情 # に合った極めて効率の良いウィルスに代えること # が可能(メッセージやメールのタイトル・本文の # 改変とかだけで充分です)。 ちなみに、海外ではインターネットでフリーソフト として「簡単ウィルス作成キット」が公開されてる ようです。 |
|
Copyright (C) 2000 CGI Arkadia All rights reserved. Script written by Shintaro Wakayama. BBS-TypeN Ver.2 Preview4 remodel advice by hidetake |