[リストへもどる]
一括表示

投稿時間:2003/12/18(Thu) 13:33
投稿者名:プリン
Eメール:
URL :
タイトル:
MSFlexGridの囲み線を引くことはできたのですが
花ちゃんのコードびお陰で、MSFlexGridの囲み線を引くことはできたのですが、
MSFlexGridをClickする度に囲み線の位置をClickした行を囲むように設定すると、
Clickする度に囲み線が増えていき、前にClickした囲み線が残ってしまいます。

どのようにしたら、前にClickした囲み線が消えて、新たにClickした行だけに囲み線が
表示されるようになりますか?

Click3回した場合(□:グリッド、=:囲み線を意味します)
  □□□□□  □===□
  □□□□□→ □===□
  □□□□□  □===□  こうなってしまうので、

  □□□□□  □□□□□
  □□□□□→ □□□□□
  □□□□□  □===□  このように最後にClickしたものだけが囲まれて、
1回目と2回目にClickしたものは、普通のグリッド線に戻るようにしたいのですが、
どうすればいいですか?

投稿時間:2003/12/18(Thu) 21:21
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: MSFlexGridの囲み線を引くことはできたのですが
> どのようにしたら、前にClickした囲み線が消えて、新たにClickした行だけに囲み線が
> 表示されるようになりますか?

貴方が自分の手で書いたり、消す場合にはどのようにしますか?
新たに書いた時、前に書いたのを消せばいいだけでは、クリックして書いた時にその位置を
変数に記録しておけば、消したい位置が解るかと思うのですが?
やりたい事を操作の順番に箇条書きにして見て下さい。
その上でそれを実行する手段が解らない場合は質問して下さい。
(但し、1〜10迄解りませんでは、回答が得られませんよ)

投稿時間:2003/12/19(Fri) 13:08
投稿者名:プリン
Eメール:
URL :
タイトル:
Re^2: MSFlexGridの囲み線を引くことはできたのですが
わかりにくくてすみません。コードを書きました。
Private Sub MSFlexGrid1_Click()
Dim intCol As Integer ,intCol2 As Integer '列
Dim intRow As Integer, intRow2 As Integer '行

intRow = MSFlexGrid1.Row
intCol = MSFlexGrid1.Col

   @Call SetKeisen(2, intRow, intCol)
   intRow2 = intRow
   intCol2 = intCol
   A’Call SetKeisen(9, intRow2, intCol2)
End Sub(Form_Load 等省略)

花ちゃんのプログラム(MSFlexGridで指定セル範囲に罫線を設定)を使って、
@で囲み枠を描くことはできたのですが、次にクリックした時には@で引いた線を消して、
新たな場所に囲み線を引きたいのです。
そこで、列と行を別の変数にとって Select Case の DrStyに 9 を追加し、
picture1.Cls を設定しましたが、それでは上書きされてしまいました。

箇条書きにすると、
1.例えばMSFlexGrid1上で(2行目、3列目)をクリックした時→(2行目、3列目)に囲み線をひく
2.次に(5行目、1列目)をクリックした時→(2行目、3列目)の囲み線をけして、
(5行目、1列目)に囲み線を引く。

長くなってすみません。

投稿時間:2003/12/19(Fri) 14:33
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: MSFlexGridの囲み線を引くことはできたのですが
前回クリックした位置が保持されていません。変数の宣言場所を変更して下さい。

Option Explicit
Private intRow2 As Integer, intCol2 As Integer '行
Private intCol As Integer, intRow As Integer  '列

Private Sub MSFlexGrid1_Click()
    MSFlexGrid1.Row = intRow2
    MSFlexGrid1.Col = intCol2
    If MSFlexGrid1.CellPicture Then
        Call SetKeisen(9, intRow2, intCol2)
    End If
    Call SetKeisen(2, intRow, intCol)
    intRow2 = intRow
    intCol2 = intCol
End Sub

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    intRow = MSFlexGrid1.Row
    intCol = MSFlexGrid1.Col
End Sub

投稿時間:2003/12/19(Fri) 15:47
投稿者名:プリン
Eメール:
URL :
タイトル:
Re^4: MSFlexGridの囲み線を引くことはできたのですが
できました!
CellPictureという方法があったんですね。
さすが花ちゃん★
どうもありがとうございました。

投稿時間:2003/12/19(Fri) 15:50
投稿者名:ak
Eメール:
URL :
タイトル:
実現が無理なような気がします
ここのサンプルの説明に記載されているようにセル幅(セル高さ)をユーザーが変更した場合
再描画処理が必要です。

再描画処理を実装する事は可能ですがデータが増えるに従ってレスポンスの問題が発生する
と思います。

ということでMSFrexGridではちょっと実現が無理なような気がします。

VBでグリッドを使用したアプリケーションを作成する場合「VS-FlexGrid」や「Spread」
などの他社の高機能なActiveXがよく使用されています。

色々な機能を実装したいのであれば既に実装されている他社のActiveXを使用する事をお
勧めします。