- 締切済み
VBのBackColorの統一手法について
VB6にて作成したexeが200くらいあるのですが、当時NT4.0、Win95を対象に作成していたので問題がなかった(気づかなかった)のですが、WinXPで作成した画面を見るとラベルのところと背景のところの色などが統一できていないのに気づきました。WinXPでもクラシックスタイルにして色の設定を落とすと問題ないのですが、それもおかしいと思うので修正したいのですが、なにぶん数が多いので対象となるexeのみ抽出したいと思っています。が、その方法が分かりません。(地道な作業しかないのかもしれませんが・・・)もし何かよい手法やご存知の方がいらっしゃいましたらどうぞよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- mfuku
- ベストアンサー率50% (173/345)
ふたたび#1の者です。 >なにやらInputManとかいうOCXをインストールしているらしくそれにimMaskとかいうのがあって、それにはラベル部分とテキストを入力する部分が一緒になってて、VB開いた時の右側のプロパティの部分にはテキストを入力する部分のBackcolorしかなくて、画面上で右クリックするとキャプションというのがあってという感じだったのです。 おっしゃるとおり、InputMan(v5で試しました)にはCaption部分のBackColorがないですね。 しかし、画面のデザイン色を変更してウィンドウの背景色を変な色にしてみましたが、ちゃんとシステムカラーが設定されているようでした。 いったい、外部に公開されてないはずのCaption部分のBackColorをどうやって変更したのでしょう? 何も考えないで貼り付けて使っていれば大丈夫なはずですが・・・。 考えられるのは、内部的なプロパティがコントロールのバグによりシステムカラーから個別色に変わってしまうと言うことが考えられます。 以前、同社製品のSpreadにありました。 その時は、力業でfrxをバイナリエディタで解析して修正しましたが・・・。 コントロールのバージョンはいくつでしょう? またパッチはあたってますか?
- todo36
- ベストアンサー率58% (728/1234)
# labelコントロール等のBackColorプロパティの話だと思ったのですが。。。 >テキストフィールドタイプのプロパティ >ラベル部分 >フィールド部分 >プロパティを開いてキャプションのBackColor すいません。全く意味が分かりません。
補足
すいません。文章能力がなくて・・・ ># labelコントロール等のBackColorプロパティの話だと思ったのですが。。。 そうなんです。そのとおりなのです。 なにやらInputManとかいうOCXをインストールしているらしくそれにimMaskとかいうのがあって、それにはラベル部分とテキストを入力する部分が一緒になってて、VB開いた時の右側のプロパティの部分にはテキストを入力する部分のBackcolorしかなくて、画面上で右クリックするとキャプションというのがあってという感じだったのです。 標準のVBじゃなかったようです。 わざわざお手数かけてすいません。 もしInputManとかご存知でしたら教えて下さい。
- todo36
- ベストアンサー率58% (728/1234)
.frmファイルを直接いじるという手もあります。 テキスト検索機能があるテキストエディタ(mifes等)にて 対象ファイル= *.frm 検索キー="BackColor" を検索して、タグジャンプ→編集という手順が効率いいです。
お礼
回答ありがとうございます。 幸運にもmifesがインストールされていたので早速実行してみましたが、backcolorだと思った以上に検索されてしまうのですね。ただ、VBのファイルとかも一般のエディタで検索できる事が分かりました。 ありがとうございました。 やはり地道に修正していくしかないようですね・・・
補足
テキストフィールドタイプのプロパティだとラベル部分とフィールド部分があると思うのですが、どうやらプロパティを開いてキャプションのBackColorがおかしいようです。 (ラベルのほう) この部分のみ抽出または判別する方法はないのでしょうか? また、お教え頂いた方法で抽出したBackcolorはVBを直接開いた場合どこにソースがあるのでしょうか?*.frmのソースを直接検索しても「見つかりません」となるのですが。。。 どうぞよろしくお願いします。
- mfuku
- ベストアンサー率50% (173/345)
システムカラーのvbButtonFaceを使用せず&HC0C0C0が指定されていたわけですね。 私の場合、これを回避するため、パブリックプロシージャを標準モジュールかクラスモジュールにForm_Load時に必ず呼び出される関数を作成し対処してます。 その関数では、Formの背景色や、ラベルやパネルなど強制的に背景色を設定してます。 ラベルやパネルなどはFormにいくつ存在するかわかりませんが For Each を使用すればいくつ存在していても一括して扱えますね。 すべてのFormのForm_Loadイベントにその関数をCallする部分を挿入しなければならない手間はありますが、プロパティーシートを開いて全ての画面の全てのコントロールを変更していくより遙かにましだと思います。 また、今後は、共通的な画面仕様を変更する場合一括して変更することが容易になりますので今後の保守性も向上します。
お礼
早速の回答ありがとうございます。なるほど一つ一つ開いてプロパティを修正しなくてもいい方法があるんですね。 ただ今回は指定しているところと指定してないところが半々?あるのでプロパティを修正する事になると思うのです。その際その判別方法はないかな~と思い質問させて頂きました。 このアドバイスは次回作成時に考慮したいと思います。 ありがとうございました。
補足
>いったい、外部に公開されてないはずのCaption部分のBackColorをどうやって変更したのでしょう? おそらく普通に貼り付けて周りの色に合わせようと右クリックしてプロパティ→キャプション→backcolorで設定したのだと思います。(すいません。今は当時の開発者はいないので想像でしか分かりません) >コントロールのバージョンはいくつでしょう? コントロール?InputManのバージョンは6.0Jです。 >またパッチはあたってますか? おそらくあたってないと思います。何処をみれば分かりますか? マイナーな話ですいません。 1個1個開いていけば直せるのですが200以上のexe*数十個のプロパティを修正となると頭が痛くなります・・・ どうにかしてこの部分のみ抽出して修正する事ができないでしょうか?