|
ここではファイル管理ではなく、図面管理について考えてみます。1つの図面作成プロジェクトは複数のファイルから構成され、親子関係もあるものと考えます(例:部品図など)。
図面作成の流れとしては、
注文先から注文/納期指示
↓
プロジェクトを作成
↓
図面等の工程表を作成
↓
各図面の製図等
↓
各図面の検図
↓
各図面の承認
↓
各図面の出図
↓
(各図面等の改訂)
↓
全図面等を揃え納品
とします。コスト関連や実際の製造まで考慮に入れると製造工程や外注、納品・在庫管理等まで含んでしまうと思われますが、ここはあくまでも「図面管理」という事でそこまでは考えない事とします。
一度に全部は出来ませんので少しずつ考えてみます。
まずは、誰が製図をするのか、検図をするのか、承認するのか、を記述・管理するために、メンバー用のデータテーブルを作成します。また、メンバーの所属(部課名等)も管理出来たほうがいいと思われますのでそのデータテーブルも作成します。そして、同じ注文先から複数回注文があった場合、注文先の名前を入力する手間を減らすだけでもデータテーブルがあった方が便利になりますので、注文先用のデータテーブルも作成します。作成しておけば後々有効利用出来るかもしれません。
データベース名は「ZUMENDB.FDB」とします。
各テーブルを取りあえず以下のようにします。もっと色々な情報を付けてもいいのですが、後で使わなければさほど意味はないし、記入欄を付けると「絶対に入力しないといけないのか?」と思いがちになるので必要になれば追加すればいいという事にします。(※テーブルを作成した後に、テーブルにフィールド(列)を追加するには、SQL文「ALTER TABLE ADD」を実行する事により可能です。一旦テキストファイルに出力してからテーブルを一旦削除し、新しいフィールドでのテーブルを作成して、テキストファイルから読み込むという事でも可能です。)
テーブル「SECTION」(TABLE1)
名前 | 変数名 | 内容 |
登録番号 | N | 整数 1,2,3,… 他と重複しない |
名称 | SNAME | 文字(最大半角32文字) |
テーブル「MEMBER」(TABLE2)
名前 | 変数名 | 内容 |
登録番号 | N | 整数 1,2,3,… 他と重複しない |
所属 | SN | 整数 「SECTION」の登録番号 |
氏名 | PNAME | 文字(最大半角16文字) |
テーブル「COMPANY」(TABLE3)
名前 | 変数名 | 内容 |
登録番号 | N | 整数 1,2,3,… 他と重複しない |
名称 | CNAME | 文字(最大半角32文字) |
部課名 | BNAME | 文字(最大半角32文字) |
プロジェクト「d018」の準備を行い、「C:\DelphiProgram\jww」フォルダの中に「d018」というフォルダを作成し、Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
タイトル | d018−図面管理 |
[ディレクトリ/条件]頁
パス及びディレクトリ | C:\DelphiProgram\db\d018 |
画面構成は取りあえず下記のようにします。
最初にデータベースの設定を行い、各テーブルの登録を行い、PC利用者名の登録を行います。PC利用者名は先に登録したメンバーテーブルを参照してその中から選択します。
ここまでのソースプログラムを圧縮しています。
各画面やプログラム内容は下記で確認して下さい。
|
プロジェクトは複数扱えるようにしますので、プロジェクトを管理するデータテーブル「ZPROJECT」を作成する事とします。プロジェクトの登録番号からプロジェクト内の各ファイルを管理するテーブルを派生すると考えてテーブル「PRJ_1」「PRJ_2」…のように作成し管理出来るよう考えます。1画面で複数の画面情報を表示する事となりますので、これまでのように画面をShow、ShowModal で表示しても良いのですが、ここでは MDI風にしてみようと思います。MDIアプリケーションを作成する場合は最初に「ファイル」→「新規作成」→「その他」→[プロジェクト]タブの「MDIアプリケーション」を選択すれば初期状態(ツールバーやメニュー等)を自動的に作成してくれるので楽に作成出来ると思います。但しここでは既に上記で作ってしまっているので手作業で行います。
Form1のFormStyleプロパティを「fsMDIForm」にします。そして子になる画面(ウインドウ)のフォームを作成してそのFormStyleプロパティを「fsMDIChild」にします。同じ画面を何個も表示させる事になるので、フォームは動的に作成して表示し、閉じる時にはメモリ解放を行うようにする必要があります。そのためにまずは「プロジェクト」→「オプション」→[フォーム]タブの「自動作成の対象」に入る新しいフォーム Form7 を「選択可能なフォーム」に移します。クリックして選択し[>]ボタンをクリックします。
Form1からこのForm7を開く際には、これまでのように「Form7.Show」や「Form7.ShowModal」のように行うのではなく、
// プロジェクト|新規作成
procedure TForm1.mnuProjectNewClick(Sender: TObject);
var
fm : TForm7 ;
begin
try
fm := TForm7.Create(Application) ;
fm.Show ;
〜〜〜
except
;
end;
end; |
のようにして、このForm7を閉じた時には、メモリを解放させるよう指示する必要があります。
// 閉じた時
procedure TForm7.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree ;
end; |
FreeやReleaseを利用するよりもこの方が簡単ですね。なお、プロジェクト編集は新規作成と画面構成はほとんど同じなので両用出来るよう作ります。新規作成か編集かを示す値を受け渡しますが、Showメソッドで表示する際、フォーム画面が生成・表示されるタイミングはやや遅くなるため直接Form7のPublic宣言の変数に値を渡す事が難しいので外部変数を仲介させています。
データテーブル「ZPROJECT」は取りあえず下記のようにしてみます(※後で変更するかもしれません)。
テーブル「ZPROJECT」(TABLE4)
名前 | 変数名 | 内容 |
登録番号 | N | 整数 1,2,3,… 他と重複しない |
作成者 | MN | 整数 「MEMBER」の登録番号 |
注文先 | CN | 整数 「COMPANY」の登録番号 |
プロジェクト名 | PRNAME | 文字(最大半角32文字) |
表題 | MTITLE | 文字(最大半角80文字) |
副題 | STITLE | 文字(最大半角80文字) |
メモ1 | MEMO1 | 文字(最大半角80文字) |
メモ2 | MEMO2 | 文字(最大半角80文字) |
メモ3 | MEMO3 | 文字(最大半角80文字) |
納期 | NOUKI | 文字(最大半角16文字) |
予定開始日付 | PDATE1 | 文字(半角8文字)yyyymmdd形式 |
予定終了日付 | PDATE2 | 文字(半角8文字)yyyymmdd形式 |
実施開始日付 | DATE1 | 文字(半角8文字)yyyymmdd形式 |
実施終了日付 | DATE2 | 文字(半角8文字)yyyymmdd形式 |
納品日付 | NDATE | 文字(半角8文字)yyyymmdd形式 |
済み | ENDF | 整数2 0:未 1:済 |
次の問題としては、この開始終了日付をどのように表現するか、なのですが、色々な表現方法はあると思いますが(StringGridコンポーネントを利用するとか、カレンダー関係のコンポーネント、Image/PaintBoxコンポーネントを使って自作のグラフを作図する等)、Delphi には Chartコンポーネントというものがあるようなのでこれを利用してみようかと思います。
ここまでのソースプログラムを圧縮しています。
各画面やプログラム内容は下記で確認して下さい。
|
Delphi6Jの[Additonal]内に「Chart」というコンポーネントがあります。チャート、グラフを作図するための機能です。
このコンポーネントを配置し右クリックすると著作権表示がされますが「TeeChart Standard 4.04 (c)1997-2001 by David Berneda」と表示されます。サードパーティ製のコンポーネントは使用ライセンス関連の絡みもありますので確認しておきます。ヘルプを見ると「このソフトウェアの使用にあたり,追加取得が必要なライセンスはありません。」「使用料無料」とありますので安心して利用する事とします。更に機能が欲しい場合には有料版の「Pro」版もあるようです。その他、チャートやグラフ等のコンポーネントを配布・販売している所もありますのでそういったものを利用するのも良いと思います。
この配置したコンポーネントをダブルクリックします。すると以下のような画面が表示されますので、「チャート」内の「系列」内の[追加]をクリックします。
チャートの種類を選択する事が出来ます。
「□3次元」のチェックを外すと2次元になります。
「ガント」を選択して[OK]します。なにも指定せずそのまま閉じると以下のような画面になります。以下は設計時での表示サンプル的な乱数表示です。コンパイルして実行しても下記のような画面は表示されません。
タイトル(画面上「TChart」の部分)と凡例(画面右の枠表示)を表示しないようにしてパネル色を変えてみます。外観は自由にされると良いと思います。
縦軸の数が初期設定の「自動調整」になっていると項目数が多くなった場合に画面上で詰まって見えてしまうので、[チャート]内の[ページ]内の「ページの表示数」を「10」にして、[チャート]内の[軸]内の「スケール」の「□最大/最小の自動調整」のチェックを外し、最大値を11に、最小値を0にして1から開始するようにします。最大値9・最小値0・0開始だと表示がキチキチになって少し見難いためです。また、下にある「□反転」にチェックを入れます。標準状態だと上が+になりますが一番上を「0」として下方向を+にしたい為です。
ガントチャートのバーを作図するには
with Series1 do begin
l := AddGantt(EncodeDate(2000,1,1),
EncodeDate(2000,3,31),
1, '項目名');
end; |
バーの色を指定して作図するには
with Series1 do begin
l := AddGanttColor(EncodeDate(2000,1,1),
EncodeDate(2000,3,31),
1, '項目名', clBlue);
end; |
のようにします。項目名の前の整数値(型はdoubleですが)は縦軸の数値=項目番号となります。返値l(ValueIndex)は不要であれば省略出来ます。また、横軸の目盛をきっちりとした値にしたい場合は
with Series1 do begin
GetHorizAxis.ExactDateTime := True;
GetHorizAxis.Increment := DateTimeStep[dtOneDay];
end; |
のように行うとの事です。
このガントチャートは、マウス左ボタンの右下方向ドラッグで画面拡大、左上方向ドラッグで初期状態に画面縮小、マウス右ボタンのドラッグで画面移動、が可能のようです。画面拡大し過ぎると画面が乱れますので注意して下さい。
本プログラムでは使用しませんが、バーとバーを接続する線を表示したい場合は、[系列]内の[形式]内の[接続線]をクリックし「□表示」にチェックを入れた状態で
Series1.NextTask[ValueIndex1] := ValueIndex2; |
のように指定を行います。
また、チャートのバーをクリックした際にどの項目をクリックしたのかを知りたい場合は、そのチャートの OnClickSeriesイベントで その項目の ValueIndex値が取得出来ます。そのイベント内での
Series.YValue[ValueIndex] |
で上記の項目名の前の整数値(項目番号)が分かります。また、
Series.XLabel[ValueIndex] |
で項目名が分かります。
チャートはマウス右ボタンのドラッグで画面移動(スクロール)出来ますが、ボタンを押してスクロールを行いたい場合は、
Chart1.LeftAxis.Scroll(-10,False) ; |
のようにすれば左側の縦軸をマイナス方向に10だけスクロールする事が出来ます。正の数値の場合はプラス方向にスクロール出来ます。
さて、それでは、プロジェクトの予定(水色)/実施(青色)/納品(緑色)の日付を、このガントチャートを利用して表示するようにしてみます。初期状態は「未」のものだけを表示するようにして、表示する日付範囲の指定も出来るようにします。データが多くなると表示範囲が広がり過ぎてしまい画面上見えにくくなってしまうのを防ぐ為です。表示する最大データ数は100としています。また、これまで同様のデータ一覧表示も付けておきます。
ここまでのソースプログラムを圧縮しています。
各画面やプログラム内容は下記で確認して下さい。
|
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
シェアウェア
Script!World
データベース
A B C D
E F G H
I J K L
M N O P
Q R S T
U V W X
Y Z
|