请教3个问题:1 如何实现 MSFlexGrid 的自动滚动?
  比如该控件在 From_Load 中初始化MSFlexGrid有100个空白列。
  然后通过按 按钮A 从1列开始逐个为每列添加内容,
  当超过 MSFlexGrid 显示范围时添加仍在
  进行,但问题是我看不见新添加的列了。如何让 
  其 "自动滚动" 以让我看见最新添加的列?2 如何改变窗口菜单字体的大小?有没有简单的方法?3 我用 API 给窗口菜单加图标,为什么在选择通常的
  .ico 文件完全显示不出来,而采用位图后,只能
  选择 16x16 像素,否则只有一个角。即使选择
  16x16 显示的图标也非常难看,请问有什么好的办法
  显示 32x32 的 "不变样" 的图标?谢谢啦!

解决方案 »

  1.   

    问题一:自动滚动的问题好解决,因为MSFlexGrid默认的记录添加是从第最后行开始添加的,你只要在additem的地方加入一个参数,比如:
    GridTask.AddItem AddItemstr, 1
    那么每一个新加的行都是在第一行,这个时候滚动条就会滚动了!
    问题二:不知道你现在用的什么办法,所以没有办法告诉你更好的办法
    问题三:有待研究
      

  2.   

    对了
    GridTask.AddItem AddItemstr, 1
    后面加上一个
    DoEvents
    这样就好了
      

  3.   

    首先设置ScrollBars=3'水平和垂直滚动条根据列的不段变化而相应的改变MSFlexGrid.LeftCol值
    .LeftCol:传回和设定 FlexGrid 最左侧的资料行 (非固定行).
      

  4.   

    Private Sub Command1_Click()
    MSFlexGrid1.LeftCol = 3 '这样能移动.你设置后面的参数就可控件移动到几列了
    End Sub
      

  5.   

    TopRow和LeftCol可以指定上边行位置和左边列位置如果要实现鼠标滚动的话,参考下面的代码:
    模块中加入:
    Public Const GWL_WNDPROC = (-4)
    Public Const WM_COMMAND = &H111
    Public Const WM_MBUTTONDOWN = &H207
    Public Const WM_MBUTTONUP = &H208
    Public Const WM_MOUSEWHEEL = &H20A
     
    Public Oldwinproc   As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Public Function FlexScroll(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    '支持滚轮的滚动  Yu  2004-5-10  15:33
    If wMsg = WM_MOUSEWHEEL Then
    If wParam = -7864320 Then   '向下滚
        SendKeys "{DOWN}" '{PGDN}
        SendKeys "{DOWN}"
    ElseIf 7864320 Then       '向上滚
        SendKeys "{UP}" '{PGUP}
        SendKeys "{UP}"
    End If
    End If
    FlexScroll = CallWindowProc(Oldwinproc, hWnd, wMsg, wParam, lParam)
    End Function窗体中:
    Private Sub MSFlexGrid1_GotFocus()
    Oldwinproc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
    SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf FlexScroll
    End Sub
    Private Sub MSFlexGrid1_LostFocus()
    SetWindowLong Me.hWnd, GWL_WNDPROC, Oldwinproc
    End Sub
      

  6.   

    TO tztz520(午夜逛街)
    你的方法有点问题,虽然行移动了,但跑到该行的倒数几列
    上面去了,该行的前几列内容又看不见了.
      

  7.   

    LeftCol 就是设置当前最左边是第几列,是由你决定的.
    移动行就用toprow
      

  8.   

    TO cpio(就这么简单) 
    你给的方法很有新意,等会回去我试试!