■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#5865-0色値の判断石川 博子2002-03-11(月) 16:26
     #5874-0RE#5865:色値の判断魔界の仮面弁士2002-03-11(月) 17:46
     #5875-0RE#5865:色値の判断K.J.K.2002-03-11(月) 19:01
     #5876-0RE#5874:色値の判断石川 博子2002-03-11(月) 19:14
     #5877-0RE#5875:色値の判断石川 博子2002-03-11(月) 19:35
     #5878-0RE#5876:色値の判断藤代千尋2002-03-11(月) 21:19
     #5879-0RE#5878:色値の判断石川 博子2002-03-11(月) 21:31
#5865-0
色値の判断
皆さんこんにちは。教えてください。
TextBoxとMaskEdBoxを利用して、MSFlexGridへの入力処理を考えています。
その為、MSFlexGridの状態を***Boxへの反映処理をします。
MSFlexGridの色値に「0」がある場合、標準色となるとヘルプに記載があったので
以下のようなコーディングをしました。
テキストボックスの色の判断を以下の用にしています。

TextBox.ForeColor = MSFlexGrid.CellForeColor	'表示色
If TextBox.ForeColor = CVar(0) Then TextBox.ForeColor = vbBlack
            ~~~~~~~
同じように、マスクエディットコントロールを利用するとエラーとなってしまいます。

MaskEdBox.ForeColor = MSFlexGrid.CellForeColor	'表示色
If MaskEdBox.ForeColor = CVar(0) Then MaskEdBox.ForeColor = vbBlack

CVar(0)の部分を 0 にしてもダメなのです。
ちなみに、以下のコーディングではエラーにはなりません。

TextBox.BackColor = MSFlexGrid.CellBackColor	'表示色
If TextBox.BackColor = 0 Then TextBox.BackColor = vbBlack

***Boxに代入したあとの判断ではなく、MSFlexGridの色を判断してもエラーとなります。
「Visual Basicでサポートされていないオートメーションが変数で使用されています」
一体、どのように判断すれば良いのか、教えてください。
よろしくお願いします。
#5874-0
RE#5865:色値の判断
> If MaskEdBox.ForeColor = CVar(0) Then MaskEdBox.ForeColor = vbBlack

もしかして、以下のいずれかを行っていませんか?
  1. ControlsコレクションをFor Eachで回している
  2. MaskEdBoxを、Control型やObject型などにレイトバインドしている
この場合、
》 「Visual Basicでサポートされていないオートメーションが変数で使用されています」
というようなエラーが発生します。

これは、色系プロパティが、VBがサポートしていない「符号無し32bit整数型」
(VarType関数でいえば、19 という値になる)を返すためだと思われます。
# この現象が発生するのは、ActiveXコントロールのみです。
# 標準コントロールでは、このような現象は発生しません。


通常は、VBがそれらを符号付き32bit整数型(つまり、Long)に変換してくれるみたいですが、
レイトバインドの場合は、自動変換がなされないため、そのような現象が発生するのではないでしょうか。
# あくまで想像。

> 一体、どのように判断すれば良いのか、教えてください。
一度、別のデータ型に変換してから比較すれば、処理できるかと思います。

   Dim C As OLE_COLOR
   C = MaskEdBox.ForeColor
   If C = 0& Then
       MaskEdBox.ForeColor = vbBlack
   End If
#5875-0
RE#5865:色値の判断
"OLE Automation" (stdole2.tlb)を[参照設定]しましょう。
# ほとんどのインプロセスActiveXコンポーネントは、↑があることを
# 前提としています。
#5876-0
RE#5874:色値の判断
魔界の仮面弁士さん、こんにちは。レスをありがとうございます。

>   1. ControlsコレクションをFor Eachで回している
>   2. MaskEdBoxを、Control型やObject型などにレイトバインドしている

すいません。「レイトバインド」というのは、どのような意味なのでしょうか?
型を変更している、という意味だと思うのですが...知識不足でごめんなさい。

私がコーディングしているプログラムは、MaskEdBox処理もTextBox処理も共通関数にしていました。
これらがのっているFormを引数(Object型)として渡していました。
その為、レイトバインド(?)されていたと考えられます。

それで最初に、Object型をFrom型に修正(色判断処理はそのまま)してみたのですが、
この方法でも同じエラーとなりました。

> 一度、別のデータ型に変換してから比較すれば、処理できるかと思います。
>    Dim C As OLE_COLOR
>    C = MaskEdBox.ForeColor
>    If C = 0& Then
>        MaskEdBox.ForeColor = vbBlack
>    End If

アドバイス通りに処理したところ、エラーも起こらず、考えていた処理をすることができました。
本当にありがとうございました。
#5877-0
RE#5875:色値の判断
K.J.K.さん、こんにちは。レスをありがとうございます。

> "OLE Automation" (stdole2.tlb)を[参照設定]しましょう。
> # ほとんどのインプロセスActiveXコンポーネントは、↑があることを
> # 前提としています。

VB6のメニューバー-プロジェクト-参照設定を確認したところ、
"OLE Automation"は、参照設定対象となっていました。
今後、インプロセスActiveXコンポーネントを利用して、動き等がおかしかった場合、
ここの項目を確認してみます。(今まで、確認したことがありませんでした)
ありがとうございました。
#5878-0
RE#5876:色値の判断
> すいません。「レイトバインド」というのは、どのような意味なのでしょうか?
> 型を変更している、という意味だと思うのですが...知識不足でごめんなさい。

「型の決定をいつするか」
「変数に入れるオブジェクトの型は、いつ決まるか」
という話です。

レイトバインド(Late bind:実行時バインド):As Object など使い、実行時に決定される
アーリーバインド(Early bind:事前バインド):As Textbox などを使い、実行前に決定する
#5879-0
RE#5878:色値の判断
藤代千尋さん、こんばんは。レスをありがとうございます。

> 「型の決定をいつするか」
> 「変数に入れるオブジェクトの型は、いつ決まるか」
> という話です。
> レイトバインド(Late bind:実行時バインド):As Object など使い、実行時に決定される
> アーリーバインド(Early bind:事前バインド):As Textbox などを使い、実行前に決定する

なるほど。説明ありがとうございます。
勉強になりました。
などを使い、実行前に決定する
このページと関連する記事:
#41233-0EM_GETSELのバグ?回避について2001-04-04(水) 00:11
#10585-0Microsoft Flex Grid Control5.02000-05-16(火) 11:32
#5883-0GetExitCodeProcessについて2002-03-12(火) 10:31
#11208-0Control型とObject型について1999-12-08(水) 14:18
#11164-0FileSystemObjectを使ったexeが実行できない2000-09-06(水) 22:05
#5951-0テキストボックスに入力された文字が整数かどうか判定したい2000-02-16(水) 18:52
#10026-0IsNumeric関数の使い方2000-07-27(木) 15:15
#1402-1変数名の後ろの記号2004-03-19(金) 22:16
#17870-0実行時エラー94の回避方法2000-03-14(火) 10:45
#28965-0ActiveX DLLの利用2000-08-30(水) 17:20
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)