テキスト限定ちょこ書きソフト=ホワイトボード

ソフト開発 VB エクセル

ウィンドウズには、「付箋」というソフトが付いています。一見便利なのですが、困ったのは、

  • 新しい付箋を作るのは簡単です
  • 調子に乗っているうちに、付箋がどんどん増える
  • それを削除するのは、一つずつしかできない
  • まとめて削除できないので、たくさん作った付箋にうんざりしてしまう

ちょっとしたメモに使いたい、という目的にとっては立派すぎるのです。

パソコンのホワイトボード

磁石で貼り付けるホワイトボードは、私の愛用品です。それが好きなのは、

  • 簡単に書ける
  • 視線を動かすだけで、すぐ見える
  • 簡単に消せる

という点にあります。こうしたものがパソコンにも、あったら良いですね。

長文で保存したいものは、テキストとして保存したら良いのです、ちょっと書いて、すぐ消せる、そういうものがあったら良いな、と思って、「じゃ、作ってしまえ」で、作りました。

例えば、PDFファイルで、ロックされたものがあります。簡単にコピーできません。そういう時には、必要部分をメモ打ちして、そのメモしたものをコピーして、他で使いたい、と思ったりします。そうした時は、エディタを開くのももどかしく、もっと軽くて小さい、ちょこっと書けるものがあればなあ、と思ってきたものです。

そうした時に、このホワイトボードは役立ちます。

また、ふと思いついたアイデア、用事、ちょっとしたメモ、に使えます。磁石で貼り付けるホワイトボードと、うまく使い分けしたら良いと思います。

4つのテキストボックスでホワイトボード

4つのテキストボックスだけです。スクロールバーが一応ありますが、ソフトを軽くするために、文字数は、256文字までと、制限しています。制限数になると、それ以上打てなくなります。狭くて困る場合には、テキストエディタなどをお使いください。

ソフト、ホワイトボードの起動画面

スクロールバーは、ホワイトボードとしては邪魔なだけと思いますが、まさかの時のために、付けています。改行をうまく使えば、テキストボックス1つに、スクロールなしに、3つくらいの項目を書けると思います。

テキストボックスの背景色、フォントを変えていますので、気分に合わせて、4つのエリアを使い分けできます。

なお、当初は、テキストボックスの文字数を256字に限定していましたが、尻切れしてしまうので、無限定(といっても何十億が限界らしい)に、変更しました。変更しても、メモリ使用量は4.8MBから4.9MBにしか増えません(ほぼ空の状態で)。(2023/11/15)

テキスト、ウインドウ位置を保存

ホワイトボードを閉じても、テキストボックスの内容とウインドウ位置は保存されます。次に起動した時には、同じ位置に、同じ内容で表示されます。

右クリックメニューに、「消去」と「全体をコピー」、があります。

ホワイトボードの右クリックメニュー

たったこれだけのものです。意外と便利です。

ただ、残念なことに、起動するまでの時間が、かなりかかります。スタートアップにショートカットをいれておいて、常駐させておくと便利です。

ウインドウ最前面に

ウインドウが、最前面のままの状態だと便利なことがあるので、最初は最前面にしました。追加された右クリックメニューで、解除もできます。(2023/11/15)

ウインドウ最前面を解除メニュー

最前面を解除すると、右クリックメニューも、ウインドウ最前面に変わります。これをクリックで、再度、最前面にできます。

「ホワイトボード」 のダウンロード

zipファイルです。解凍すると、whiteboardフォルダーには、

ダウンロードしたファイル

のようにファイルが入っています。適当な場所に置いて、ホワイトボード=whiteboard.exe をダブルクリックし、起動してください。このページへのリンクも入っていますので、分からなくなったら、ここにお越しください。

ダウンロードの際に、次のような警告が出ます。^で、継続、ダウンロードした上で、

ダウンロードの際に出る警告

アンチウイルスソフト(右クリックメニューでMicorsoft Definderなど)でスキャンしてから、お使い下さい。Windows PC 専用のソフトです。

アンチウィルスソフトでスキャンしてください

試してみて、どうだったか、ここをこうしたら良いのではないか、とか、ご意見、ご感想をいただければ幸いです。コメント欄、または「お問い合わせ」からお願いします。

VB.NETのコード

コードは次のようなものです。安心していただけましたら、ダウンロードして、お使いください。

Imports System.ComponentModel

Public Class Form1
    Private Const WINDOWPOS_FILE_NAME = "winpos.txt"
    Private Const SAVETEXT_FILE_NAME = "data.txt"
    Private Const DELIMITTER_STR = "//delimit//"

    Dim tbs() As TextBox
    Dim tbx As TextBox
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        tbs = {TextBox1, TextBox2, TextBox3, TextBox4}
        SetWinPos()
        SetTexts()
        TextBox1.SelectionStart = 0
        TextBox1.SelectionLength = 0
    End Sub
    Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
        WriteWinPos()
        SaveTexts()
    End Sub
    Private Sub SaveTexts()
        Dim n
        Dim sw As New System.IO.StreamWriter(SAVETEXT_FILE_NAME, False) 'Falseは上書き、ファイルがなければ作ってくれる
        For n = 0 To tbs.Count - 1
            sw.WriteLine(tbs(n).Text)
            sw.WriteLine(DELIMITTER_STR)
        Next
        sw.Close()
    End Sub
    Private Sub SetTexts()
        Dim n, t, tbtxt
        If (Not (System.IO.File.Exists(SAVETEXT_FILE_NAME))) Then 'ファイルがなければパス
            Exit Sub
        End If

        Dim sr As New System.IO.StreamReader(SAVETEXT_FILE_NAME)
        tbtxt = ""
        n = 0
        Do Until sr.EndOfStream
            t = CStr(sr.ReadLine())
            If t = DELIMITTER_STR Then
                tbs(n).Text = tbtxt
                tbtxt = ""
                n += 1
                If n >= tbs.Count Then GoTo n_over
            Else
                tbtxt += t
            End If
        Loop
n_over:
        sr.Close()
    End Sub
    Private Sub WriteWinPos()
        If (Me.Left + Me.Top) < -100 Then 'windowsで閉じられたら書かない
            Exit Sub
        End If

        Dim sw As New System.IO.StreamWriter(WINDOWPOS_FILE_NAME, False) 'Falseは上書き、ファイルがなければ作ってくれる
        sw.WriteLine(Me.Left)
        sw.WriteLine(Me.Top)
        sw.Close()
    End Sub
    Private Sub SetWinPos()
        If (Not (System.IO.File.Exists(WINDOWPOS_FILE_NAME))) Then 'ファイルがなければパス
            Exit Sub
        End If

        Dim sr As New System.IO.StreamReader(WINDOWPOS_FILE_NAME)
        Dim l, t As Integer
        t = sr.ReadLine()
        l = sr.ReadLine()
        sr.Close()
        Me.Location = New Point(t, l)
    End Sub
    Private Sub TextBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseDown, TextBox2.MouseDown, TextBox3.MouseDown, TextBox4.MouseDown
        If e.Button = MouseButtons.Right Then
            tbx = sender
        End If
    End Sub
    Private Sub 消去ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 消去ToolStripMenuItem.Click
        If tbx IsNot Nothing Then
            tbx.Text = ""
        End If
        tbx = Nothing
    End Sub
    Private Sub 全体をコピーToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 全体をコピーToolStripMenuItem.Click
        If tbx IsNot Nothing Then
            Clipboard.SetText(tbx.Text)
        End If
        tbx = Nothing
    End Sub
    Private Sub ウインドウ最前面を解除ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ウインドウ最前面を解除ToolStripMenuItem.Click
        If Me.TopMost Then
            Me.TopMost = False
            Me.ウインドウ最前面を解除ToolStripMenuItem.Text = "ウインドウ最前面"
        Else
            Me.TopMost = True
            Me.ウインドウ最前面を解除ToolStripMenuItem.Text = "ウインドウ最前面を解除"
        End If
    End Sub
End Class

コメント