第11回:簡単メモ帳を作ろう その3



フォームのリサイズ

Formのサイズを変更したとき今のままではテキストボックスは小さいままです。
そこでFormのサイズ変更にあわせてサイズが変わるようにします。

オブジェクトのサイズを変更するにはHeight,Widthプロパティを
直接指定する方法もありますが、それよりもMoveメソッド
利用する方が簡単かつ高速にサイズ変更ができます。

Private Sub Form_Resize()
  txtMain.Move 0,0,Me.ScaleWidth,Me.ScaleHeight
End Sub
frmMainのサイズが変わったとき
txtMainのLeft=0,Top=0,Width=frmMainのWidth,
Height=frmMainのHeightにします。


必要最低限の機能

普段使うようなメモ帳としてはどのような機能が必要になるでしょうか?
とりあえず最低限必要そうなものを下にまとめてみました。
ファイル編集ヘルプ
新規作成
開く
上書き保存
名前を付けて保存
終了
元に戻す
切り取り
コピー
貼り付け
削除
全て選択
バージョン情報


メニューを作る

せっかく機能を充実させるのに今のボタンでは格好悪いし場所もとります。
そこでメニューをつけてみようと思います。
メニューを作るにはメニューエディタを使います。
「ツール」→「メニューエディタ」または”Ctrl+E”でメニューエディタを開きます。
メニューエディタのイメージ

入力の仕方は上の図でわかるでしょうか?
まず「キャプション」に表示される文字を入力します。
(&N)はキーボードから項目にアクセスするためのもので
AltキーとFを押せば「メニュー」が開きます。
(わからない場合は実際にやってみて下さい)
ちなみに区切りの線はハイフン(−)を1個入力します。

名前のところには、コードでメニューアイテムにアクセスするときに使われる
コントロール名です。(区切り線にも名前は必要です)
またサブメニューは「」を押して一段右にずらしてから入力します。

ここでは下のようにメニューを設定します。
(「サブ」はサブメニューの意味)
キャプション名前ショートカット階層
ファイル(&F)mnuFile  
新規作成(&N)mnuNew サブ
開く(&O)mnuOpen サブ
名前を付けて保存(&A)mnuSaveAs サブ
保存(&S)mnuSaveCtrl+Sサブ
-mnu1 サブ
終了(&E)mnuEnd サブ
編集(&E)mnuEdit  
やり直し(&U)mnuUndo サブ
-mnu2 サブ
切り取り(&T)mnuCut サブ
コピー(&C)mnuCopy サブ
貼り付け(&P)mnuPaste サブ
削除(&D)mnuDel サブ
-mnu3 サブ
すべて選択(&A)mnuAll サブ
ヘルプ(&H)mnuHelp  
バージョン情報(&V)mnuVer サブ



「編集」から手をつける

まずは「元に戻す」ですが、これにはSendKeysステートメントを使います。
これはショートカットキーの操作をプログラム上で実行する方法です。
Windowsにはいくつものショートカットキーが設定されているのでそれを利用します。

「元に戻す」なので利用するのは[Ctrl]+[z]です。
Private Sub mnuUndo_Click()
  txtMain.SetFocus
  SendKeys "^z"
End Sub
「元に戻す」を押したとき
フォーカスをテキストボックスに移して
[Ctrl]+[z]で「元に戻す」を実行します。

他のものについてもSendKeysを使うと簡単に編集機能を実装できますが、
ここではあえて別の方法でやってみます。
そうすることでどうなっているか分かってもらえると思います。
(「元に戻す」はちょっと面倒くさくなるのでSendKeyを使いました)

「切り取り」「コピー」「貼り付け」の3つには クリップボードコントロールを使用します。
クリップボードコントロールには「SetText」「GetText」「Clesr」の各メソッドがあります。
それぞれクリップボードの「文字を設定」「文字を取得」「情報を消去」します。
またテキストボックスの選択された文字は「SelText」で取得します。

細かい説明は実際のコードを見ながらしていきましょう。
Private Sub mnuCut_Click()
  Clipboard.Clear
  Clipboard.SetText txtMain.SelText
  txtMain.SelText = ""
End Sub
「切り取り」を押したとき
クリップボードにあった情報を消去し、
選んだ文字(文字列)をクリップボードに設定、
テキストボックスの文字を消去します。
Private Sub mnuCopy_Click()
  Clipboard.Clear
  Clipboard.SetText txtMain.SelText
End Sub
「コピー」を押したとき
クリップボードにあった情報を消去し、
選んだ文字(文字列)をクリップボードに設定、
テキストボックスの文字は消去しません。
Private Sub mnuPaste_Click()
  txtMain.SelText = Clipboard.GetText
End Sub
「貼り付け」を押したとき
テキストボックスにクリップボードにあった文字が入ります。
Private Sub mnuCut_Del()
  txtMain.SelText = ""
End Sub
「削除」を押したとき
選択した文字を""(空の文字列)に置き換えます。
Private Sub mnuCut_All()
  txtMain.SelStart = 0
  txtMain.SelLength = Len(txtMain.Text)
End Sub
「全てを選択」を押したとき
選択する文字の始めを0,選択する長さを
文字の長さにします。

これで「編集」メニューは終わりです。
「ファイル」の方はこれまでの内容を生かせば何とかなるでしょう。

「新規作成」の際にはtxtMain.text=""とすればいいのですが
このままでは書きかけの文書が保存されません。
「開く」や「終了」も同じですね

また「編集」メニューも改良の余地はまだまだたくさんあります。
例えばクリップボードに情報がなければ「貼り付け」を使えなくする、
文字が選択されてなければ「切り取り」「コピー」を使えなくする、
などいろいろあります。


表紙へ
Copyright(C) 1998-2000 カジ