Q112:この度初めて、MZPFを導入し、操作を覚える為、「お弁当の注文プログラム」を作ろうとしています。
Q112-1:
この度初めて、MZPFを導入し、操作を覚える為、あるプログラムを作ろうとしています。
社員が注文する「お弁当の注文プログラム」です。現在は出勤した社員が午前9時までに
手書きで注文票を記入し、注文箱に入れ、総務課が集計→お弁当屋さんに一括注文という流れのものです。
お弁当代は給料からの天引きで、一ヶ月毎に総務課にて集計されています。
お給料の時にもらう給料明細の中にそれぞれ弁当を頼んだ人は、一月の頼んだお弁当の合計金額のメモが入っております。
最終的にはその総務課がしている1日の集計や一月の集計もパソコンですぐできるようにし給料明細に入れる合計メモも、リストで印刷しハサミで切って入れるように簡単にしたいと思っております。
それで、すべてをすぐ作るのは大変なのでとりあえず教えていただきたいことがあります。
ソフトの中にあるドキュメントインデックスの中の「注文票アプリケーション作成チュートリアル」を参考に作っており、メインとなる注文票はできつつあります。
(→添付ファイル)
これに写真入りのカタログを追加して、その弁当の写真をクリックしたら、注文票の商品名と単価の欄にデータを取得するようにしたいのですが、どうすればいいのでしょうか?
写真を取り込む方法、単品の写真がいいのか、一覧表の写真でリンクを張るような感じでできるのか?ボタンを作って、単品画像を取り込むのか?単品の画像を取り込んでボタン化できるか?
そういったところを教えてください。
とりあえず作成途中のプログラムとその弁当の画像を送ります。
写真は一部で、商品数は30〜40種類あります。
A112-1:
とりあえず画像のことは後回しにしますと、考え方は以下のようになるかと存じます。
(1) 弁当名と値段を記述した一覧表を用意する。
(2) 弁当名をラベルとするボタンを、弁当の種類だけ用意する。
(3) ボタンをクリックしたら、そのボタン名と同じ弁当名を(1)の一覧表から検索し、値段を表示する。
以上の処理を行うサンプルアプリケーション(弁当カタログ.mzax)を用意しましたので、どうぞご覧ください。このサンプルでは、ボタンをクリックしたとき、そのラベル名をテキストフィールドに設定します。そのタイミングでテキストフィールド[ID:8]からデータ設定イベントが発生し、テーブル[ID:2]を上から順に1行ずつチェックし、テキストフィールドに設定された弁当名と同じものが見つかったらその行に書かれている値段を数値入力フィールド[ID:12]に設定し、テーブルの検索を終了します。
画像は、ボタンに貼りこむことが可能です。アプリケーションファイルをビルダーでロードし、[実行(設定可)]ボタンで起動します。画像をボタンに貼りこむには、ボタン上で右クリック、アイコン>通常時>設定する...、と選択して、表示されたアイコン選択用のダイアログから画像ファイルを指定してください。
こちらもサンプルアプリケーション(弁当カタログ_画像.mzax)を用意しましたのでご覧ください。お送りいただいた画像ファイルから、各弁当の画像を切り出してボタンに貼り付け、サイズとレイアウトを調整したものです。
なお、カタログ(一覧表)から品物を選び出してくる処理につきましては、付属の「注文票アプリケーション作成チュートリアル」のLesson.2 Step.4「カタログを用意する」のほか、「バーコード入力導入チュートリアル」が参考になるかと存じます。合わせてご覧ください。
関連ファイル:弁当カタログ.mzax、弁当カタログ_画像.mzax
Q112-2:
さて、引き続き質問がございます。
頂いたサンプルプログラム2点、確認しました。
「弁当カタログ_画像.mzax」のような感じで作り上げたいと思います。
これに、前回こちらから送った注文票をパネルかフレームで付くようなものにしたいと思っています。
@そこで、画像の横に「弁当名」があります。(ボタンのテキストが弁当名になってます)が、ここの部分に値段のテキストを配置したい場合にボタンの下に隠れてしまいます。
階層を常に「値段テキスト」が最前面にくるようにしたいのですが、どうすればいいのでしょうか?
A@のように出来ると、テーブルはあえて表示しなくていいと思いますが、検索するためには必要なわけですよね?
テーブルのみ非表示することは可能でしょうか?
B今回弁当のテーブルを作った(入力した)わけですがExcelなどで作ってある弁当リストから参照して、表示させるにはどうすればいいのでしょうか?
(画像をクリックすると、Excelデータを見に行き弁当名、値段が表示される、と言うことです)
C部署をドロップダウンリストから選択できるようにするには、どうしたらいいのでしょうか?(EXCELでの部署名データがあるものとします)
A112-2:
>@そこで、画像の横に「弁当名」があります。(ボタンのテキストが弁当名になってます)が、ここの部分に値段のテキストを配置したい場合にボタンの下に隠れてしまいます。
>階層を常に「値段テキスト」が最前面にくるようにしたいのですが、どうすればいいのでしょうか?
[ボタン]上で右クリック>テキスト位置>水平方向>中央を選び、さらにテキスト位置>垂直方向>上端、下端等をお試し下さい。
(すぐに配置が変更されないように見える場合には、フレームを開き直したり、「画面編集」画面で[ボタン]を右クリックし「デフォルトサイズ設定」を行ったり、アイコンを一旦削除してみてください)
ただし上記の方法だと、どうしてもTEXTの方が画像幅より長くなるかと存じます。2行に分けて表示したい場合HTML書式(例:<html>改行<br>します)で書くと改行をすることもできます。
しかし、先日お送りしたサンプルアプリケーションは[ボタン]のテキストを元に品名と値段を表示しており、TEXTをHTML書式に変えると処理を変更する必要が出てきます。
他には[ボタン]の上にマウスを置くと、小さなツールチップ窓が表示する方法もございます。ビルダー上コンポーネントの上で右クリック>「属性情報設定」から「ToolTipText」欄に文字を入力します。
[ボタン]の見た目についてどのような感じになるかは、関連ファイルの「ボタンテキスト位置.mzax」をご覧ください。
>A テーブルのみ非表示することは可能でしょうか?
[テーブル]コンポーネントを含むGUI(画面構成)部品は、画面上に配置されていなくても、設定したデータが消えることはありません。
先日お送りしたサンプル「弁当カタログ.mzax」で[テーブル]を画面配置から外しても、コンポーネント自体や[テーブル]の行/列を削除しない限り、動作は変わりません。
画面表示はせずテーブルデータだけ格納しておきたい時には[テーブル格納変数]を使用する場合もあります。但し、変数内のデータは一時的なもので、GUI(画面構成)部品上のデータと違ってアプリケーションファイル内に保存されませんので、再ロードして実行時にはどこかからテーブルデータを読込む必要があります。
> B Excelなどで作ってある弁当リストから参照して、表示させるにはどうすればいいのでしょうか?
アプリケーションを実行した時点で、EXCEL等のデータをMZPlatform上に読込むようにする以外は、読込んだ後の処理は基本的にはサンプルアプリケーションと
変わりません。
(SQL文を使用し、画像をクリックすると逐次EXCELファイルを検索し必要なデータだけを取得するといったことも可能ですが、かなり複雑になります。
まずはテーブルデータ全体を読込む方法をご紹介します。)
EXCELで作ったファイルを読込むには2つの方法がございます。
1)EXCELで保存時にCSV形式で保存し、[CSV入力]コンポーネントを使ってMZPlatform上に読込む。
サンプルファイル「\MZPlatform\2.4\AP_DATA\Sample\CSV入出力.mzax」がございます。「ドキュメントインデックス」から説明文書もご覧頂けます。
2)[データベースアクセス]コンポーネントを使用し、EXCELを一種のデータベースソフトとして接続、SQL文でデータを取得する。事前にデータソース(ODBC)設定が必要となる。
EXCELへの接続については『エクセル連携導入チュートリアル』P24までをご覧下さい。「\MZPlatform\2.4\AP_DATA\Tutorial」フォルダに各テキストの完成ファイルもございます。
2)に比べると1)の方が設定は簡単です。
目的に応じて使い分けて頂ければと存じます。
> C部署をドロップダウンリストから選択できるようにするには、どうしたらいいのでしょうか?
お送り頂いた画面上[テキストフィールド]の代わりにということでしたら、[コンボボックス]を使って頂くことになるかと存じます。
[コンボボックス]に一括してデータを設定するには
1)[テーブル]「指定列の列データをリスト形式で取得する(int)」
取得方法:固定値、メソッド/値:部署名の列の列番号
2)[コンボボックス]「全項目のラベル名を設定する(PFObjectList)」
取得方法:メソッド処理結果
メソッド/値:指定列の列データをリスト形式で取得する
の2つの処理をどこかのタイミング(イベント)に設定します。
部署名の入っているテーブルデータは既にMZPlatform上に読込んであるものとします。
関連ファイル:ボタンテキスト位置.mzax
Q112-3:
さて、1件確認したいことがあります。
「バーコード入力導入チュートリアル」の「Step4 製品名を設定する」の「2、製品名設定サブルーチン」にてサブルーチンコンポーネント と文字列格納変数コンポーネントを接続しますが、このときの「起動メソッド」に「substring(int,int)」が存在しません。(P18)マニュアルの間違いでしょうか?それともソフトのバージョンが古いのでしょうか?
A112-3:
MZPlatformのコンポーネントの持つメソッドには、日本語別名が付いたものと、付いていないものとがあります。
「起動メソッド情報」設定画面に一覧で出てきているメソッドには日本語名を付け常時公開する設定をしてありますが、それ以外のあまり使用頻度が高くないと思われるメソッドは英語名のままで普段は隠されています。
「起動メソッド情報」設定画面の上部の「全メソッド対象」にチェックを入れると、隠れていたメソッドも含め全て英語名で表示されます。
なおMZPlatform2.4からは「subString(int,int)」には「部分文字列を取得する(int,int)」という日本語別名が付けられています。
テキストの記述が古く、お手数をお掛け致しました。早速テキストは改訂いたします。今後ともお気付きの点がございましたら、ご連絡頂けますと幸いです。
Q112-4:
引き続き表題の件にて教えていただきたいことがあります。
@画像カタログを1つのフレームに作るように画像をずっと取り込んでいますが、ディスプレイのサイズよりも大きくなり、スクロールしないと見えなくなりました。スクロールのコンポーネントの接続方法を教えてください。
Aすでに作っていた注文票のフレームもコンパクトにしました。
この注文票フレームを前述の@と一緒に表示させるにはどうすればいいのでしょうか?ただし、以前申しましたように、注文票はたとえば画面の上部に固定とし画像フレームだけをスクロールさせ、注文したい弁当の画像をクリックしたら、注文票の方に反映されるようにしたいです。
Bラベルの文字の色はどうやって変えますか?
※前回作成方法を聞いた「ラベルを常に最前面にもってくるやり方」ですが今回は、弁当写真と弁当名を一緒に画像として取り込みラベルに弁当単価を入れることで、階層の順序の件はクリアしました。しかし、今後のために知っておきたいので階層順序の設定方法は教えてください。
また追加で質問ですが、
@今回送ったような二つのプログラムを合体させるのに、簡単な方法がありますか?
Aボタンを複数選んで、サイズ設定をしたいのですがどうすればいいでしょうか?
A112-4:
[スクロールパネル]の画面配置、[ボタン]のテキストについて回答致します。
1.後からご連絡頂いたメール(2010/02/10 08:27:45付)にもありましたように、お作りになった2つの内容を画面上に配置し、下側の部分はスクロールさせたいということですが
@それぞれのアプリケーションにパネルを一つずつ追加します。
[画面編集]画面上で、フレームにパネルを配置し、パネル上に各部品を配置し直します。「画面編集」画面左側のツリー図上でコンポーネント名をドラッグしてパネルの名前の上で放すと、パネル上に移動します。
せっかく配置したものをお手数が掛かりますが、宜しくお願い致します。
A2つのアプリケーションとも画面にパネルに配置したら、一旦保存をし、一方のアプリケーション上に[挿入]ツールボタンでもう一方のファイル内容を追加します。
(挿入したファイルの処理内容のうち、[アプリケーション]コンポーネントを接続元または接続先とした処理は消えてしまいます)
[フレーム]が2つありますが、挿入した方の[フレーム]は削除します。
B「画面編集」画面に入り、フレームの上に載っているパネルは右クリックして一旦削除し、配置し直します。
「配置方法:領域配置」に変更します。
「画面編集」画面上で右クリック>コンポーネント追加>パネルと選ぶとNorth,South,East・・・と最後に出てくるので、上側に配置したいパネルを「North」に配置します。
C「画面編集」画面上、右クリック>新規コンポーネント追加>スクロールパネル>Centerと選び、新規に[スクロールパネル]を追加します。
Centerは常にフレームの中央に配置される形になります。
D左側ツリー図、[スクロールパネル]の名前の上でクリックします。
右側の領域が[スクロールパネル]の領域になったところで、2つ目のパネルを追加します。
「配置方法:領域配置」に変更します。(先に別な配置方法だったのを領域配置に変更すると、全てCenterに配置されます)
2.[ボタン]のTEXTの色の設定は[ボタン]の上で右クリック>色>前景色>[設定する...]とします。
[ボタン]のサイズは、右クリック>サイズ>[設定する...]で設定できますが、一度に複数のコンポーネントの設定を行う方法はございません。