2014年11月4日火曜日

バイナリビューアを作る(1)

暇つぶしとか気分転換を兼ねてバイナリビューワを作り始めました

1日目の作業はこんな感じ

フォームの上下サイズを変更すると表示量が増えます
フォームの左右サイズを変更すると1行に表示できる量が増えます
また0x00を強調して表示する機能を実装しました

既知の不具合としては、スクロールバーの動作がおかしいです
しかしこれはC#側の問題な気もします
しばらくは最低限必要な機能を実装することが重要で、それが終わってから動作確認をすることになると思います
また横幅を変更するとスクロールできる行数も変化しますが、その部分もまだ実装していません

まだ実装していない機能としては、クリックしてカーソルを移動 でしょうか
バイナリエディタではないのでカーソルは必須ではないですが、マーカーとして便利です

他に実装したい機能として、カーソルの位置の表示+オフセットを設定したアドレスの表示
8,16,32,64bitの変数として扱った場合の値の表示
あたりを作りたいと思っています

右側に表示される文字はとりあえずASCIIだけの予定です
文字コードを扱うのは面倒なので


プログラムの作りとしては、上にメニューバー 真ん中にピクチャボックス 右側にスクロールバー という感じです
表示はBitmap Graphicsでリアルタイムに作っています
最終的には必要なときに画像を生成するようにするかもしれませんが、今のところはTimerで一定間隔ごとに作っています
必要なときに生成 の利点はCPUリソースを無駄に浪費しないという点ですが、欠点として「何かイベントがあると必ず呼び出す必要がある」という点があります
チェックボックスを作って、画像生成処理でチェックボックスを参照しているのに、なぜか正常に動作しない と思ったらチェックボックス変化割り込みで画像を更新していない みたいなことが発生する可能性があるわけです


データの読み込みは、一旦全て配列に読み込んでから必要な部分を表示します
なのでデータサイズが数百MBとか数GBになるようなファイルは扱わないほうがいいと思います


現状はこんな感じです
個人的に使いたいだけなので、あまり多機能性は求めませんが、自分が欲しい機能は載せていく予定です
いずれはバイナリエディタ機能も欲しいなぁと思いつつ、メモリ配列の途中にデータを追加って結構面倒なので
ただ表示は中のメモリを表示しているだけなので、置換(上書き)は簡単に実装できる気がします
この辺りはあんまり重要性が高くないのでしばらく放置になると思いますが


とりあえず、表示だけでもまともに動くようになるまでは作り続ける予定です

0 件のコメント:

コメントを投稿