DIagram CONstructer : DICON ver1.7
種類 :簡易ドローツール
対象OS:Windows95,WindowsNT4.0以降
作者 :へげもん (Niftyserve ID : PXS07714)
開発コードネーム:Nerima
登録日:1997年11月3日(文化の日) Ver1.0
登録日:1997年11月10日 Ver1.1
登録日:1997年11月24日(勤労感謝の日)Ver1.3
登録日:1997年12月07日 Ver1.5
登録日:1997年12月30日 Ver1.6
登録日:1998年02月08日 Ver1.7

ダウンロード(Zip形式)
DLLあり(783KB)
本体のみ(38KB)
全ソース(61KB)
戻る

■ 重要な変更

 Ver1.0とそれ以降のDICONでは、ファイルのフォーマットが大きく変わってしまいました。そのため、1.0で作成したファイルを1.1以降のDICONで読み込むことができません。
 もし、どうしても古いフォーマットのデータを読ませたいという方がおりましたら、サポート会議室 FPROGPRO MES6 「OOについて議論する」にて発言してください。変換ツールを提供します。

■ はじめに
 DICONとは、ダイアグラムを書くために適した簡易ドローツールです。ここでいうダイアグラムとは、文字列や短い文章の入った四角形を線でつないで、処理の流れや関係などをあらわすような図のことを示します。
 この手のツールとしては市販のもので安くて使いやすいものがたくさん出回っていますが、DICONの特徴は描いた図をプレーンテキストに「印刷」できる点です。たとえば、以下はDICONのクラス図を描いたものです。

                +-----------+                                               
                |CNerimaDoc |                                               
                +-----<>----+                                               
                      |                                                     
             +--------+--------+                                            
             |                 |                                            
       +-----+-----+           |                                            
       |CNerimaView|   +-------|-------- Persistent classes ---------------+
       +-----<>----+   |       |                                           |
             | view    |       V  +---------->--------+                    |
        tool |         |       |  |                   | selected           |
        +----+---+     |    +--+--++            +-----*---+ paernt         |
        |DrawTool+--->------+Sheet <>-----------* DrawObj O---<---+        |
        +----+---+     |    +---+--+            +-O--+--+-+       |        |
             |         |        |             obj |  |  |         |        |
             A         |        +------------>----+  A  +---------+        |
             |         |                             |                     |
     +-------+------+  |                             |                     |
     |              |  |       +-----------+---------+--------+            |
+----+-----+        +  |       |           |                  |            |
|SelectTool|       ... |       |           |      connects +--+--+         |
+----------+           |       |           |   +-------->--* Dot |         |
                       |       |           |   |           +--+--+         |
                       |       |           |   |              |            |
                       |       |           |   |              A            |
                       |       |           |   |              |            |
                       |    +--+--+      +-+---++      +------+----+ link  |
                       |    | Box <>-----* Line <>-----* LinkPoint O--<--+ |
                       |    +--+--+      +------+      +--------+--+     | |
                       |       |                                |        | |
                       |       A                                +--------+ |
                       |       |                                           |
                       |  +----+---+                                       |
                       |  | StrBox |                                       |
                       |  +--------+                                       |
                       +---------------------------------------------------+

 このようにテキストへ出力すれば、電子メールなどに取り込んでやり取りすることができます。なにより、相手が同じソフトを持っているかどうかを気にする必要がありません。

■インストール

 特にインストールプログラムはありません。適当なディレクトリに以下の3本のファイルを置いておけば、DICONのインストールは完了です。

dicon.exeDICONの本体プログラム
o2psepr.dllPSE Proのタイナミックリンクライブラリ(以後、DLL)
osmfc.dllPSE Pro向け改変MFCのDLL

 あとは、dicon.exeをデスクトップなどにドラッグし、ショートカットを作っておけば便利でしょう。
 ただ、DLLに関しては、今後も同じDLLを使用したソフトを作っていきたいと考えていますので、Pathのとおっているディレクトリに置いたほうがよいでしょう。

 また、このソフトはマイクロソフトファウンデーションライブラリを使用していますので、下記のDLLがWindowsのシステムディレクトリに無いと動作しません。

MFC42.DLL MSVCIRT.DLL
 このDLLが通常置かれる場所は、OSによって多少異なります。

Windows95の場合

\Windows\system

WindowsNTの場合

\Winnt\system32

 どちらも、WindowsやWinntの部分は、OSのインストール時にユーザが指定した場所になります。

■画面説明
 起動すると、下記のようなウィンドウが開きます。

 使用法は、Winodowsの標準的なインターフェイスに準じています。上段のツールバーはおなじみのものですから、左端のほうを説明します。

「移」 移動ツール
 画面上に置かれた図形をドラッグして移動したり、四角形などの大きさを変えたりするためのツールです。

「点」 点ツール
 画面に点を打つためのツールです。点といっても、形状を変えることでいろいろな表現ができます。

「線」 線ツール
 縦横線の描画を行うツールです。縦横線を組み合わせて折れ線を表示することもできます。

「枠」 枠ツール
 画面上をドラッグすることで、四角い枠を表示します。

「字」 文字枠ツール
 内部に文字を入れることのできる枠を表示します。文字数によって、自動的にサイズが伸び縮みします。

「復」 復帰(Undo)ツール
 それまで行った操作を取り消します。続けて行うことで、操作のバッファに残っている限りの操作を取り消すことができます。バッファサイズは、とりあえず256回分用意しましたが、全部使い切ったことはさすがにありませんので未確認です。

「再」 再実行(Redo)ツール
 復帰で取り消した操作を再度実行します。
 Ver1.1で、ようやく動くようになりました。\(^o^)/

「上」「下」 優先順位変更ツール
 図形を選択する時の優先順位を変更できます。「上」を押すと選択した図形を図面の一番手前に持っていきます。また、「下」を押すと一番置くに持っていきます。
 大きな四角形などで操作したい図形が隠されてしまった場合などに役立ちます。

「削」 削除ツール
 画面上で選択されている図形を削除します。

■使い方

 各図形ツールで図形を画面に置き、移動ツールで位置や大きさを変更できます。

・点ツール
 画面上をクリックすることで点が打てます。点の形状は、デフォルトでは白丸となっています。これは右クリックで「端点選択」ダイアログを表示し、切り替えることができます。このダイアログは、どのツールを選んでいても、画面上の「点」の上で右クリックすれば開くことができます。
 点はまた、直線の上に張りつけることができます。この時、直線を移動すれば点もいっしょに移動します。

・線ツール
 画面をドラッグすることで線が引けます。この時、マウスの移動量が縦横どちらが多いかによって、縦線と横線が切り替わります。
 直線は、その両端に端点を持っています。この部分を右クリックすることで「端点選択」ダイアログを開くことができます。

・枠ツール
 画面をドラッグすることで四角形が描けます。

・文字枠ツール
 画面上を左クリックすると「文字入力」ダイアログが開き、文字を入力することができます。このダイアログも、どのツールを選んでいても文字枠の上で右クリックをすれば開くことができます。
 文字入力ダイアログは複数行に対応しています。また、文字の周囲の枠の表示をON/OFFしたり、文字を枠の中で「左」「中央」「右」にそろえることも出来ます

 以上の4つがDICONの基本的図形です。これらの組み合わせでいろいろな図を描く事ができます。

・移動ツール
 図形の位置やサイズを調整するために使用します。図形を左クリックで選択すると、四角形の四隅や直線の端点に青い四角形が表示されます。この部分をドラッグすることで、サイズを変更することができます。選ばれた端点や直線は、特に赤い色で表示されます。
 直線は、縦線と横線で振る舞いが異なります。

縦線:横方向に移動可能、縦方向の移動は無視。サイズの変更は縦のみ。
横線:縦方向に移動可能、横方向の移動は蒸し。サイズの変更は横のみ。
また、直線は端点同士で結合させることができます。結合した部分の端点をドラッグすると、結合した両方の直線の長さや位置が変化します。
 さらに、直線の端点は他の直線に接続することができます。これによって、T字型の線も書くことができます。この時、片方の線を移動すれば、他方の線も伸び縮みします。
 四角形は4本の直線によってできていますので、その4辺に直線を接続することができます。
 もう一つ、図形の無い部分でドラッグすると、選択用の伸縮枠が表示され、この枠の中に囲まれた図形すべてを選択することができます。これによって、複数の図形を一度に移動したり、削除することができます。

 Ver1.5で、枠の内部が中抜きになり、左クリックで枠全体が選べなくなりました。そのためには、Shiftキーを押しながら左クリックしてください。

■サポートなどに関して
 このソフトは、オブジェクト指向開発の実例のつもりで始めたのですが、完成までにえらく時期があいてしまったため、資料となるようなドキュメントはほとんどありません。その代わり、ソースリストなどは近いうちに公開する予定です。
 このソフトに対する質問や要望、バグリポートなどは、Niftyserveのプログラマーズフォーラム(FPROGPRO)の6番会議室「OOについて議論する」(通称:OOのアジト)にて行う予定です。
 DICONは、この会議室での対話の中から生まれてきました。いってみれば、ふるさとのようなものです。

■ObjectStore PSEについて
 このソフトでは、図形オブジェクトの格納にオブジェクトデザイン社が提供しているObjectStore PSE Pro for C++を使用しています。これによって、オブジェクトの保存や読み出しのためのコードが一切必要なくなったため、きわめてシンプルかつ高速なプログラムが可能となりました。
 PSEとは、Persistent Storage Engineの略で、メモリ上にあるオブジェクトをそのままの形でディスク上に保管し、別なプログラムに読み込むことを可能にする、簡易型のオブジェクト指向データベースです。

 PSE Pro は有料のライブラリですが、これにはフリーウェア版の PSE もあります。Undo/Redoの機能が無いなど、若干の制限はありますが、こちらも強力なライブラリです。
 また、このほかにはPSEにはJava版とActiveX版があります。機会があれば、DICONもこれらへの移植に挑戦したいと思います。

 各種PSEは、オブジェクトデザイン・ジャパンのホームページからダウンロードが可能です。Proのみは有料ですが、それ以外はどれも無料でダウンロードできます。DICONのソースリストは、修正なしでPSE(Proでない)でもコンパイル・実行が可能なので、ソースリストを公開した暁には、試してみてください。また、このDICON自体も、ここからダウンロードできるようにする予定です。
 URLは下記のとおりです。

http://www.odj.co.jp

■■Ver1.7での変更点

・複数選択時の削除

複数選択時に削除を行うと、落ちることがありましたが、修正しました。

・線上の点の移動
線上の点(継承の三角とか矢印など)を移動して、線からはずしてしまうと、 消滅してしまっていましたが、消えないように修正しました。 ・・・したようです。(記憶に無い(^^;)

・テキスト印刷とクリップボード印刷の分離
Tucker!さんからの要望で、この2つの機能を分離しました。メニュー項目と ツールバーのボタンがどちらも2つに別れています。

■Ver1.6での変更点

・カット/コピー & ペースト機能の追加

長らく飾りのままだった、カット/コピー & ペーストのボタンが機能する ようになりました。 ただし、こちらはクリップボードに対応していません。コピーできるのは、 同一プロセス内のみです。MDIで複数のDCNファイルを開いて、その間でコピ ーする事はできますが、複数のDICONを起動して、その間でコピーすること はできません。

・優先順位変更のバグ修正
図形を選択する際に優先順位を上位に持ってくる部分のアルゴリズムを修正 しました。その結果、これまで勝手に優先順位が変わってしまう場合があっ たバグが修正されました。

■Ver1.5での変更点
 さらに下記の点が改良されました。

・Boxが中抜きになった

これまではBoxの内部はどこをクリックしても選択されましたが、このバー ジョンからは枠だけが反応します。が、これではBox全体を移動できないの で、Shiftキーを押しながらクリックするとBox全体が選ばれるように修正 しました。

・クローズ時の保存の確認
開いた図面を修正して、保存せずに閉じようとしたとき、保存するかどうか のメッセージが出るようにしました。

■Ver1.3での変更点
 すでにバグは無いことになってますが、下記の点が改良されました。

・部分書き換え

図の更新された部分だけを描きかえるのでちらつかない。
・直線の移動後の連結チェック
直線が他の図形に連動して移動したときも、連結相手とまだつながっているかを チェックし、外れていたら接続を切る。

■Ver1.1で除いたバグ
 下記のバグが修正されました。

・MDIにならない(複数のDBを同時に開くとエラーになって落ちる)
・選択した図形が戻らない
・再実行(Redo)ができない
・図を選択したままUndoするとおかしくなる

■既知のバグ
 さて、公開直後にしてすでに、いくつかのバグが見つかっています。とりあえずは このリストを見て、地雷原をよけてください。

・パス名に日本語が使えない

 ファイル名に日本語を使った場合など、保存に失敗したまま閉じてしまうケースが 報告されています。(From T's-NEKOさん)
 これはPSEの扱うパス名が、日本語に対応していないためです。現状では回避の方法 がありません。ご了承ください。

・カット&ペースト、コピー&ペーストができない
 ごめんなさい。間に合いませんでした。m(_ _)m
 Ver2.0には追加しますのでご勘弁を。

・プログラム終了時に、保存の確認が出ない(修正済み)
 忘れてました。
 作業結果を一気に失ってしまうのでご注意を。
# 変更したら、自分で修正フラグを立てないと行けなかったのね。

・MDIにならない(修正済み)
 DICONは、一応MDIの形態を取っています。MDIとは、複数の子ウィンドウを開いて、 別々な文書を同時に編集できる、WordやExcelでおなじみのあの様式です。が、手を 抜いてデータベースのトランザクションをグローバルのままで行っているため、複 数のWindowを開いたときに妙な動きをすることがあります。
 特に、その状態で「保存」をしてしまうと、何がどうなるかよく分からないので、 決してやらないでください。
 次のバージョンでは修正する予定ですが、とりあえずはSDIだと思ってお使いくだ さい。
# 直接の原因は不明ですが、自作のListクラスからプール・アロケーション機能
# を取り除いたらうまく動きました。(^^;

・選択した図形が戻らない(修正済み)
 移動ツールでツールを選択し、青い四角形が出た状態で別な操作を行うと、別な 図形を選択しても元の図形が選択されたままの状態になってしまうことがあります。 動作自体に支障はありませんが、目障りだというときは、もう一度その図形を選択 してください。
 また、選択した状態のままでセーブしてしまうと、やはり同様ことになります。 ご注意を。

・再実行(Redo)ができない(修正済み)
 できるはずなんですが・・・なぜだろう?(--;
 PSE Proのサンプルプログラムではできているのに。
# 原因は自作のList&Cursorクラスでした。(^^;