開発者が知りたい実践プログラミングテクニック! ~明日から使えるテクニック集~

Similar documents
PowerPoint プレゼンテーション

Microsoft PowerPoint - はじめてのDataSnapアプリケーション_

1 シミュレーションとは何か?

Webコンポーネントのカスタマイズ入門

Delphi/400 テクニック公開 Delphi/400開発 ~ パフォーマンス向上テクニック ~

産直くん 9 リピートくん 9 バックアップ リストア作業チェックリスト バックアップ リストア作業項目一覧 作業項目作業目安時間概要 00 バックアップ リストア作業を行う前に 産直くん 9 リピートくん 9 のバックアップ リストア作業を円滑に行うための確認事項をまとめています 1. バックアッ

10th Developer Camp - B5

知って得する!現役ヘルプデスクが答えるDelphiテクニカルエッセンス 9.0

知って得する!現役ヘルプデスクが答えるDelphiテクニカルエッセンス 8.0

L N P Y F C T V W Z I X Pentomino Form Name Caption Position FormMain podesktopcenter

Webサービスを利用して機能UP!

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

Developer Camp

JOCAR操作マニュアル アウダセブン連動

目 次 1. はじめに ソフトの起動と終了 環境設定 発助 SMS ファイルの操作 電話番号設定 運用条件 回線情報 SMS 送信の開始と停止 ファイル出力... 16

+メッセージ利用設定 利用マニュアル

Delphi/400を利用したはじめてのWeb開発

新バージョンDelphi/400 XE7ご紹介 - マルチデバイスデザイナ機能で開発効率アップ! -

yukarik

1 目次 1 目次 はじめに Tips セットアップ 事前準備 事前準備 セットアップ セットアップ ( その他 ) Tips 概要 概要 処理フ

2) データの追加 一番下の行までスクロールしていき * のある行をクリックすると 新しいデータを入力できます その他の方法 Access では様々な使い方が用意されています その一例としては 右クリックを使用する方法もあります 画面の左端の部分にマウスを持っていくと が表示されます の上でクリック

ウツタイン様式調査オンライン処理システム

H-R041-2_j

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作

テクニカルセミナーベストセレクション

知って得する!現役ヘルプデスクが答えるDelphiテクニカルエッセンス

マクロの実行許可設定をする方法 Excel2010 で 2010 でマクロを有効にする方法について説明します 参考 URL:

クライアント証明書インストールマニュアル

Microsoft PowerPoint - DELPHI�礔.ppt

Microsoft Office Visioによる 施設管理について

Microsoft Word - NaviPortalFAQ-master.doc

試作ツールは MIT ライセンスによって提供いたします その他 内包された オープンソース ソフトウェアについてはそれぞれのライセンスに従ってご利用ください

ミガロ.製品 最新情報

変更履歴 版数変更日変更内容 /9/1 初版設定

Indyを利用したメール送信機能開発

やってみようINFINITY-写真管理 編-

共有フォルダ接続手順 1 共有フォルダ接続ツールのダウンロード 展開 CSVEX のトップページから共有フォルダ接続ツールの zip ファイルをダウンロードします ダウンロードした zip ファイルを右クリックして すべて展開 を選択します (Windows 環境では zip ファイルを解凍しなくて

ホームページにパスワード認証を設定します 会員限定のページなどに利用できます 設定の手順 を設定するには 以下の手順で行います ユーザ登録 を設定したページにアクセスするためのユーザを登録します の設定 を設定するページ アクセスを許可するユーザを選択し 設定します 設定完了 を設定したページにアク

レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン < 追加機能一覧 > 管理番号 内容 説明書参照章 カナ文字拡張対応 < 改善一覧 > 管理番号 内容 対象バージョン 説明書参照章 文字列のコピー ペースト改善 ~ 子画面の表示方式 ~ 履歴の詳細情報 ~ タブの ボタン ~ 接続時の管

<30312E D F898AFA93B193FC8EE88F872E786C73>

WebReportCafe

PowerPoint プレゼンテーション

FastReportへの効率的な帳票レイアウトコンバート

一括請求 Assist Ver.2 操作マニュアル 連携編 ( 蔵奉行 i8) 第 2.1 版

Microsoft Word - ModelAnalys操作マニュアル_

ASA WEB 1.7 リリースノート

目次 第 1 章はじめに 取扱いについて 記載内容について... 6 第 2 章基本操作 Excel Online を開く ファイル ( ブック ) を作成する ファイル ( ブック ) を開く..

目次 第 1 章はじめに 取扱いについて 記載内容について... 6 第 2 章基本操作 OneNote Online を開く ノートブックを開く ノート ( セクション ) を作成する... 11

編集する ファイルを開く マイクロデータの設定を行うファイルまたはファイルを開きます 開かれたファイルは編集画面に表示されて ブラウザ表示した時のプレビューも同時に表示されます HTML ファイルの選択 編集する ファイルを開くためにメインメニューから ファイル 開く を選びます ファイル選択ダイア

JACi400のご紹介~RPGとHTMLで簡単Web化~

ステップアップ! モバイルアプリケーション開発

作成するアプリ 本書は 楽々 Web データベースで 一覧アプリ を作成する方法を説明します 以下のような Excel ファイルの一覧表を題材に 楽々 Web データベースに Excel ファイルを読み込ん でアプリを作成し 使用するまで を説明します 課題管理表.xlsx タイトル詳細 内容対応優

intra-mart WebPlatform/AppFramework

Microsoft Word - 2.IJCAD Electrical 基本マニュアル.doc

目次 DjVu Viewer インストールガイド 信頼済みサイトへの登録 ポップアップブロックの解除 GSPc_Web 用インストーラのダウンロード方法 GSPc_Web 用インストーラのインストール... 8 GSPc_WEB 操作説

Delphi/400自社開発ソフトで業務課題解決 写真管理とスプールファイルのPDF化

シヤチハタ デジタルネーム 操作マニュアル

V-CUBE One

Fujitsu Standard Tool

誓約書の同意 4 初回のみ 下記画面が表示されるので内容を確認後 同意する ボタンをクリック 同意していただけない場合はネット調達システムを使うことができません 参照条件設定 5 案件の絞り込み画面が表示されます 5-1 施工地域を選択して 施工地域選択完了 ボタンをクリック - 2 -

t1

5-2. 顧客情報をエクスポートする 顧客管理へのアクセス手順 メールディーラーで管理する顧客情報に関する設定を行います 1. 画面右上の 管理設定 をクリックする 2. 管理設定 をクリックする 3. ( タブ ) 顧客管理 をクリックする 2

creator_ver.12.0 新機能_CAD組み込み用.indd

図 1 アドインに登録する メニューバーに [BAYONET] が追加されます 登録 : Excel 2007, 2010, 2013 の場合 1 Excel ブックを開きます Excel2007 の場合 左上の Office マークをクリックします 図 2 Office マーク (Excel 20

償却奉行 i8/ i シリーズ 汎用データ受入の手順書 汎用データの作成方法を知りたい 汎用データのフォーマットがわからない 汎用データ受入をしたら受入エラーが発生した について資産データの受入を例に説明します 本手順書では OBC 受入形式 ( ) の汎用データの受入を 受入フォーマットに従って

PowerPoint プレゼンテーション

ことばを覚える

DataSpider製品紹介ハンズオンセミナー_演習シナリオ

スクールCOBOL2002

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

(Microsoft PowerPoint - HP\227pWASABI\217\320\211\356\216\221\227\277.ppt)

POWER EGG2.0 Ver2.8 スタートアップガイド ~Webデータベース 応用編~

ARCHITREND 見積 見積書作成編

ESTM9

PowerPoint プレゼンテーション

スライド 1

Create!Form V11 - Excel 出力設定

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

Transcription:

セッション No.4 Delphi/400 技術セッション 開発者が知りたい実践プログラミングテクニック! ~ 明日から使えるテクニック集 ~ 株式会社ミガロ. システム事業部システム 2 課辻野健

アジェンダ Delphi/400 技術セッション 1. ユーザビリティの向上 1-1. 同時に複数画面を起動する方法 1-2. グリッド操作時の自動フォーカス制御方法 2. 開発効率 保守性の向上 2-1. 画面共通処理のフレームによる部品化

1. ユーザビリティの向上

ユーザーがシステムに求めるもの 安定性 ( 信頼性 ) エラーやシステム障害が発生しない セキュリティがしっかりしている 使い勝手 本来の業務がはかどる 作業をできるだけ簡単に 入力したデータの変更 修正を簡単に 資料の作成を簡単に レスポンス 処理速度 操作に対する反応が早い 汎用性 拡張性に優れている 柔軟性があり新機能の追加や運用でカバーできる設計になっている

使い勝手 = ユーザビリティ ユーザビリティの向上による効果 システム使用前 システムがあまりに複雑すぎるせいで 一人前のオペレータになるまでに集中的なトレーニングが必要 ユーザビリティを重視したデザインによって 研修期間を 日単位 場合によっては週単位で短縮できる システム使用時 求める情報を取得するのに時間がかかる 誤った操作によるミスが発生 オペレーターの作業効率向上によりコストが削減できる

使い勝手 = ユーザビリティ ユーザビリティの向上がもたらす実例 申請システムの例 60m 45m 30m 15m 0m 改善前 その他の実例 改善後 100% 80% 60% 40% 20% 0% 業種対策効果 タスク達成時間 ( 目的達成までに要した時間 ) 53 分 25 分 33% 100% タスク達成率 (60 分以内に目的を達成したユーザの割合 ) ユーザビリティの向上により 作業効率を向上させることができる 不動産会社マンション販売促進サイト閲覧者のモデルルーム予約率が 3 倍に 新聞社ニュースサイト改善一人当りのページ閲覧数が 2 倍に増加 携帯電話請求書デザイン改善コールセンターへの問合せ件数が半減 UNISYS TECHNOLOGY REVIEW 第 110 号,NOV. 2011 Web 戦略を成功に導くためのユーザインタフェース設計プロセス 参照

使い勝手 = ユーザビリティ そこで 今回はユーザビリティの向上を行う方法として 同時に複数画面を起動する方法 グリッド操作時の自動フォーカス制御方法

1-1. 同時に複数画面を起動する方法

こんな要望ないでしょうか? 見積照会で参照した過去の情報を基に 新しい見積を作成したい 同時に一つの画面しか起動できないと

こんな要望ないでしょうか? 見積照会で参照した過去の情報を基に 新しい見積を作成したい 同時に一つの画面しか起動できないと 1 メニューより見積照会起動 2 メモを取るなどし 画面終了

こんな要望ないでしょうか? 見積照会で参照した過去の情報を基に 新しい見積を作成したい 同時に一つの画面しか起動できないと 1 メニューより見積照会起動 2 メモを取るなどし 画面終了 3 メニューより見積入力起動 都度 各画面を切り替える必要がある為 作業効率が悪い

こんな要望ないでしょうか? 見積照会で参照した過去の情報を基に 新しい見積を作成したい 一つの画面に様々な機能を盛り込むと 見積照会 受注照会 発注照会などの機能を盛り込む 過去のデータを見ながら見積の登録が可能 しかし 各画面を作りこむ必要があるため 開発コストが増大してしまう システムが複雑になり使いづらい

こんな要望ないでしょうか? 見積照会で参照した過去の情報を基に 新しい見積を作成したい 同時に複数の画面が起動できると 1 メニューより見積照会起動 2 メニューより見積入力起動 過去の見積を検索しながら新規見積を登録できる為 作業効率が良い 複数画面を同時に起動する方法をご紹介

画面の起動方法 Delphiにて画面を起動させる方法 1. ShowModal 遷移元画面とのつながりを持ったサブ画面として表示する方法 同一 Exe 内の他の画面は一切操作不可 再検索処理など後続処理の実施 1 見積の編集 2 見積の更新 サブ画面より戻り値を受取る 1 商品 CD の検索 2 商品 CD のセット

画面の起動方法 Delphiにて画面を起動させる方法 2. Show 他の画面とつながりを持たない独立した画面として表示する方法 起動画面以外も操作可能 1 画面の起動 2 画面の起動 Show を使用することで複数画面の同時起動が可能になる

Show 使用時の注意点 1ShowModal と Show ではメモリの解放方法が異なる Show 遷移先画面の Form の OnClose イベントにメモリ解放処理を記述する サブ画面の OnClose イベント procedure TfrmSubForm.FormClose(Sender: TObject; var Action: TCloseAction); begin // 画面終了後 メモリ解放 Action := cafree; end; サブ画面終了時に メモリを解放する処理を記述する

Show 使用時の注意点 1ShowModal と Show ではメモリの解放方法が異なる ShowModal 遷移元画面に遷移先画面のメモリ解放処理を記述する メイン画面 サブ画面起動用 ボタンの OnClick イベント procedure TfrmMainForm.btnShowSubFormClick(Sender: TObject); begin // サブ画面を生成 frmsubform := TfrmSubForm.Create(Self); try // サブ画面を起動 frmsubform.showmodal; メイン画面の処理はサブ画面が終了するまで停止状態となる // サブ画面より戻り値を受け取る Edit1.Text := frmsubform.rvalue; finally // サブ画面のメモリを解放 FreeAndNil(frmSubForm); サブ画面終了後 サブ画面のメモリを解放する end; end;

Show 使用時の注意点 2 同一画面を複数起動する場合 画面生成時に各画面のグローバル変数ではなく ローカル変数を使用する 各画面のグローバル変数とは 各画面毎に自動的に設定されているクラスの変数 フォーム生成時のグローバル変数 type TForm1 = class(tform) private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; 画面毎のグローバル変数 implementation

Show 使用時の注意点 2 同一画面を複数起動する場合 画面生成時に各画面のグローバル変数ではなく ローカル変数を使用する 各画面のグローバル変数を使用した場合 画面 1 1 画面 3 を生成し 起動 画面 3 画面 2 画面 3 のグローバル変数には 1 で生成した画面が保持される 2 画面 3 を生成し 起動 画面 3 画面 3 のグローバル変数には 2 で生成した画面が上書きされる

Show 使用時の注意点 2 同一画面を複数起動する場合 画面生成時に各画面のグローバル変数ではなく ローカル変数を使用する 各画面のグローバル変数を使用した場合 画面 1 3 画面 1 から画面 3 を操作 画面 3 画面 2 画面 3 画面 2 より生成された画面 3 を操作しようとする

更にこんな要望ないでしょうか? 見積照会より見積の編集を行いながら 過去の受注情報を確認したい 編集対象を検索 見積照会 見積を編集 見積入力 過去の受注情報が知りたい 後続処理を実施するため一般的に ShowModal にて起動

更にこんな要望ないでしょうか? 見積照会より見積の編集を行いながら 過去の受注情報を確認したい 編集対象を検索 見積照会 一旦見積入力終了 過去の受注情報が知りたい 受注情報を検索 受注照会

更にこんな要望ないでしょうか? 見積照会より見積の編集を行いながら 過去の受注情報を確認したい 編集対象を検索 見積照会 再度編集 見積入力 見積入力を終了することなく過去の受注の検索ができればもっと使い勝手が良くなるのに 受注情報を検索 受注照会 Show を使用したワンランク上のテクニックをご紹介

Show 使用による擬似 ShowModalの実装 実装概要 1 見積照会の編集ボタン押下時に 見積入力をShowで起動する 2 見積照会にて後続処理実施の為 見積入力の終了を監視する ShowModal のように 照会画面の後続処理のタイミングを取得しつつ 他の画面も操作可能となる

Show 使用による擬似 ShowModal の実装 1 見積入力の起動 ShowModal ではなく Show を使用する 見積照会 編集 ボタンの OnClick イベント private FMGR010From: TfrmMGR010; // 見積入力画面 Showを使用するため グローバル変数ではなく ----------------------------------------------------------------------------------------------- ローカル変数を使用する procedure TfrmMGR030.btnEditClick(Sender: TObject); begin // 見積入力を生成 FMGR010From := TfrmMGR010.Create(Self); // 見積入力を表示 FMGR010From.Show; // 0.5 秒間隔で見積入力が表示されているかを確認 tmrwatch.enabled := True; // 画面を使用不可にする Enabled := False; end; 見積入力終了後の後続処理を実施するため 見積入力がまだ表示されているかを監視する 見積入力表示中は 見積照会のみを操作不可に設定する

Show 使用による擬似 ShowModal の実装 2 見積照会より起動した見積入力の終了の監視 TTimer コンポーネントの使用 画面へ TTimer コンポーネントを配置する Name プロパティを tmrwatch Interval プロパティを 500 に設定する (0.5 秒間隔で終了確認 )

Show 使用による擬似 ShowModal の実装 2 見積照会より起動した見積入力の終了の監視 TTimer コンポーネントの使用 見積入力終了監視タイマーの Timer イベント procedure TfrmMGR030.tmrWatchTimer(Sender: TObject); begin // 見積入力が終了している場合 if (not Assigned(FMGR010From)) or (Assigned(FMGR010From) and (not FMGR010From.Showing)) then begin // 見積入力終了の監視を停止 tmrwatch.enabled := False; // 再検索処理を実施 btnsearch.click; 見積入力が解放されているまたは見積入力が表示されていない場合 後続処理を実施する // 画面を使用可能にする Enabled := True; end; end; 見積入力が表示されている間 見積照会は操作不可にする為 見積入力終了後 操作可能に戻す

1-2. グリッド操作時の自動フォーカス制御方法

こんな要望ないでしょうか? 一つの得意先に対して 複数の商品の見積を行いたい 明細 ( グリッド ) 形式で商品情報を入力することで作業を簡素化できる Excel のように Tab キーでセルの移動ができればマウス操作による手間を省くことができる Tab キーによる自動フォーカス制御方法をご紹介

明細への入力 Delphi にて グリッドを実装するコンポーネント 1. TDBGrid 直接データベースまたはデータセットと接続して使用するコンポーネント 最適化された方法でデータ取得明細の表示速度が高速 2. TStringGrid テキストデータを表形式で表示するコンポーネント 入力後のレスポンスが高速入力の制御が容易に可能 TStringGrid を用いてカーソル移動テクニックをご紹介

TStringGrid での Tab キーによるカーソル移動 実は Options プロパティの設定のみで実装可能 しかし

TStringGrid での Tab キーによるカーソル移動 Options プロパティの設定のみの場合 商品 CD 単価 数量 備考のみ入力可能

TStringGrid での Tab キーによるカーソル移動 Options プロパティの設定のみの場合 全セルにカーソルが遷移する 入力可能なセルのみカーソルが遷移すれば簡単に入力できるのに

TStringGrid での Tab キーによるカーソル移動 入力可能セルのみカーソルが移動すれば 簡単に入力できる為作業が捗る 入力可能セルのみカーソル移動させる方法をご紹介

TStringGridでのTabキーによるカーソル移動 実装概要 1 指定のセルが 入力可能かどうかを判定する 2 次の入力可能セルを見つけ そのセルにカーソルを移動する

TStringGrid での Tab キーによるカーソル移動 1 入力可能セルの判定 入力可能セルを判定するための関数 CanEdit 関数 private function CanEdit(ACol: Integer): Boolean; // 変更可能判断 ----------------------------------------------------------------------------------------------- const // 列位置情報 ccol_gyno = 1; // 行 どの列に 何の情報が表示されているかを定数にて管理する ccol_shcd = 2; // 商品 CD ccol_shnm = 3; // 商品名 ccol_tank = 4; // 単価 ccol_sury = 5; // 数量 ccol_king = 6; // 金額 ccol_biko = 7; // 備考 ----------------------------------------------------------------------------------------------- function TfrmMGR010.CanEdit(ACol: Integer): Boolean; begin // 商品 CD 単価 数量 備考列のみ変更可能 Result := ACol in [ccol_shcd, ccol_tank, ccol_sury, ccol_biko]; end; 入力可能なセルの場合に True を返却する関数を作成する

TStringGrid での Tab キーによるカーソル移動 2 カーソルの移動 CanEdit 関数を使用した入力可能セルへのカーソル移動 明細の OnKeyDown イベント <1> procedure TfrmMGR010.stgListKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var icol, irow : Integer; 次のカーソル位置を割り出すための変数を定義する begin // Tabキーが押下された場合 Tabキーが押下された場合のみ処理を実施する if Key in [VK_TAB] then begin Key := 0; // 標準処理が実行されないようキーを初期化 // Shift キーが押下されていない場合 if not (ssshift in Shift) then begin // 次のセルを決定 irow := stglist.row; icol := stglist.col + 1; while irow < stglist.rowcount do begin while icol < stglist.colcount do begin Tab キー押下時の標準の処理が実行されると カーソルの位置設定後 もう一つ次のセルへカーソルが移動してしまう Shift キーが押下されていない場合 一つ次の入力可能セルへカーソルを移動させる

TStringGridでのTabキーによるカーソル移動 2カーソルの移動 CanEdit 関数を使用した入力可能セルへのカーソル移動明細のOnKeyDownイベント<2> // 編集可能セルが見つかった場合 if CanEdit(iCol) then begin // セルを指定し 処理終了 stglist.col := icol; stglist.row := irow; Exit; end; 各セル順番に入力可否をチェックし 入力可能セルが見つかったタイミングでカーソルをセットする // 次の列をチェック Inc(iCol); end; // 次の行をチェック Inc(iRow); icol := 1; end;

TStringGrid での Tab キーによるカーソル移動 2 カーソルの移動 CanEdit 関数を使用した入力可能セルへのカーソル移動 明細の OnKeyDown イベント <3> 一つ次の入力可能セルが存在しなかった場合 // 編集可能セルが見つからなかった場合 行追加 stglist.rowcount := stglist.rowcount + 1; 最終行に1 行追加し その行の商品 CDへカーソルをセットする stglist.row := stglist.rowcount - 1; // 最終行にカーソル stglist.col := ccol_shcd; // 商品 CDにカーソル stglist.cells[ccol_gyno, stglist.rowcount - 1] := IntToStr(stgList.RowCount - 1); // 行 end // Shiftキーが押下されている場合 else begin Shiftキーが押下されている場合 一つ前の入力可能セルへカーソルを移動させる ( 中略 ) end; end; end;

TStringGrid での Tab キーによるカーソル移動 3 補足 セルの入力制御 CanEdit 関数を使用したセルの入力制御 明細の OnSelectCell イベント procedure TfrmMGR010.stgListSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin // 入力可否制御 if CanEdit(ACol) then // 入力可能セルの場合 begin stglist.options := stglist.options + [goediting]; end else // 入力不可セルの場合 begin stglist.options := stglist.options - [goediting]; end; end; 入力可能セルにカーソルがセットされている場合 Options プロパティに goediting を設定する 入力不可セルにカーソルがセットされている場合 Options プロパティから goediting を解除する

2. 開発効率 保守性の向上

開発効率 保守性の高いプログラム 開発効率 開発を行う際に どれほど早く または少ない労力で 作業を進められるかといった度合い 保守性 改定を行うために必要な労力に関係するもの 保守性は 4 つの品質副特性を持つ 1 2 3 4 解析性 ある変更を行うための修正箇所の割り出しの容易さ 変更性 ある変更を行うための修正の容易さ 安定性 ある変更を行う際のデグレードの発生確率 試験性 ある変更を行う際のテストの容易さ

処理の共通化 開発効率 保守性の向上 処理の共通化がもたらす効果 開発効率 各画面に同じ処理を複数回記述する事になり 開発に時間がかかる 保守性 処理を共通化することで その処理が使用される画面にかかる 開発工数を大幅に削減できる 仕様の変更が発生した場合 各画面への修正が必要となり 作業時間 デグレードが発生するリスクが高い 共通化された処理のみの修正で全画面へ修正が反映される為 メンテナンスに費やす労力を最小限に抑えることができる

処理の共通化 開発効率 保守性の向上 そこで 今回は処理の共通化を行う方法として 画面共通処理のフレームによる部品化

2-1. 画面共通処理のフレームによる部品化

こんな時ないでしょうか? 複数のコンポーネントで 1 セットとなる項目を複数の画面へ配置したい 見積入力 受注入力 発注入力

こんな時ないでしょうか? 複数のコンポーネントで 1 セットとなる項目を複数の画面へ配置したい 各画面へ処理を記述した場合 何度も同じ項目の配置や処理の記述を行う為 開発効率が悪い 処理を共通化した場合 同じ処理を記述する必要が無いため開発時間の短縮ができる

こんな時ないでしょうか? 複数のコンポーネントで 1 セットとなる項目を複数の画面へ配置したい 項目の桁数が変更になり 各項目の修正が必要になった 各画面へ処理が記述されていると 処理が共通化されていると 修正箇所の割り出しに時間がかかる修正自体にも時間がかかる 保守性が低いシステムになってしまう 修正箇所が 1 箇所の為 短時間で修正することができる 保守性が高いシステムになる

処理の共通化 処理を共通化する方法 1. 共通関数 ユニットなどを使用し 処理のみを共通化する方法 複数画面で使用される処理を共通化する場合に最適 ex) 明細データの CSV 出力 Ini ファイルの参照 etc 2. カスタムコンポーネント コンポーネントに 処理を記述することで共通化する方法 コンポーネント独自の処理を共通化する場合に最適 ex) Enter キーの押下によるフォーカス移動 エラー項目の背景色反転 etc 3. フレーム 複数コンポーネントの処理や制御などを共通化する方法 フレームを利用した処理の共通化をご紹介

画面共通処理のフレームによる部品化 フレームとは? 複数のコンポーネントを一つにまとめる為のコンポーネント グループ単位でフォームや他のフレームへ配置することができる 画面 1 フレーム 1 画面 2 フレーム 2 様々な処理を共通化することで開発 テスト時間を大幅に短縮したり 保守性を大幅に向上させることができるフレームの使用方法をご紹介

画面共通処理のフレームによる部品化 1 フレームの生成 ツールバーより [ ファイル 新規作成 その他 ] を選択

画面共通処理のフレームによる部品化 1 フレームの生成 ダイアログより [Delphi プロジェクト Delphi ファイル ] の VCL フレームを選択

画面共通処理のフレームによる部品化 1 フレームの生成 フレームの保存 保存先フォルダを指定し 任意のファイル名を入力後 保存ボタンを押下する

画面共通処理のフレームによる部品化 2 フレームへの処理の記述 フレームへコンポーネントの配置や処理の記述 フォームの場合と同様の方法でコンポーネントを配置 プロパティやイベントへの処理の記述を行う

画面共通処理のフレームによる部品化 2 フレームへの処理の記述 フレーム生成時の処理を記述したい場合 public constructor Create(AOwner: TComponent); override; ------------------------------------------------------ constructor TfraMGF010.Create(AOwner: TComponent); begin inherited; // フレーム生成時の処理を記述 end; フレーム解放時の処理を記述したい場合 public destructor Destroy; override; ----------------------------------- destructor TfraMGF010.Destroy; begin // フレーム解放時の処理を記述 inherited; end; inherited にて フレーム自体のメモリが解放される為 個別の処理は inherited の前に記述する

画面共通処理のフレームによる部品化 3 フレームの利用 ツールパレットへの追加 コンポーネント名パレットページ名パレットアイコン : 任意のコンポーネント名 : 追加先のページ名 : 任意のアイコン

画面共通処理のフレームによる部品化 3 フレームの利用 ツールパレットより画面への配置

画面共通処理のフレームによる部品化 3 フレームの利用 フレームの項目より値を取得する方法 フレームの項目値をファイルに更新 更新ボタンの OnClick イベント procedure TfrmMGR010.btnUpdateClick(Sender: TObject); begin // フレームの項目よりファイルを更新 SQLQuery1.ParamByName('SHCD').AsInteger := StrToIntDef(TfraMGF0101.edtSHCD.Text, 0); // 商品 CD SQLQuery1.ParamByName('SURY').AsInteger := StrToIntDef(TfraMGF0101.edtSURY.Text, 0); // 数量 SQLQuery1.ParamByName('SIYO').AsString := TfraMGF0101.edtSIYO.Text; // 仕様 // ファイル更新 SQLQuery1.ExecSQL; end; 配置直後のフレームは Name プロパティに クラス名 + 連番 が設定されている

まとめ 1. ユーザビリティの向上 1-1. 同時に複数画面を起動する方法 複数の作業を同時に行うことができる 作業効率の向上 1-2. グリッド操作時の自動フォーカス制御方法 入力可能セルのみへのカーソル移動 スピーディな入力操作を実現 TDBGridでも同様の操作感を実装可能 2. 開発効率 保守性の向上 2-1. 画面共通処理のフレームによる部品化 一連の処理を共通化 開発時間の短縮 保守性の向上 VCLのみでなくFireMonkeyでも同様の手順で実装可能

ご静聴ありがとうございました