● エディットボックスの変更状態を取得・設定する ●

テキストエディタを作るなら知ってなきゃね。

メモ帳で文字列を書いて保存せずに終了しようとすると、保存するかどうかメッセージボックスが表示されますね。これを出さないようにするにはどうすればいいのでしょうか。自分でテキストエディタを作るのであれば、フラグを設定して、文字列が編集されたら True、そうでないなら False というようにして判断できるのですが、ここではメモ帳を遠隔操作しようという試みなので、フラグを設定できません。「どうせ、SendMessage でできるんだろ、さっさとやれよ」とお思いのあなた、実は大正解です。以下のようにすればいいのです。

  Call SendMessage(hEditbox, EM_SETMODIFY, 1, ByVal 0&)  '変更されていない
  Call SendMessage(hEditbox, EM_SETMODIFY, 0, ByVal 0&)  '変更されている

文字列操作後、終了しても保存するかの確認メッセージボックスを出さないようにするには、上のコードを書けばいいのです。下のケースを使うのは希であると思われます。そろそろ関数を書いてみましょう。

Private Const EM_SETMODIFY = &HB9  'エディットボックスの変更フラグを設定する

'----------------------------------------------------------------
' 関数名 : SetModify
' 機能 : エディットボックスの変更フラグを設定する
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
'      (in) vMode … 0…変更されていない(リセット)
'               1…変更された
' 戻り値 : なし
'----------------------------------------------------------------
Public Sub SetModify(ByVal hEditbox As Long, ByVal vMode As Long)

  Call SendMessage(hEditbox, EM_SETMODIFY, vMode, ByVal 0&)

End Sub

今度は、メモ帳の内容は変更されているか取得する関数を書いてみましょう。なあに、簡単です。世の中、表があれば裏もある、左があれば右がある、EM_SETMODIFY があれば EM_GETMODIFY もある。ということで関数は以下の通り。

Private Const EM_SETMODIFY = &HB8  'エディットボックスが変更されたかを知る

'----------------------------------------------------------------
' 関数名 : GetModify
' 機能 : エディットボックスが変更されたか調べる
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : 0…変更されていない 1…変更された
'----------------------------------------------------------------
Public Sub GetModify(ByVal hEditbox As Long) As Long

  GetModify = SendMessage(hEditbox, EM_GETMODIFY, 0&, ByVal 0&)

End Sub

メモ帳を遠隔操作するうえでは、この関数は使用用途がないですね。


[ インデックスページへ  |  前のページへ  |  次のページへ ]