2016年12月21日

複数行グリッド

これは Delphi Advent Calendar  2016 21日目の記事です。


複数行表示編集できるグリッドのようなもの(下記のような感じ)ができるか問い合わせがあり、TFrameを使ったものを試作。
個人的にいい感じでできたので、TFrameを組み合わせるとこんな感じでできますと言うご紹介させていただきます。

グリッド全体のTFrameにScrollBoxを置き、その中に明細行のTFrame(1行ごとにCreate)で構成しています。
ScrollBoxの中に、Panelを1枚置き、その中に明細Frameを必要分Createしています。
このScrollBoxの中のPanel位置を移動させることでスクロールを実現しています。

MultiLineGrid1.png


簡単な機能紹介資料(機能概要.pdf)です。



サンプルプログラムです(FrameGrid.Sample.zip)。


ソースは仕事ネタなんで公開できませんが、TFrameを使えばこんな感じでできますというご紹介でした。


タグ:Delphi
posted by しんくそふと at 00:00| Comment(0) | TrackBack(0) | 開発TIPS

2016年12月06日

FDMemTable(FireDAC)フィールド定義作成

これは Delphi Advent Calendar  2016 6日目の記事です。

FDMemTableのフィールド定義をIDE上で行う方法は、最近のDelphiでは、”データセットの割り当て..”機能を使うことで、TFDQueryなどから、取り込むことができるようになっていますが、古いもの(XE5以前は無い。XE6,XE7は未確認。XE8以降はあり)では、このメニューが出ません。
このため、フィールドを1つづつ手作業で追加するということになりちょっと面倒です。これをちょっと楽するためのテクニックです。

最近のDelphiの方法
1)FDMemTableで必要なフィールドを取得できるクエリを書いたFDQueryを作成。
2)FDQueryをOpenし、フィールドエディタですべてのフィールを取り込む。
3)FDMemTable上で、右マウスボタンでメニューを表示。
4)"データセット割り当て"を選択。
5)上記、FDQueryを選択。
6)再度、FDMemTable上で、右マウスボタンでメニューを表示。
7)"フィールドエディタ"を選択
8)"フィールドエディタ"上で、右マウスボタンでメニューを表示。
9)"すべてのフィールドを追加"を選択
10)FDQueryのフィールド定義がコピーされる。
以上


古いものでは、4) の"データセット割り当て"が無く、”項目の設定”のみである。
ClientDataSetは、上記と同様の作業ができるので、こちらを使う。
プロパティの関連図けは
ClientDataSet1. ProviderName -> DataSetProvider1
                                                     DataSetProvider1.Dataset -> FDQuery1
1)上記プロパティ設定後、ClientDataSet1上で、右マウスボタンでメニューを表示。
2)”項目の設定”を選択。フィールドエディタが表示される。
3)"フィールドエディタ"上で、右マウスボタンでメニューを表示。
4)"すべてのフィールドを追加"を選択
5)FDQueryのフィールド定義がコピーされる。
6)dfmをエディタ表示する。
7)上記、ClientDataSet1のクラスを、TFDMemTableに変更。
8)エディタからフォーム表示へ
9)プロパティの相違でエラーメッセージが出るが無視。
10)保存で、ClientDataSet1のpas上のクラス定義の相違のメッセージが出るのでOKする。
以上

FDMemTableの活用法は、過去のブログを見てください。



posted by しんくそふと at 00:00| Comment(0) | TrackBack(0) | 開発TIPS