Makoto Hattori

Delphi Day
~Delphi 活用事例~
Sep. 7, 1999
Makoto Hattori
TACMI CO.LTD.
AGENDA
• 他アプリケーションと連携した契約書作成
• HTMLドキュメント作成・配布
• 汎用タッチパネルシステム
他アプリケーションと連携した契約書作成
• なぜ他アプリケーションとの連携が
必要か?
–適材適所
–必要に応じエンドユーザーが使えるツール
–開発期間の短縮
契約書や送付案内等の場合
• 書式が複雑
– 罫線が多用されている
– 文面の変更が多い
• 多数の書式
– 相手先によって違う
– 契約形態などによって違う
• 一度の印刷部数が比較的少ない
– 多少印刷に時間が掛かっても良い
表計算やワードプロセッサ
• 複雑な書式も簡単に作成できる
• 書式毎に文書を用意しておける
• プログラムの知識が無くても作成・変更可
能
連携の為の技術
• OLEオートメーションコントロール
• 他アプリケーション操作の為の知識
– ExcelやWordならVBAの知識が必要
• 問題点もある
– アプリケーションのバージョンによって操作方
法が変わる場合
– クライアントPCにアプリケーションの配布が必
要
実現手法(Excelを使った場合)
• 文書の作成
– レイアウトや罫線などは自由に作成
– データを差し込みたい部分に「名前」を定義す
る
• オートメーションオブジェクトを作成し、定義した
「名前」に対してデータをセットする
var
Appli, Excel, WorkBook, WorkSheet: Variant;
begin
Excel := CreateOleObject('Excel.Application');
try
Appli := Excel.Application;
Appli.WorkBooks.Open('テンプレート.xls');
Appli.Visible := True;
WorkBook := Appli.ActiveWorkbook;
WorkBook.Windows(1).Visible := True;
Appli.ScreenUpdating := False;
WorkSheet := WorkBook.WorkSheets('ワークシート1');
WorkSheet.Select;
WorkSheet.Range('番号').Value := '12345';
WorkSheet.Range('名前').Value := ‘服部';
WorkBook.SaveCopyAs(filename :=‘契約書.xls‘);
WorkBook.saved := true;
finally
Appli.WorkBooks.Close;
Excel.Quit;
end;
HTMLドキュメント作成・配布
• 大量のHTML文書、もしくは頻繁な変更が
ある
• Webサーバーを使わない(使えない)
– 費用や人的資源の問題
– プロバイダのホームページサービスを利用し
たデータ提供
– 自社ネットワークへの外部からの侵入が無い
– Webサーバーの種類を問わない
あるボランティアグループの例
• 迅速・広範囲な情報提供が必要
• テキスト情報に加え、写真も必要
• インターネットで公開・募集
• Webサーバーやドメインを持つ予算・管理
者が無い
• http://member.nifty.ne.jp/nazozen/
システム内容
• スタンドアロンで良い
– データベースにはParadoxを使用
• デジタルカメラから画像を取り込む・画像の編集
も必要
– フリーウエアのTWAINライブラリを使用
• HTML文書の自動作成
– コンテンツプロデューサーコンポーネント
• 文書・画像をプロバイダへ自動送信
– NMFTPコンポーネント
コンテンツプロデューサー
• HTMLドキュメントへのデータ差し込み
– データベースから直接行う
– プログラムコードで行う
– 表形式ドキュメントの作成も可能
– 生成されたHTMLをテキストで取り出せる
PageProducer
②
<HTML>
・
<BODY>
<BR>最終更新日<#UPDATE>
・
</HTML>
テンプレートHTMLが読み込まれる
③
①
#付きタグが有るとイベント発生
コードで#付きタグにデータをセット
HTMLテキストを要求(Contentプロパティを参照する)
④
HTMLテキスト
・
・
DataSetPage
Producer
<#CustName>様
受注番号<#OrderNo>
・
・
#付きタグが有るとイベント発生
コードでさらに加工も可能
#付きタグが項目名と等しいとデータ取得
DataSet
コンポーネント
•タグ設定用イベント
procedure TMainForm.PageProducer1HTMLTag(Sender: TObject;
Tag: TTag; const TagString: String; TagParams: TStrings;
var ReplaceText: String);
begin
if CompareText(TagString, 'UPDATE') = 0 then
ReplaceText := FormatDateTime('yyyy/mm/dd', Date);
end;
•HTMLテキストをファイルへ出力
var
St : TStringList;
begin
St := TStringList.Create;
try
St.Text := PageProducer1.Content;
St.SaveToFile('Doc.html');
finally
St.Free;
End;
DataSet
コンポーネント
データの供給
DataSetTableProducer
表形式HTMLの生成
どの項目を出力するのか設定
項目毎の書式の設定
表の前後にオプションのHTML設定
表のセル単位にイベント
セルの書式設定HTMLを付加
HTMLテキストを要求
(Contentプロパティを参照する)
セル書式設定用イベント
procedure TMainForm.DataSetTableProducer1FormatCell(
Sender: TObject; CellRow, CellColumn: Integer;
var BgColor: THTMLBgColor; var Align: THTMLAlign;
var VAlign: THTMLVAlign; var CustomAttrs, CellData: String);
begin
Case CellColumn Of
0 : begin
CustomAttrs := 'Width=20%';
CellData := '<A HREF="' +
'H' + FormatFloat('000', Table1Seq.AsInteger) + '.html' +
'">' + CellData + '</A>';
end;
1 : CustomAttrs := 'Width=30%';
2 : CustomAttrs := 'Width=50%';
end;
end;
NMFTPコンポーネント
• FTP通信用コンポーネント
• ディレクトリリスト、ファイルリストの取得
• ファイルの送受信
– アスキー、バイナリ
– 通信状況を知らせるイベント
• ホスト、ユーザーID、パスワードはプロパ
ティで設定
ファイル送信の例
NMFtp1.Connect;
try
NMFtp1.ChangeDir('homepage');
NMFtp1.Mode(MODE_IMAGE);
NMFtp1.Upload(LFileName, RFileName);
finally
NMFtp1.Disconnect;
end;
汎用タッチパネルシステム
• Windowsのコントロール外観では不満
– 色や形を自由に
– デザイン変更を容易に
– さまざまな機能ボタンの実現
– 画面切り替え時にワイプイン・ワイプアウトが
必要
汎用タッチパネルシステム
• ウインドウ全体をビットマップで作成
– 通常・クリック時の2枚の画像を用意
• ウインドウ各部のボタン座標定義ツールを別途
用意
• 各種の画面切り替えモードを用意