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枚の画像を用意 • ウインドウ各部のボタン座標定義ツールを別途 用意 • 各種の画面切り替えモードを用意
© Copyright 2024 ExpyDoc