五月一四日、月曜日の話
プログラム一箇所に一日掛り

 ひとつの失敗にどれだけ時間がかかることか。

[◆]Visual Basic 6.0


////////////////////////////////////
    frmMain
////////////////////////////////////

Option Explicit


Private Sub MDIForm_Load()

'子フォームのインスタンス作成? 失敗しているような。
Dim newForm As New frmEdit

'タイトル表示
App.Title = "VBテキストエディタ"
frmMain.Caption = App.Title

'子フォーム追加
newForm.Show

End Sub
-----------------------------------------------------------


////////////////////////////////////
    frmEdit
////////////////////////////////////

Option Explicit


Private Sub Form_Load()

'テキストボックスの初期化
txtEdit.Text = ""
txtEdit.Top = 0
txtEdit.Left = 0

'自動に頼らず手動で叩き込み
'frmEdit.ScaleWidth = 6500
'frmEdit.ScaleHeight = 4000

'編集メニュー/切り取り、コピー、検索、置換、文字列変換:初期状態は利用不可に設定。
'txtEdit_Change

End Sub
-----------------------------------------------------------

Private Sub Form_Resize()

'テキストボックスをフォームに合わせる
txtEdit.Width = frmEdit.ScaleWidth
txtEdit.Height = frmEdit.ScaleHeight

End Sub
-----------------------------------------------------------

'■■■■■■■■■■■■■■■■■■■■■■■■■■■■
'メニューファイル
'■■■■■■■■■■■■■■■■■■■■■■■■■■■■

'---------------------------------------------------
'メニューファイル/開く、閉じる
'---------------------------------------------------

Private Sub mnuNew_Click()

'子フォームのインスタンス作成? 失敗しているような。
Dim newForm As New frmEdit

'子フォーム追加>現状の問題:Form_Resize が機能しない。
newForm.Show

End Sub
-----------------------------------------------------------


 上の文が何だと言えば、Visual Basic 6.0 における MDIフォームのソースである。ソースをばっと見せたところで VB6 を使わない人にとっては何のことやら分からないと思うので、手短に言うとする。上のソースには一箇所、間違いがある。

------ 読み飛ばし可 ----------

 上の文は大きい一つのウィンドウの中に小さいウィンドウを何個も抱え込めるアプリの一部である。まあ、文字を書き込むことの出来る窓を開くだけなのであるが、上の文法には間違いがあって正しく起動させることが出来ない。起動時はウィンドウがひとつしか出ないはずなのに二つ生成され、先に生成されたほうはウィンドウのサイズ変更に伴うテキストボックスのサイズ変更が働かない。ステップインで処理の流れを見てみると、Private Sub Form_Resize() において frmEdit.ScaleWidth の値を取得できず、Form_Load から再び読み直しが始まってしまう。なぜ、値を取得できないのかが分からなかった。

------ 読み飛ばし可 ----------

 さて、どこを間違えているのか。僕はこれの答えを見つけることが出来ず、ソースを見せて他の社員の方に尋ねたら、ものの一〇分ぐらいで撃破された。どうやら処理上の問題でフォーム情報が破棄されていたらしい。これを是正するには txtEdit.Width = frmEdit.ScaleWidth、txtEdit.Height = frmEdit.ScaleHeight を txtEdit.Width = Me.ScaleWidth、txtEdit.Height = Me.ScaleHeight とする。Me とはそのソースがあるフォームその物のことを指す。これで frmMain と frmEdit の間のつながりに影響されることなくフォームの複製が可能で……つまりは、うまく起動するということである。

 frmEdit を Me に変えるだけでちゃんと動くものになる。これだけのために八時間もかけた僕のがっくり感はなんともあれだった。しかも、Me を使う、ということに重点を置いて教本を読み直してみたら、ちゃんと変える様に指示してあったりで、つまりは僕自身の怠け心が生んだ失敗だったのである。げぶはぁ。ただ、教本には「変えても変えなくてもいい」みたいなことが書いてあったので、一重に教本は悪くないとも言えまい。変えなかったらどうなるか、ぐらいは説明しておいて欲しいところだ。

 まあ、失敗から学んだものは大きかったように思う。ふてくされてマインスイーパーをやっていたら、少しはすばやく爆弾の位置を認識できるようになった、気がする(仕事しろ)。

[◆]ハデスサーバのうpロダの中身

 先日、2ちゃんねるニュース速報 VIP においてハデスサーバのうpロダ(ファイルアップローダー)のアドレスが利用されているのを発見した、という情報が寄せられて、ウィルスチェック時に流れるファイル名を注視していたら、アップされている ZIP ファイルの中身が連番になっている画像ファイルだらけでくそ笑った。連番になっている画像ファイルなんざ、中身は容易に予想できる。で、実際に中を開いてみたら種類こそ色々あるがカテゴリー的には同じもの、すなわちエロ漫画である。

 まー、誰にでも利用できるうpロダにあげられるファイルなんてこんなもので、まともに広い所で存在を公言していない分、こうした利用はずいぶんと遅かったと言えるだろう。まぁ、涼宮ハルヒのアスキーアート保管庫によってきた人が探索によって見つけただけに過ぎない。

 ふむ、最初期は利用する人がいるかどうかすらわからなかったうpロダだが、利用する人は増えてきているようだ。もう少し整備するかね。