フォーラムへの返信
-
投稿者投稿
-
MZPlatformユーザー会キーマスター
下記長文になりますが、解説します。
スレッドとは、起動メソッドの実行やイベント発生が、一つずつ順番に処理が進むまとまりとお考え下さい。あるスレッドの処理中に、モーダルダイアログの表示が含まれていると、モーダルダイアログが閉じられるまでそのスレッドの処理は止まります。モーダルダイアログの表示のあとに追加されている起動メソッドは、ダイアログが閉じられてから実行されます。
例えば、ボタンのアクションイベント発生は、画面表示用のメインのスレッドで実行されていて、その処理中にメッセージダイアログの表示が含まれていると、メッセージダイアログが閉じられるまで他の部品に触れなくなります。これがブロックと表現した状態です。ただし、このようにモーダルダイアログを表示すると、同じスレッドの中で時間のかかる処理をしながら画面をブロックしてダイアログを表示することはできません。ダイアログ表示の前に時間のかかる処理を実行すると、それが終わってからダイアログが表示されますし、ダイアログ表示の後に時間のかかる処理を実行すると、ダイアログが閉じてから処理が実行されます。
進捗ダイアログは属性でモーダルかそうでないかが選べますが、今回の使用例はモーダルで表示しています。重要なのは、時間のかかる処理を別のスレッドで実行開始してから、進捗ダイアログを表示している点です。この順番を逆にすると動きません。別のスレッドで明示的に実行するためには、スレッドアロケータかタイマーを使う必要があります。このようにすると、時間のかかる処理を実行しながら、モーダルダイアログを表示することができます。そして、時間のかかる側で進捗ダイアログの状態を更新していて、その処理が終わったら進捗ダイアログを閉じています。
進捗ダイアログの取消ボタンは、時間のかかる処理の状況とは独立に、進捗ダイアログを閉じてしまいます。何もしなければ、進捗ダイアログは閉じたけれども時間のかかる処理は別スレッドで終わるまで継続します。
進捗ダイアログを表示している側のメインのスレッドと、時間のかかる処理を実行しているスレッドは独立に動作しているので、どちらかに戻るという表現は適切ではありません。単にモーダルダイアログを表示しているとメインのスレッドが止まっていて、閉じると動くというのが正しいです。
今回は省略しましたが、進捗ダイアログの取消ボタンのアクションイベント発生では、時間のかかる処理を途中で止める処理を記述する必要があります。もちろん、進捗ダイアログの表示と時間のかかる処理のスレッドが別なので、取消ボタンを押した瞬間の別スレッドの処理の状態は多少のタイムラグがあるでしょう。それでも、例えば今回の例では繰返し処理を実行しているので、取消ボタンを押したときに繰り返し処理の現在値を取得してそれを繰り返し処理の終了値に設定すると、繰り返し処理を途中で終了することができて、別スレッドの処理を早めに終了することはできます。
このように、進捗ダイアログを使うためにはスレッドの理解が必要で、スレッドの理解はなかなか難しいので、いろいろ実験して試してみてください。
MZPlatformユーザー会キーマスターデータベースへの登録方法について、回答が漏れていたので追記します。
通常は一行ずつのSQL文を作成して実行するのが良いと思います。
MZPlatformユーザー会キーマスター時間のかかる処理を実行中のときに、ダイアログを表示して操作をブロックするためには、時間のかかる処理を別のスレッドとして実行して、そのあとでモーダルダイアログを表示します。時間のかかる処理が終了したときにダイアログを閉じれば、画面の操作が再度可能になります。
進捗ダイアログは、上記のような使い方をしたときに、全体のどの程度まで処理が進んだかを表示することができるコンポーネントです。例えば、繰り返し処理の全体の回数を最大値として、現在値を更新すれば、進捗状況が表示されます。
つまり、使い方としてはスレッド実行と進捗ダイアログの両方の組み合わせとなりますが、適切なサンプルが配布できていないので、添付していただいたものを改変して使用例のサンプルとしました。添付の内容をご確認いただき、ご不明な点があれば再度お問い合わせください。
添付ファイル:
MZPlatformユーザー会キーマスター確認ですが、サンプルの「勤務時間計算」についてはご覧いただいているでしょうか。場所は、インストールフォルダのAP_DATA\Sampleに含まれています。簡易的な解説PDFはdocs\Sampleにあります。
サンプルをご覧いただくとわかりますが、カレンダーを用いた計算では休日分を自分で引く必要があります。まずはご覧いただき、ご不明な点をお問い合わせください。
なお、日付選択ダイアログの「休日を追加する」は、日付選択ダイアログ上で休日の色で表示するためのものです。
メソッドの引数に文字列で指定してもうまくいかないので、日付入力フィールド等を用いて日付データを指定していただけますでしょうか。残念ながら、リストで指定するメソッドはないので、繰り返しFORを用いるなどで対応をお願いします。
MZPlatformユーザー会キーマスターおそらくですが、MySQLとの接続に必要なJDBCドライバの不具合が原因と思います。
お手数ですが、別バージョンのドライバに置き換えて試してみていただけますでしょうか。JDBCダウンロードページ(https://dev.mysql.com/downloads/connector/j/)より、以下の手順でバージョン5.1.47を入手してお使いください。
(1) このページの「Connector/J 8.0.13 」と書かれている部分の右側の「Looking for previous GA versions? 」をクリックします。
(2) 「Connector/J 5.1.47」に移動しますので、プルダウンメニューから「Platform Independent」を選択し、「Platform Independent (Architecture Independent), ZIP Archive」のDownloadボタンをクリックします。
(3) 表示されたページ最下部の、「No thanks, just start my download.」をクリックすると、ダウンロードが開始されます。以上です。よろしくお願いします。
MZPlatformユーザー会キーマスターファイルが正常にダウンロードできない状態になっておりました。ご迷惑をおかけして申し訳ありません。すでに修正しましたが、同じものをここに添付しておきます。
添付ファイル:
MZPlatformユーザー会キーマスター残念ながら、Windowsのショートカットが指し示す実体のファイル名やフォルダ名は、MZで取得できません。ショートカットが指し示す実体のファイルやフォルダのパス名を直接お使いください。
実体のフォルダ名をファイルコンポーネントに設定すれば、配下に存在するファイル名のリストが取得できると思います。
MZPlatformユーザー会キーマスター帳票の余白ではなく、印刷ダイアログのページ設定のマージンのことですね。
こちらで確認したところ、プリンタの機種によるかもしれませんが、確かに変更できませんでした。
これはプリンタ側の制限だと思います。この場合、帳票の余白を0にすると印刷範囲が少なくなって、ご指摘のように画像が切れますので、むしろ帳票の余白を印刷ダイアログのマージンに合わせた方が良さそうです。- この返信は6年、 4ヶ月前にMZPlatformユーザー会が編集しました。
MZPlatformユーザー会キーマスター帳票編集画面か帳票プレビュー画面にある「用紙設定」ボタンで、上下左右の余白を0に設定できますが、何か他に問題があればお知らせください。
MZPlatformユーザー会キーマスター「外部プログラム通信」コンポーネントの動作は起動対象によって変わってしまうのですが、今回のVBScript実行に関しては実行結果を取得してから次の処理に移ることができません。どうしても実行の指示後、非同期で遅れてデータ生成イベントが発生します。
そのため、繰り返し計算をFORループで単純に実行することができません。上記の動作の仕組みを理解した上で同様の処理を実現する必要があります。一例として、そのサンプルを添付します。回数のカウンタとして整数格納変数と、繰り返しおよびその終了条件として等価演算を使用しました。
ご確認ください。
添付ファイル:
-
投稿者投稿