[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/01/12(Fri) 00:16
投稿者名:tea
Eメール:
URL :
タイトル:
MSFlexGridの行を色分けするには?
MSFlexGridに1行ごとにClipTextの内容を表示させていますが、ClipTextの.TeamCharが"A"
の場合にMSFlexGridに表示させている1行のForeColorを赤色(vbRed)に表示させ、.TeamChar
が"B"の場合にMSFlexGridに表示させている1行のForeColorを青色(vbBlue)にしたいんです。
自力で考えた下記のコードではForeColorがすべて青色になってしまいます。
MSFlexGridの行を色分けする方法を教えてください。よろしくお願いします。
OS WindowsXP
VB6.0SP6

Public Property Get ClipText() As String
   With mp
       ClipText = Format(.TimeOnQuarter, "nn:ss") & vbTab & _
                   .TeamChar & vbTab & _
                   PlayerUniformNumberText & vbTab & _
                   PlayerName & vbTab & _
                   TopicString
        If .TeamChar = "A" Then
            frmMain.MSFlexGrid.ForeColor = vbRed
        ElseIf .TeamChar = "B" Then
            frmMain.MSFlexGrid.ForeColor = vbBlue
        End If
    End With
End Property

投稿時間:2007/01/12(Fri) 00:34
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: MSFlexGridの行を色分けするには?
質問する前にここのMSFlexGrid関係を見て下さい。

 http://hanatyan.sakura.ne.jp/vbhlp/MSFlexNO6.htm#selcolor

投稿時間:2007/01/12(Fri) 08:14
投稿者名:tea
Eメール:
URL :
タイトル:
Re^2: MSFlexGridの行を色分けするには?
>  http://hanatyan.sakura.ne.jp/vbhlp/MSFlexNO6.htm#selcolor

花ちゃんさん、回答ありがとうございます。
サンプルを参考にしてコードを記述してみましたが、MSFlexGridに表示させてみましたが、
最初が"A"が表示されているので赤色に表示されますが、最後の行は"B"のため、すべてが
青色になってしまいます。どうかよろしくお願いします。

Public Property Get ClipText() As String
Dim Co As Integer

    With mp
        ClipText = Format(.TimeOnQuarter, "nn:ss") & vbTab & _
                   .TeamChar & vbTab & _
                   PlayerUniformNumberText & vbTab & _
                   PlayerName & vbTab & _
                   TopicString
      
        '1行全体を
        For Co = frmMain.grdJournal.FixedCols To _
            frmMain.grdJournal.Cols - frmMain.grdJournal.FixedCols
            
            frmMain.grdJournal.Col = Co
            If .TeamChar = "A" Then
                frmMain.grdJournal.ForeColor = vbRed
            Else
                frmMain.grdJournal.ForeColor = vbBlue
            End If
        Next Co
    
    End With
    
End Property

投稿時間:2007/01/12(Fri) 08:28
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: MSFlexGridの行を色分けするには?
> サンプルを参考にしてコードを記述してみましたが、MSFlexGridに表示させてみましたが、
>                 frmMain.grdJournal.ForeColor = vbRed
>                 frmMain.grdJournal.ForeColor = vbBlue

サンプルをよくご覧ください。(見比べて見て下さい)

又、基本的な事なので下記等もご覧下さい。
http://hanatyan.sakura.ne.jp/vbhlp/msfgrefe.htm

投稿時間:2007/01/12(Fri) 09:05
投稿者名:tea
Eメール:
URL :
タイトル:
Re^4: MSFlexGridの行を色分けするには?
> > サンプルを参考にしてコードを記述してみましたが、MSFlexGridに表示させてみましたが、
> >                 frmMain.grdJournal.ForeColor = vbRed
> >                 frmMain.grdJournal.ForeColor = vbBlue
>
> サンプルをよくご覧ください。(見比べて見て下さい)
>
> 又、基本的な事なので下記等もご覧下さい。
>  http://hanatyan.sakura.ne.jp/vbhlp/msfgrefe.htm

はなちゃんさん、回答ありがとうございます。
見直してみましたがわかりません・・・。
MSFlexGridの各行の文字色を1行全体を赤色または青色にしたいんです。
ForeColorでいいと思うんですが・・・。

投稿時間:2007/01/12(Fri) 09:19
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^5: MSFlexGridの行を色分けするには?
> MSFlexGridの各行の文字色を1行全体を赤色または青色にしたいんです。
> ForeColorでいいと思うんですが・・・。

駄目でしょう、ForeColor では。

行単位で赤/青を切り替えるためには、「個々のセル単位での色指定ができるプロパティ」が必要です。


提示された URL の内容(そしてヘルプ)をもう一度確認し、個々のセルの色を変更するための
プロパティが何であるのか、もう一度探してみてください。

投稿時間:2007/01/12(Fri) 09:53
投稿者名:tea
Eメール:
URL :
タイトル:
Re^6: MSFlexGridの行を色分けするには?
魔界の仮面弁士さん、回答ありがとうございます。
CellForeColorだということが理解できました。
実行してみますとMSFlexGridの行は最初はすべて赤色になってしまい、次に青色に変わり
最終行のみが何故か黒色になります・・・。
よろしくお願いします。

Public Property Get ClipText() As String
Dim Co As Integer
Dim Ro As Integer
    With mp
        ClipText = Format(.TimeOnQuarter, "nn:ss") & vbTab & _
                   .TeamChar & vbTab & _
                   PlayerUniformNumberText & vbTab & _
                   PlayerName & vbTab & _
                   TopicString
        
        For Ro = frmMain.grdJournal.FixedRows To frmMain.grdJournal.Rows - _
                    frmMain.grdJournal.FixedRows Step 1
        '1行全体を
        For Co = frmMain.grdJournal.FixedCols To _
            frmMain.grdJournal.Cols - frmMain.grdJournal.FixedCols
            frmMain.grdJournal.Row = Ro
            frmMain.grdJournal.Col = Co
    
            If .TeamChar = "A" Then
                frmMain.grdJournal.CellForeColor = vbRed
            Else
                frmMain.grdJournal.CellForeColor = vbBlue
            End If
            
        Next Co
        Next Ro
    End With
End Property

投稿時間:2007/01/12(Fri) 10:24
投稿者名:水無月
Eメール:
URL :
タイトル:
Re^7: MSFlexGridの行を色分けするには?
TeamChar ってのはその行のどっかの列のデータですか?
であれば行が変わるたびに取得し直す必要があるのでは?

あと、
>For Ro = frmMain.grdJournal.FixedRows To frmMain.grdJournal.Rows - _
              frmMain.grdJournal.FixedRows Step 1 ではなく、
For Ro = frmMain.grdJournal.FixedRows To frmMain.grdJournal.Rows - 1
のような気がしますが…(列の部分も同様)

投稿時間:2007/01/12(Fri) 10:53
投稿者名:tea
Eメール:
URL :
タイトル:
Re^8: MSFlexGridの行を色分けするには?
水無月さん、回答ありがとうございます。

> For Ro = frmMain.grdJournal.FixedRows To frmMain.grdJournal.Rows - 1
> のような気がしますが…(列の部分も同様)

ご指摘の部分を変更しました。確かにその通りですね。
MSFlexGridの行は"A"が20行ほどあり、その次に"B"が20行ほどあります。
しかし実行してみると、依然として行の最初の段階では文字色がすべて赤色、その後青色
に変化して最終行のみ黒色です。

> であれば行が変わるたびに取得し直す必要があるのでは?

取得しなおす方法がわかりません・・・。
何度も教えて下さいと言ってばかりで申し訳ありませんが、教えてください。
よろしくお願いします。

投稿時間:2007/01/12(Fri) 11:49
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^9: MSFlexGridの行を色分け...
> > であれば行が変わるたびに取得し直す必要があるのでは?
>
> 取得しなおす方法がわかりません・・・。

例えば3列目だったら
If frmMain.grdJournal.TextMatrix(Ro, 2) = "A" Then

投稿時間:2007/01/12(Fri) 11:57
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
違いますよ
> > > サンプルを参考にしてコードを記述してみましたが、MSFlexGridに表示させてみましたが、
> > >                 frmMain.grdJournal.ForeColor = vbRed
> > >                 frmMain.grdJournal.ForeColor = vbBlue
> >
> > サンプルをよくご覧ください。(見比べて見て下さい)

ForeColor  ではなく、CellForeColor ですよ。

先に提示したサンプルやリンクのプロパティ一覧等をみましたか?
ちゃんと見比べて見て試して見て下さい。

投稿時間:2007/01/12(Fri) 12:13
投稿者名:tea
Eメール:
URL :
タイトル:
Re: 違いますよ
花ちゃんさん、回答ありがとうございます。
Re6でCellForeColorを使うことは理解しました。書いたんですが・・・。
しかし、力不足で解決はしていません・・・。

投稿時間:2007/01/12(Fri) 12:47
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
全ての行で比較したいなら
もう一つの問題は、LESIA さんの回答の通り、比較している "A" に問題があるから
です。

If .TeamChar = "A" Then とすれば、全部のセル(全ての行のすべての列)のデータに対
して同じ条件で比較している事になりませんか?
If frmMain.grdJournal.TextMatrix(Ro, 2) = "A" Then のように特定の列のデータと
比較しないと同じ答えになってしまいますよ。

コードが都度変っているようですが、貼り付けた行だけ検査したいのか?
すべての行のTeamChar のデータが入力されている列を検査したいかどちらなの
ですか?
次回からコードを投稿される場合は、行毎に意図する事をコメントで記入して
ください。
コードが間違っているのか、仕様なのか判断できません(基本的な事で勘違いして
おられると)

# 誤解されると困るので、全部のセルとはループで回して比較してしているセルの
 事でループ以外は、黒になっているのでは。

全ての行に対して比較したいなら下記を試して見て下さい。

   Dim Ro As Long, Co As Long
   With frmMain.grdJournal
      .Visible = False
      For Ro = .FixedRows To .Rows - .FixedRows
         For Co = .FixedCols To .Cols - .FixedCols
            .Row = Ro
            .Col = Co
            If .TextMatrix(Ro, 2) = "A" Then
               .CellForeColor = vbRed
            Else
               .CellForeColor = vbBlue
            End If
         Next Co
      Next Ro
      .Visible = True
   End With

投稿時間:2007/01/12(Fri) 14:18
投稿者名:tea
Eメール:
URL :
タイトル:
Re: 全ての行で比較したいなら
LESIAさん、花ちゃんさん、回答ありがとうございます。

> If frmMain.grdJournal.TextMatrix(Ro, 2) = "A" Then のように特定の列のデータと
> 比較しないと同じ答えになってしまいますよ。

花ちゃんさんが下記に示されたコードでよく理解できました。また、コードが簡潔で実行
速度も上がりました。と同時に自力の無さに悲しくなりました・・・。
本当にありがとうございます。

> すべての行のTeamChar のデータが入力されている列を検査したいかどちらなの
> ですか?

すべての行のTeamChar のデータです。

> 次回からコードを投稿される場合は、行毎に意図する事をコメントで記入して
> ください。
> コードが間違っているのか、仕様なのか判断できません(基本的な事で勘違いして
> おられると)

今後注意いたします。

> # 誤解されると困るので、全部のセルとはループで回して比較してしているセルの
>  事でループ以外は、黒になっているのでは。
> 全ての行に対して比較したいなら下記を試して見て下さい。

すいませんが、やはり最終行のみ黒色のままです・・・。
あともう少しで実現できそうなんです。
よろしくお願いします。

Dim Ro As Long, Co As Long
  'ジャーナルの色分け
    With frmMain.grdJournal
        .Visible = False
            '固定行を除いた行から最終行まで
            For Ro = .FixedRows To .Rows - .FixedRows
                '固定列を除いた列から最終列まで
                For Co = .FixedCols To .Cols - .FixedCols
                    .Row = Ro
                    .Col = Co
                    'もし、各行の2列目が"A"だった場合
                    If .TextMatrix(Ro, 2) = "A" Then
                        'その行のセルの色をすべて赤色に表示する。
                        .CellForeColor = vbRed
                    Else
                        'それ以外の行のセルの色をすべて青色に表示する。
                        .CellForeColor = vbBlue
                    End If
                Next Co
            Next Ro
            
      .Visible = True
      
    End With

投稿時間:2007/01/12(Fri) 14:37
投稿者名:tea
Eメール:
URL :
タイトル:
出来ました!
花ちゃんさん、魔界の仮面弁士さん、水無月さん、LEISAさん、回答ありがとうございました。
皆さんにアドバイスしていただいたおかげで出来ました。
特に花ちゃんさんありがとうございました。
最終行が黒色になる原因はコードを書いている箇所そのものが間違っていたためでした。