いつもお世話になります。
MSHFlexGridを使用してデータ表示を行っております。
通常ですと、データのサイズは10バイトくらいのデータなのですが、
たまに200バイトくらいのデータがあります。
その歳に横にスクロールをすれば最後のデータまで見れるようにしたいの
ですが上手くいきません。
グリッドの幅はかなり確保しています。
出来ればフォームのサイズを変えずに水平のスクロールバーで、
レコードの最後を見れるようにしたいのですが、MSHFlexGridで可能でしょうか?
エクセルとかみたいに出来ればと思っています。
お手数ですが、ご教授をよろしくお願いします。
プログラムで横スクロールを行いたい、という事でしょうか。
もしそうならば、LeftColプロパティを指定すればOKです。
魔界の仮面弁士さん、有難うございます。
説明不足でした。
例.
グリットには"1234567890abcdefghijklmno"
①1234567890←最初の表示
②横スクロールバーを右に
③567890abcde←見える状態
④横スクロールバーを最後までドラック
⑤・・・klmno←見える状態
1番目のデータから見れてもかまわないのですが、フォームのサイズは大きくしたく
ないのです。
以上よろしくお願いします。
文章を読む限り、(横スクロールバーと言われてるので)
> プログラムで横スクロールを行いたい、という事でしょうか。
としか思えませんが…
それとも列の幅を変えたいって事?
それなら、ColWidthをいじってやれば良いですけど。
すみません。説明が下手で
使用しているのはグリッドなんですが、
フォーム(全体の画面)をそんなに大きく出来ないのです。
それで横スクロール(グリッドの)で画面全体のサイズを変えずに、
一番右のデータまで見れるようにしたいのです。
カラムのサイズは充分取っていますし、入力データもちゃんと入っています。
ところが横スクロールバーを最後までドラックしても最後(付近)のデータが、
見れないのです。(エクセルとか見れますよね。)
申し訳ありません、よろしくお願いします。
一番右にスクロールしても
一番右のセルに入っているテキストが
全部見えないって事ですね。
うーん やっぱり一番右の列の幅が足らないだけのような…
試しに一番右の列の幅を増やしてみて下さい。
幅は確保しております。
またグリッドにそのデータは、
全部入っております。
例.
form1.MSFHlexGrid1.ColWidth(2) = 200000 '取りすぎですかね。
buff = "1234567890・・・・・0" '300文字くらいセットします
form1.MSFHlexGrid1.TextMatrix(i+1,2) = Buff 'ちゃんとデータは入っています
その後表示したのですが、
一番右にスクロールして途中までしか表示されないんです。
よろしくお願いします。
うーん、さすがに300文字位にすると見えませんね。
どーもフォームのサイズより
大きいセルは見えないみたいですね。
フォームを最大化しても300文字は収まりきれないので無理でした。
フォントサイズを小さくすれば見えましたが…。
エクセルでも見えませんでした。(フォントサイズにもよるんでしょうが)
テキストボックスなどに表示するなどの逃げしかないですかね?
PictureBoxコントロール上に配置して
スクロールバーが出現しないぐらいに
GridのWidth,Heightを十分にとって、
ScrollBarコントロールで自前でスクロールすればいいのでは?
Sayさん、ありがとうございます。
やってみたのですが、40バイトまでしか、
出来ませんでした。
300文字は不可能でしょうか?
widthは充分だと思うんですけど・・・
MSFlexでもMSHFlexでも
Width(ColWidthの合計)が245745twip以下なら
表示すると思いますが?
Option Explicit
Private Const cUSEFLEX As String = "HFLex" '←"HFlex"にすればHFlexを表示
Private Const clngCOLMAX As Long = 11
Dim WithEvents Flex1 As MSFlexGridLib.MSFlexGrid
Dim WithEvents HFlex1 As MSHierarchicalFlexGridLib.MSHFlexGrid
Dim WithEvents Pic1 As PictureBox
Dim WithEvents HScr1 As HScrollBar
Dim WithEvents VScr1 As VScrollBar
Dim mobjFlex As Object
Dim mlngScaleH As Long
Dim mlngScaleV As Long
Private Function fncSetText() As String
Dim i As Long
Dim lngLen As Long
lngLen = (2 ^ (clngCOLMAX - 1)) + 100
Dim buff As String
buff = Space(lngLen + 4)
For i = 0 To lngLen Step 4
Mid(buff, i + 1, 4) = Right("000" & CStr(i), 3) & ","
Next
fncSetText = buff
End Function
Private Sub SetFlex(obj As Object, strText As String)
Dim i As Long
Dim j As Long
Dim strBuf As String
Dim lngWidthBuf As Long
With obj
Set .Font = Me.Font
.Cols = clngCOLMAX
.Rows = 100
.FixedCols = 1
.FixedRows = 1
lngWidthBuf = 350
.Height = .RowHeight(0) * .Rows + lngWidthBuf
For i = 0 To .Cols - 1
strBuf = Left(strText, 2 ^ i + 10)
.ColWidth(i) = Me.TextWidth(strBuf & "A")
lngWidthBuf = lngWidthBuf + .ColWidth(i)
.TextMatrix(0, i) = "フィールド" & CStr(i)
For j = 1 To .Rows - 1
If i = 0 Then
.TextMatrix(j, i) = j
Else
.TextMatrix(j, i) = strBuf
End If
Next
Next
.Width = lngWidthBuf
.TextMatrix(0, 0) = .Name
End With
End Sub
Private Sub Form_Load()
' Dim i As Long
' Dim j As Long
Dim strText As String
' Dim strBuf As String
' Dim lngWidthBuf As Long
Set Pic1 = Me.Controls.Add("VB.PictureBox", "Pic1")
Set Flex1 = Me.Controls.Add("MSFlexGridLib.MSFlexGrid", "Flex1", Pic1)
Set HFlex1 = Me.Controls.Add("MSHierarchicalFlexGridLib.MSHFlexGrid", "HFlex1", Pic1)
Set HScr1 = Me.Controls.Add("VB.HScrollBar", "HScr1")
Set VScr1 = Me.Controls.Add("VB.VScrollBar", "VScr1")
strText = fncSetText()
With Pic1
.Width = Me.ScaleWidth - HScr1.Height
.Height = Me.ScaleHeight - VScr1.Width
.Left = 0
.Top = 0
.Visible = True
End With
Call SetFlex(Flex1, strText)
Call SetFlex(HFlex1, strText)
With HScr1
.Width = Pic1.Width
.Left = Pic1.Left
.Top = Pic1.Height
mlngScaleH = ((Flex1.Width - Pic1.Width) \ 32768) + 1
.Max = ((Flex1.Width - Pic1.Width) \ mlngScaleH) + 1
.LargeChange = Pic1.Width \ mlngScaleH
.SmallChange = 1
.Visible = True
End With
With VScr1
.Height = Pic1.Height
.Left = Pic1.Width
.Top = Pic1.Top
mlngScaleV = ((Flex1.Height - Pic1.Height) \ 32768) + 1
.Max = ((Flex1.Height - Pic1.Height) \ mlngScaleV) + 1
.LargeChange = Pic1.Height \ mlngScaleV
.SmallChange = 1
.Visible = True
End With
If cUSEFLEX = "FLex" Then
Set mobjFlex = Flex1
Else
Set mobjFlex = HFlex1
End If
mobjFlex.Visible = True
End Sub
Private Sub HScr1_Change()
mobjFlex.Left = -HScr1.Value * mlngScaleH
End Sub
Private Sub VScr1_Change()
mobjFlex.Top = -VScr1.Value * mlngScaleV
End Sub
Sayさん、どうもありがとうございます。
参考にさせていただきます。
Sayさんokuさん、ありがとうございました。
何とかいろいろとやっていたら上手く行きました。
本当に良いアドバイスを有難うございました。
今後ともよろしくお願いします。
ツイート | ![]() |