8 ゴミ収集車 ーノレ ーノレ ーノレ ーノレ 弟・二部 ノ ゴミ収集車 7. 7 概要 Macintosh の TrashBox に、一定時間経過後に自動削除する機能を付けたものと考えて ■ Macintosh を知っている方へ なかなかファイルを削除する決断が付きにくい人向けです。 ます。 イルであっても、「リサイクルボタン」により、他のディレクトリに移動することができ なお、削除時間が経過する前であれば、「ゴミ置き場ドライプ & ディレクトリ」のファ ので、随時不要ファイルを指定することができます。 また、「収集対象ドライプ & ディレクトリ」は家フォームまたはアイコンで表示される ルの作成・更新日時から、指定時間以上経過したファイルが削除の対象となります。 イプ & ディレクトリ」に移動し、指定時間後に自動的に削除するプログラムです。ファイ 「収集対象ドライプ & ディレクトリ」中の不要指定をしたファイルを、「ゴミ置き場ドラ ください。 使用したコントロール コントロール名 ラ / 、ノレ テキストボックス リストボックス タイマー 所属 標準のコントロ 標準のコントロ 標準のコントロ 標準のコントロ
225 ④ ⑥ ⑨ ① ⑧ 五イプログラムの行う主な処理と、対応するコード 行末に来る文字と次の行の頭文字が行頭禁則文字だった場合 この場合には、指定桁数より 1 文字多くその行の文字列として改行します。 行末に来る文字が行末禁則文字だった場合 この場合には、指定桁数より 1 文字多くその行の文字列として改行します。 この場合には、指定桁数より 1 文字多くその行の文字列として改行します。 行末に来る文字が行末禁則文字で、次の行の頭文字が行頭禁則文字だった場合 この場合には、指定桁数より 1 文字少なくしてその行を改行します。 行末に来る文字が行末禁則文字で、次の行の 2 文字目が行頭禁則文字だった場合 行末に来る文字が行末禁則文字で、次の行の頭文字と 2 文字目が共に行頭禁則文字だっ た場合 この場合には、指定桁数より 1 文字少なくしてその行を改行します。 ⑥行末に来る文字と、次の行の頭文字が共に行末禁則文字だった場合 この場合には、指定桁数より 1 文字少なくしてその行を改行します。 ①行末に来る文字と、次の行の頭文字が共に行末禁則文字で、次の行の 2 文字目が行頭禁 則文字だった場合 この場合には、指定桁数より 1 文字少なくしてその行を改行します。 ①その他の場合です。そのまま指定桁数通りに改行を行います。 ただし、これは禁則処理を行わなくても良いときにかぎりません。行末に来る文字の前 トボックスの幅を決めます。さらに、そのテキストボックスの幅に応じて、フォームその 1 桁分の文字幅を 110twip と想定し、禁則処理による十文字分も考慮して、 formMain . Width = formMain. Text view. Width 十 120 formMain. Text view. Width = 110 (keta 十 4 ) 指定桁数に合わせて、フォームのサイズを変更する 後でどうやって改行しても禁則処理を行えない場合も含まれます。 テキス もののサイズも変更します。 ー twip 1 twip は、 印刷したときに、 1 / 1440 cm になります。
120 . 第二部 ノ ゴミ収集車 7. 2 ゴミ収集車のプログラミングをするときに考えたこと ゴミ収集車に持たせたい機能は、使う人が設定した時間 ( 削除時間 ) が経過したファイル の削除です。 どのようにして使う人に不要ファイルを指定させるか、どのように不要ファイルを一定 時間後にディスク上から削除するかがアイデアとプログラミングテクニックです。 削除までに猶予期間を与えるのが、このプログラムのおもしろいところです。ファイル マネージャなどをはじめとした、他のファイル管理ソフトには見られないものです。 削除指定されたファイルを、どうやってゴミ収集車で管理するか ? 1 . 2.2 ゴミ収集車のもうーっのポイントは、不要ファイルをどうやって削除時間後にディスク ク上から削除するか ? 管理下に置いた不要ファイルを、どのようにして削除時間後にティス しくなったので、付けました。 なお、念のため、削除される前であれば、さらに他のディレクトリに移動する機能も欲 いし、既存のものを使ってもいいし、この選択は使う人に任せることにしましよう。 しまうことにしました。移動先は任意のディレクトリで良いでしよう。新しく作ってもい そこで、削除までの時間、どこか他のディレクトリ ( ゴミ置き場ディレクトリ ) に移動して また、不要ファイルは、とりあえずもとの場所からは見えなくなって欲しいものです。 ドライプ & ディレクトリ」フォームを作ることにしました。 ル ( ゴミ ) を指定する機能を付けることにしました。不要ファイルの指定用に、「収集対象 しかたがないので、少しスマートにはならなかったのですが、ゴミ収集車に不要ファイ せん。 それはかなり特殊な方法を用いたもので、初心者ではなかなか真似できるものではありま ェアでは、 VisuaI Basic を使ったドラッグ & ドロップを実現しているものもありますが、 Basic で作られた同じプログラムの上でなければ認識できません。一部のフリーソフトウ しかし、残念ながら、 Visual Basic のドラッグ & ドロップ機能は、基本的に Visual これは、一般的なごみ箱でもよく行われる方法です。 ップして、ゴミ収集車に管理させるものです。その後でゴミ収集車で削除を行うのです。 し、ファイルマネージャなどからゴミ収集車にファイルやディレクトリをドラッグ & ドロ 削除ファイルを指定するもっともスマートと思えた方法は、 Windows の特性を生か
140 第二部 . / ゴミ収集車 ④変数「 trushyear 」、すなわち削除対象となる年より前の作成・更新年を持つ場合には、 そのファイルを削除します。 、、より前の年 " とするのは、同年に作成・更新されたファイルでも削除対象とならない 期間のものがあり得るからです。 ⑥変数「 trushyear 」と同じ年の作成・更新年を持ち、かっ、変数「 trushmonth 」、すなわち 削除対象となる月より前の作成・更新月を持つ場合には、そのファイルを削除します。 、、より前の月 " とするのは、同月に作成・更新されたファイルでも削除対象とならない期 間のものがあり得るからです。 ④変数「 trushyear 」と変数「 trushmonth 」と同じ年月の作成・更新年月を持ち、かっ、変数 「 trushday 」、すなわち削除対象となる日より前の作成・更新日を持つ場合には、そのフ ァイルを削除します。 、、より前の日 " とするのは、同日に作成・更新されたファイルでも削除対象とならない期 間のものがあり得るからです。 ⑥変数「 trushyear 」と変数「 trushmonth 」、変数「 trushday 」と同じ年月日の作成・更新年月 をリサイクルすることも可能です。 理を行うまでに一定の猶予期間を与えるアクセサリです。その間であれば、そのファイル ク上から完全に削除します。すなわち、使う人が削除の指定を行ってから、実際に削除処 ゴミ収集車は、使う人が削除したファイルを一時的に保管し、一定時間経過後にディス 7. 5 ゴミ収集車の使い方 らです。 まうと、使う人の設定した時間よりも早くそのファイルを削除してしまう可能性があるか 、、より前の時刻 " とするのは、同じ時刻に作成・更新されたファイルも削除対象にしてし 更新時を持つ場合には、そのファイルを削除します。 日を持ち、かっ、変数「 trushtime 」、すなわち削除対象となる時刻より前のタイム作成・ 戻して、ゴミ置場ディレクトリと収集対象ファイルの指定を行う必要があります。 ゴミ収集車はアイコンの状態で起動します。はじめて起動した場合には、元のサイズに はじめて起動したときに行うこと
222 第・二部 5 テキスト整形美男 設定した桁数 文字列のバイト数 前回の禁則処理で対象にした文字列の 次の文字位置 LenB ( Mid$ ( nextline, (t)) < keta ↑ テキストファイルから読み出した 1 行分の文字列 指定文字列の指定位置以 降の文字列 つまりは、禁則処理の対象後の文字列が指定桁数よりも長い間は、間の処理を繰り返す ということになります。 指定桁数以上になるように、文字列を取り出す Do UntiI LenB(Mid$(nextIine, st, 10 ) ) > = keta lo = 10 十 1 LOOP nowline = Mid$ (nextline, st, lo) グローバル変数「 lo 」に 1 を加えながら、 Do Until ~ Loop ステートメントを、取り出し た文字列が指定桁数以上になるまで繰り返します。 設定した桁数 文字列のバイト数 前回の禁則処理で対象にした文字列の 次の文字位置 LenB ( Mid$ ( nextline, st, (o)) > = keta ↑ テキストファイルから読み出した 1 行分の文字列 指定文字列の指定位置以降の指定文字 数分の文字列 条件に合った文字数がわかったら、 Do UntiIæLoop ステートメントによる繰り返しを 終え、同し関数式を使って、グローバル変数「 n 。 wline 」にその文字列を代入します。 0 その文字は行末禁則文字か ? If gyomatu (Right$ (be, 1 ) ) = False Then 指定文字数
32 第二部 ノゴミ収集車 が変数に割り当てられているため、変数名を使うだけでフォームをロード・表示すること ができます。 「 f(y) . Show 」は、配列変数「 f 」を使って、「 form_home 」という Name プロバティを持 つ、次のような家フォームを画面に表示するコードです。カウンターとして使用している 変数「 y 」が 50 に達するまでは何度でも実行可能です。つまり、家フォームは最大 50 個ま で開けるということです。なお、 Show は、フォームを画面に表示するためのメソッドで す。 sample. txf p 「 ojectl.mak. forml . frrn を b2f3b. p 。、 "vb2c3b. 加P、 ~ Vb2919. tmp 、 ~ vb2 日 19. p : 、 "vbl 921 .trnp: vb0d3b. trnp„ ・フォーム配列変数「 f 」のもとになるフォーム「 f 。 rmhome 」 リ se 「 . 「 指定された時間に、ゴミ置き場ティレクトリのゴミ ( 不要ファイル ) を す。 メインフォームの 3 D パネルに表示されているパスをそのまま代入するようにしていま フォームの Caption プロバティ、すなわちタイトルバーのタイトルを指定するものです。 「 f(y) . Caption = panel 3 d_taisyo. Caption 」は、フォーム配列変数「 f ( y ) 」で表される trushyear = Year (Now) trushmonth = Month(Now) trushday = Day(Now) 0 ushhour = Hour(Now) ' 現在の日時を調べる Then Exit Sub If trushdir ' ゴミ置場ディレクトリがまだ設定されていない場合には、即座に処理を中止する Dim trushyear, trushmonth, trushday, trushhour, kurisage Sub Timer syusyu Timer ( ) 1 . 4.2 なお、このコードは Timer イベントによって、一定時間ごとに実行されます。 で実現しています。 インフォーム (formmain. frm) のタイマーのコントロールを使った、次のようなコード ゴミ置場ディレクトリに移動した不要ファイルを、ディスク上から削除する処理は、 削除する メ
2 ノ レ方 , のコントロ ーノレ 〇色の設定 ・色の設定を行うダイアログボックス ( Action = 3 ) 基本色旧 ) : 靄ロロロロ細 0 ロロロロ 0 0 ■ロロ 0 ■ 20 ロ 0 ロロロロ 0 ロ 0 00000000 ロ 0 ロ 00 ロ 0 ロ 作成した色 0 : ロロロロロ朝■ 000 ・■ 00 色の設定 〇フォントの指定 ・フォントの指定を行うダイアログボックス ( Action = 4 ) フォントの指定 ス鼾ル (Y) : 標準 リ叨 市、、一ルド、 市、、 - ルド、個リ ) ト名旧 : 3 m 3ystem OK キャ ) セル 石ー第 -0 Te 「「 Tirnes New RO 「旧 n VFO NT Win din s 文字飾り ロ取り消し線圓 口下線 ( IJ ) サンプル Aa ああアア亜宇 里
126 第二部 ノゴミ収集車 ・ MousePointe 「プロバティ MousePointer プロバティにより、マウスポインタの形状を砂時計やクロスなどに変える ことができます。 〇管理下にある不要ファイルの削除時間を指定する下部のフレー乙の目的 このフレームは不要ファイルの削除時間を指定するためのものです。ガイド的なラベル の他に、スピンボタンと 3 D パネルで成り立っています。スピンボタンと 3 D パネルを 関連付け、スピンボタンがクリックされるたびに、 3 D パネルに表示される値が変わるよ うにします。現状ではキーポードからの入力を受け付けられないようになっていますが、 3 D パネルをテキストボックスに変更すれば、それも可能になります。 反映させることなく無効にして、設定フォームを閉じるたけのものです。 〇 3 D コマンドボタン「中止」の目的 反映させるものです。 〇 3 D コマンドボタン「設定」の目的 これは、その名のとおり、フォーム内の二つのフレームで指定したものをゴミ収集車に これは、その名のとおり、フォーム内の二つのフレームで指定したものをゴミ収集車に ドライプリストボックスディレクトリリストボックス ・既存のディレクトリを選択するための選択フォーム 既存ティレクトリ選択フォーム ( fo 「 m alr.f 「 m) vb ゴミ置場を選択 3D コマンドボタン ロ setu kif 決定 0 s 回 e ま icons 、ン ます。 たパスが、設定フォーム上部のフレーム内のテキストボックスに反映されるにようになり 示されるフォームです。ドライプリストボックスやディレクトリリストボックスで選択し 設定フォームの「既存のドライプ & ディレクトリを選択」ボタンをクリックしたときに表
第一部石プログラムの実行過程を追う 変数の値をチェックする 変数には、主に次のデータ型があり、 〇整数型 (lnteger) それぞれ宣言時に指定します。 ー 32 , 768 ~ 32 , 768 の範囲の数値を扱えます。一般的な数値型の変数です。 〇長整数型 ( Long ) ー 2 , 147 , 483 , 648 ~ 2 , 147 , 483 , 647 の範囲の数値を扱えます。整数型では足りない数値 ・テータ型 は、このタイプの変数の方が扱いやすいでしよう。 数値でも文字列でもどちらでも取り込むことのできる便利な変数です。慣れないうち 〇ハリアント型 (Variant) 文字列を約 65 , 500 文字まで扱えます。 〇文字列型 (String) を扱う場合に使用します。 ンドウが表示されます。 ツールバーの国によるプログラムのデバッグを開始すると、次のようなデバッグウィ テパッグウインドウを使って、変数の値を確認する で値を確認することになります。 しかし、変数の値はコードの流れを目で追うだけでは判別できません。次のような方法 た値が人っていないことも考えられます。 こうした変数に想定し 思い描いていたとおりの処理が行われないときの原因としては、 す。 また、データにいろいろな型があるのは、メモリ効率や速度の向上をはかるためで ます。 ble) 、通貨型 (Currency) がありますが、使い方がやさしくないのでここでは省略し データ型には、他に単精度浮動小数点数型 ( Single ) と倍精度浮動小数点数型 ( D 。 u -
3 コードの記述 コモンダイアログを使うと、 Windows でよく見られる次のようなダイアログボックス 〇コモンタイアログを使ってファイル名を得る のリスト番号を利用することで、ファイル名を表します。 は、現在選択されているファイル名のリスト番号を表すものです。 List プロバティはそ ・コモンダイアログで利用できるダイアログボックスの一つ に対する処理はコードとして別に記述することになります。 フェースを良くするためのもので、ファイル名を取得することが主な目的です。 ァイル名を指定したとしても、そのままファイルを開けるわけではありません。インター このダイアログボックスはコモンダイアログで利用できるものの一つですが、 を利用してファイル名を取得することができます。 ファイル これでフ 89 ファイル名 ( N ) : constant. h constant. ctrlr ef. h 『 de 「 no. exe 「 ncirnmp. dr 「 n 「叩 . 引 oemsetup. inf ackin 」 st ファイルの類 ( T ) : AII FiIes は . * ) ファイルを開。 ( デイしクトリ (D) : d:*vcp 住 d : ¥ Bvcp ロ bitmaps ロ metafile ロ vbsample ドライÜ(V) : ÖK 社 ) セル 口上書き禁止 ( R ) 例 コモンダイアログの CMDiaIog1 コントロールを使ってファイル名を取得する On Error Resume Next CMDiaIog. Flags = OFN OVERWRITEPROMPT Or OFN PATHMUSTEXIST 三→ Or OFNFILEMUSTEXIST CMDialog 1. Action = 1 If Err Then Exit Sub Open CMDiaIog 1. FileName For lnput As # 1 ファイルを開くコードに使っています。 2 行目の FIags プロバティに割り当ててい こでは、テキスト スを使って指定したファイル名です。フルバスで得ています。 ポックスになります。最終行の FileName プロバティは、そのダイアログボック ーンを指定するものです。「 1 」を指定すると、「ファイルを開く」ためのダイアログ Action プロバティは、コモンダイアログで利用するダイアログボックスのパタ