C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: コマンドボタンの表示が不正(vb6)


(過去ログ 78 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■46475 / inTopicNo.1)  コマンドボタンの表示が不正(vb6)
  
□投稿者/ エルドラド (1回)-(2010/02/03(Wed) 13:52:53)

分類:[VB6 以前] 

2010/02/03(Wed) 13:54:03 編集(投稿者)

お世話になります。

os:WindowsXP + SP3
vb:vb6 + SP6

以下の様な2つのフォームを有するプロジェクトがあります。

・メニュー画面(Form1)
・メンテナンス画面(Form2)

メニュー画面には「メンテナンス画面へ」ボタンを配置
メンテナンス画面には「登録」ボタンと「閉じる」ボタンを配置

プログラム起動時にメニュー画面が表示され、
「メンテナンス画面へ」ボタンを押すとメンテナンス画面が表示されます。
※メニュー画面は非表示になります。

メニュー画面の「メンテナンス画面へ」押下時のコーディング内容は

Form1.Hide
Form2.Show

メンテナンス画面の「閉じる」ボタン押下時のコーディング内容は

Unload Me
Form1.Show


↑のコーディング内容で

1.メニュー画面の「メンテナンス画面へ」ボタンを押す
2.メンテナンス画面の「閉じる」ボタンを押す
3.メニュー画面の「メンテナンス画面へ」ボタンを再度押す

以上の動作を行うとメンテナンス画面の「登録」ボタンの表示が背景を透過したような表示になります。
※メンテナンス画面の奥(裏)にあるアプリがエクセルならエクセルの表示が透過され
 IEであればその画面が透過されます。
そのメンテナンス画面をドラッグし、移動させても表示は正常には戻りません。

ただ、メンテナンス画面の「閉じる」ボタン押下時のコーディングを
Unload Me でなく Form2.Hide とした場合はこの現象が発生しません。

なぜこの様な現象が発生するか情報をお持ちの方が居ればよろしくお願いいたします。
 

引用返信 編集キー/
■46477 / inTopicNo.2)  Re[1]: コマンドボタンの表示が不正(vb6)
□投稿者/ 魔界の仮面弁士 (1468回)-(2010/02/03(Wed) 15:12:05)
No46475 (エルドラド さん) に返信
> なぜこの様な現象が発生するか情報をお持ちの方が居ればよろしくお願いいたします。

VB6でコントロールの描画が崩れるケースとして、思い当たることといえば:

(1) グラフィックスドライバーの不具合
(2) コンテナの ClipControls プロパティによる再描画エリアの違い
(3) 重い処理が行われた事により描画処理が追いつかなかった

---
(1) だとしたら、別バージョンのドライバーに変更してみるか、
別メーカーのボードに切り替えるぐらいしか思い当たりません。

(2) は、既定値(.ClipControls = True)の方が無難だと思います。

(3) は、Refresh あるいは DoEvents の実行で改善される可能性があります。


> ただ、メンテナンス画面の「閉じる」ボタン押下時のコーディングを
> Unload Me でなく Form2.Hide とした場合はこの現象が発生しません。

Form の (Query)Unload イベントにて、何か時間のかかる処理が記述されていませんか?
その場合は、QueryUnload の先頭で Me.Hide しておくと、描画崩れが改善されるかもしれません。
引用返信 編集キー/
■46483 / inTopicNo.3)  Re[2]: コマンドボタンの表示が不正(vb6)
□投稿者/ エルドラド (2回)-(2010/02/03(Wed) 17:35:40)
お世話になっております。

No46477 (魔界の仮面弁士 さん) に返信
> (1) グラフィックスドライバーの不具合
> (2) コンテナの ClipControls プロパティによる再描画エリアの違い
> (3) 重い処理が行われた事により描画処理が追いつかなかった
> ---
> (1) だとしたら、別バージョンのドライバーに変更してみるか、
> 別メーカーのボードに切り替えるぐらいしか思い当たりません。
>
> (2) は、既定値(.ClipControls = True)の方が無難だと思います。
>
> (3) は、Refresh あるいは DoEvents の実行で改善される可能性があります。

(1)につきましては、後出し情報で申し訳ありませんが別の環境(Win98SE や 別のハード構成のWinXP)
でも同様の現象が起こっているので関係なさそうです。

(2)につきましてForm2のClipControlsプロパティは"True"でした。

(3)Form1、Form2 ともにLoad、Unloadイベントに特に重い処理は行っていませんのでこちらも関係なさそう(?)です。



その後ソースを見直してみたところあやしいと思われる箇所がありました。
※もとは別の者が作った画面に私が機能追加を行っており、見落としが結構ありました。。。orz

実際のForm2(メンテナス画面)にはコマンドボタンやテキストボックス等多くのコントロールが配置されています。
なるべくキーボード操作のみで完結させるためにEnterキー押下にてフォーカスの移動を行うようになっています。
そのための事前処理としてForm2のActivateイベントに以下のようなコーディングがされています。

〜〜〜〜〜 省略 〜〜〜〜〜〜
Dim Ctrl(100) As Control

Set Ctrl(0) = cmdEntry '登録ボタン
Set Ctrl(1) = txtName(0)
Set Ctrl(2) = txtNo1(0)
Set Ctrl(3) = txtNo2(0)
Set Ctrl(4) = txtNo3(0)
Set Ctrl(5) = txtNo1(1)
Set Ctrl(6) = txtNo2(2)
Set Ctrl(7) = txtNo3(3)
〜〜〜〜〜 省略 〜〜〜〜〜〜


フォーカスを移動させたい順にコントロール配列にセットしています。

Form2の「閉じる」ボタン押下時の処理として Unload Form2 でも Form2.Hide でも
Form2.Show を行えばForm2のActivateイベントが発生するので同様に思えるのですが

> ただ、メンテナンス画面の「閉じる」ボタン押下時のコーディングを
> Unload Me でなく Form2.Hide とした場合はこの現象が発生しません。

↑の様な結果になります。

何かお気づきの点があればよろしくお願いいたします。
※後出し情報ばかりで申し訳ありません m(__)m

引用返信 編集キー/
■46495 / inTopicNo.4)  Re[3]: コマンドボタンの表示が不正(vb6)
□投稿者/ やじゅ (1503回)-(2010/02/03(Wed) 21:56:08)
やじゅ さんの Web サイト
No46483 (エルドラド さん) に返信
> そのための事前処理としてForm2のActivateイベントに以下のようなコーディングがされています。

フラグを立てて、Activateイベントを起動時の1回のみの動作にしたらどうなりますか?

引用返信 編集キー/
■46509 / inTopicNo.5)  Re[4]: コマンドボタンの表示が不正(vb6)
□投稿者/ エルドラド (3回)-(2010/02/04(Thu) 09:31:51)
お世話になっております。

No46495 (やじゅ さん) に返信
>>そのための事前処理としてForm2のActivateイベントに以下のようなコーディングがされています。
>
> フラグを立てて、Activateイベントを起動時の1回のみの動作にしたらどうなりますか?

初回のみActivateイベント内の処理が有効になるようにしてみましたが結果は変わらずでした。

関係ない情報かもしれませんが

現象の起こるコマンドボタンはバックカラーを有効にするためStyleプロパティは1(グラフィックス)に設定しています。
0(標準)に変えると現象は発生しません。

引用返信 編集キー/
■46510 / inTopicNo.6)  Re[5]: コマンドボタンの表示が不正(vb6)
□投稿者/ エルドラド (4回)-(2010/02/04(Thu) 10:03:03)
お世話になっております。

補足情報です。
該当の画面(メンテナンス画面)を表示したまま離席し、自席に戻ってみるとスクリーンセーバーが動いていました。
マウスを動かし、スクリーンセーバーを解除したところ該当のコマンドボタンが今度はスクリーンセーバーの背景色(黒)になってました。。。
コーディングの問題ではないのでしょうかね・・・。

引用返信 編集キー/
■46512 / inTopicNo.7)  Re[6]: コマンドボタンの表示が不正(vb6)
□投稿者/ 魔界の仮面弁士 (1470回)-(2010/02/04(Thu) 10:31:54)
No46510 (エルドラド さん) に返信
> マウスを動かし、スクリーンセーバーを解除したところ該当のコマンドボタンが今度はスクリーンセーバーの背景色(黒)になってました。。。

当方にて、Style [標準]、[グラフィックス] な 2 つのコマンドボタンを配置したアプリを起動し、
スクリーンセーバーを表示/解除させてみましたが、同様の現象は確認できませんでした。


> コーディングの問題ではないのでしょうかね・・・。

Windows XP でしたよね。

Visual Style をオフにした状態(クラシック スタイル)と
標準の Luna (Windows XP スタイル)の場合とで
描画結果は変化しますか?

また、そのスクリーンセーバーが焼き付く現象は、先に書かれていた
『Win98SE や 別のハード構成のWinXP』でも再現するのでしょうか?
引用返信 編集キー/
■46513 / inTopicNo.8)  Re[7]: コマンドボタンの表示が不正(vb6)
□投稿者/ エルドラド (5回)-(2010/02/04(Thu) 11:05:05)
お世話になっております。

No46512 (魔界の仮面弁士 さん) に返信
> Windows XP でしたよね。

はい、そうです。

> Visual Style をオフにした状態(クラシック スタイル)と
> 標準の Luna (Windows XP スタイル)の場合とで
> 描画結果は変化しますか?

スクリーンセーバー解除後のボタンの状態について以下のテストをしてみました。

■メニュー画面→メンテナンス画面(ボタンの表示は正常)から開始

Luna   :正常に表示
クラシック:正常に表示

■メニュー画面→メンテナンス画面→メニュー画面→メンテナンス画面(背景が透過したような状態)から開始

Luna   :スクリーンセーバーの背景(黒)になる
クラシック:スクリーンセーバーの背景(黒)になる


新たに気づいたことですがスクリーンセーバーに限らず、メンテナンス画面と他のアプリ(エクセル等)を
alt + tab(マウス操作でも同様)で切り替える(メンテ画面→エクセル→メンテ画面)と
該当ボタンに重なった部分の描画内容が張り付いてるようです。

VBのコーディングによってボタンがそのような状態(重なった部分の描画内容が張り付く)になってしまっているのがマズイんでしょうね。


> また、そのスクリーンセーバーが焼き付く現象は、先に書かれていた
> 『Win98SE や 別のハード構成のWinXP』でも再現するのでしょうか?

↑の環境は客先のものですので近々に確認することは難しそうです m(__)m

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -