2009-03-06 19 views
1

古いVB6アプリケーションの色のテーマを変更しようとしています(もう少し現代的に見せてください)。VB6フォーム上のすべてのコントロールの色を変更する

フォーム上の各コントロールのバックカラーを、コントロールごとに(ラベル、ボタン、フレームなど)変更せずにどのように変更できるか教えてもらえますか?

私は約50のフォームを持っています。これらはすべてこのようなコントロールを含んでいて、コード内の各フォームに対してこれを手動で行うのは時代がかかります。

私はVB6アプリケーションのスキン/テーマをどのようにすることができるかについて、より良い提案とアイデアを公開していますか?あなたがControlsコレクションをループし、それぞれの背景を設定することにより、実行時にこれを行うことができ、事前

答えて

5

あなたはそれぞれを行い、必要のないコントロールを削除することができます。

Dim frmThing as Form  
Dim ctlThing as Control 

For Each frmThing In Forms 
    frmThing.BackColor = vbYellow 
    For Each ctlThing In frmThing.Controls 
    If (TypeOf ctlThing Is TextBox) Or _ 
    (TypeOf ctlThing Is CheckBox) Or _ 
    (TypeOf ctlThing Is ComboBox) Then 
     ctlThing.BackColor = vbYellow 
    End If 
    Next 
Next 
+0

@Tomalak:yes Typeof xはyです(yはVB6では有効ですが、あなたはそれを知るには若すぎます;) – AnthonyWJones

+0

VBプロジェクトでこの種の機能を常に覚えています。 IF ORステートメントの代わりに、私はCASEを使用します。 – Ferdeen

+0

@AnthonyWJones:年齢でなければなりません。 ;-)私は実際にTypeOfを認識しませんでした...まあ、それを "If文の拡張"と呼ぶことができます。それはそれ自体のオペレータではありませんが、それは知っていいです。 – Tomalak

1

感謝。これはあなたのテーマを変更する柔軟性を与えるでしょう。

ソースファイルを操作してコントロールを解析し、必要な背景色を入力/変更することもできます。このアプローチはおそらくより少ない報酬のために、より多くの仕事です。

+0

私は実行時にこれを行うことができるようにして、色のための単一の値を1つの場所にのみ設定することができます。 thanks – Belliez

+0

その場合、Themeクラスを作成し、読み込んだときに各フォームを渡し、すべての色/テーマロジックをそこに配置します。別のCOM DLLとしてビルドした場合は、再利用したり、コミュニティにプッシュしたりすることができます – MrTelly

+0

私は以下の答えのコードを使用してこれを行いました。しかし、私はこのようにユーザーコントロールを動作させるように見えることはできません! – Belliez

0

今はかなりの年が経っていますが、背景色は「透明」ではありませんでしたか?

すべてのラベルを透明な背景に設定し、フォームの色を一度設定するだけで済みます。

+0

それはラベルを付けるが、他のコントロールはしない。 http://msdn.microsoft.com/en-us/library/aa245036(VS.60).aspx OPに透明をサポートしていないテキストボックスとフレームが記載されています。 – MarkJ

6

.frmファイルは、標準的なANSIテキストファイルです。コントロールの背景色プロパティは、次のようになります -

BackColor  = &H80000005& 

(上記はシステムカラーですが、あなたは下位3つのバイトを使用して、高いバイト0を残して使用してRGBの色を指定することもできます)。

制御などラベルは次のようになります -

Begin VB.Label Label1 
    Caption   = "Hello:" 
    Height   = 285 
    Left   = 90 
    TabIndex  = 3 
    Top    = 480 
    Width   = 1305 
End 

だから、そのタスクが.FRMファイルを解析し、挿入(または交換)により字句のBackColor属性行を行うことができます。

編集:

MarkJによってコメントで掲示

お役立ちリンク:Form Description Propertiesただ、完全性について

+0

+1これは私の "コード変更不要" --ideaです。私はスキニングメカニズムを開発することはOPが後になったものだとは思わない。 – Tomalak

+0

+1。これは私たちが同様の状況でしたことです。 FRM形式がオンラインで文書化されていることに言及する価値があるかもしれません。 http://msdn.microsoft.com/en-us/library/aa716301(VS.60).aspx – MarkJ

1

...

ssCheckは、BackColorプロパティを持っていないと、前述を使用してエラーを生成しますメソッド

〜マイク〜

関連する問題