最小化復帰後の動作
みなさまお世話になっております。
shinpeiです。
あるお客様のシステムをuniPaaSV1Plusからxpa4.6.1 PT3へマイグレーションしました。
動作がよくわからない状況になっておりまして、お助けいただきたく投稿いたしました。
現象としては、
Magicシステム内で並行実行した各種帳票や入力画面を複数最小化します。
Magic自体を最小化します。
タスクバーのMagicをクリックし、システムをアクティブにします。
すると、Magic内で最小化しているウィンドウ(左下に複数あり)が、順番にアクティブになっているような動きをし、画面がチラつくような動きをします。
また、最小化前に前面に表示していた入力画面が、非アクティブの状態になってしまいます。(ウィンドウが少しグレーがかる)
このような状況になった方、いらっしゃいますでしょうか。
ちなみに、帳票PGのウィンドウタイプはD=デフォルトです。
タスク構造は
・メインプログラム
・オンライン(メニュー画面)
・バッチタスク(並行実行)
・オンライン(帳票PGなど)
よろしくお願いします。
-
ISHIJIMAさま
ありがとうございます。
画面がチラつくことなく、最小化前の画面状態を維持して復帰すればいいだけなんですけどねぇ・・・。
よくわからん動きで困ります。よく似た別のシステムで、xpa3.2では問題なかったんです!
xpa4.6からおかしいのかも?xpa3.3は試してない・・・。
まずは、単純なプログラムにて検証を行ってみます。
-
ISHIJIMAさま
ありがとうございます。
単純なプログラムでも発生しました。
ボタン3つのオンラインタスク
それぞれのボタンから、並行実行のサブプログラムのオンラインタスクを複数起動し、
Magic内で最小化し、Magic自体最小化した後、タスクバークリックでチラつき現象が発生しました。
サポートに問い合わせしてみます。
-
ISHIJIMAさま
ご検証いただきありがとうございます。
サポートに問い合わせしたところ、現象を確認し調査する旨連絡がありました。
進展ありましたら、また投稿させていただきたいと思います。
-
ISHIJIMAさま
気にしていただきありがとうございます。
難航しているようです。
まだ明確な回答がいただけておりません。
-
サポートから回答がありました。
画面のチラつきに関しては、次回バージョンで修正を行いたいが、まだ修正可能かがわからないそうです。
最小化前にアクティブだったウィンドウを最小化復帰後にそのままアクティブにする件に関しては
サポートからサンプルプログラムをいただき解消できました。
-
ISHIJIMAさま
テクニカル情報に公開されるのでしょうか?
復帰後アクティブにする件に関して、プログラムをそのまま書いてみます。コンポーネント
System
System.Drawing
System.Windows.Formsメインプログラム
変数定義
◆変数1 MainWindow 型:数値:N18C
◆変数2 MainControl 型:.NET
◆変数3 ProgControl 型:.NETタスク前
アクション 式:SharedValSet('WindowState',0) 条件:ISNULL(SharedValGet('WindowState'))①イベント コンテキストがフォーカス取得(G) スコープ:サブツリー
項目更新 ◆変数3 値:DotNet.System.Windows.Forms.Control.FromHandle(WinHWND(0))
アクション 式:SharedValSet('ContextName',CtxGetName()) 条件:DNCast(◆変数3.FindForm().WindowState,DotNet.System.Int32)<>1②イベント ウィンドウサイズ変更 スコープ:サブツリー
③をコール ウェイト:No 条件:SharedValGet('WindowState')=1
項目更新 ◆変数1 値:DotNet.System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle
項目更新 ◆変数2 値:DotNet.System.Windows.Forms.Control.FromHandle(◆変数1)
アクション 式:SharedValSet('WindowState',DNCast(◆変数2.FindForm().WindowState,DotNet.System.Int32))③イベント UE_Focus←ユーザイベント スコープ:サブツリー
SetContextFocus(SharedValGet('ContextName'))
SetContextFocus(SharedValGet('ContextName'))↑なぜか2回コールしないと動かない
ISHIJIMAさまのおっしゃる通り状態を覚えておいて、最小化から復帰したときに再フォーカスするといった感じでしょうか。
.NETを使い慣れてないので、少し苦労しました。
Magicの画面サイズを通常から最大化した時の処理がまだダメそうでした…。最小化しているプログラムにフォーカスがいっちゃいますね。
-
OSや他の要因が絡んでいそうな問題ですと、安直に公開できない要素が潜むこともあると思いますよ。掲載されるかどうかはマジック社の判断ですので、あまりせかすのはやめましょう(笑
-
そうですね、なるべく早くにいろいろな情報を流していただけると助かりますね。
サインインしてコメントを残してください。
コメント
8件のコメント