广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 111475 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
绿茶三头犬 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x81 鲜花 x215
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[Basic][求助] 请问如何判断 ScrollBar 拉到最下方?
我是用 TextBox 来进行卷轴,目的就像一些安装程式
必须将用户 ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



—重制 CS:UCE (基本上有些缺陷的,但真是很小事,第一个版本麻烦大家帮忙测试,连线那些应该就不行了,我不懂怎样修复 - - 抱歉 - -'
预计十月发布,应该与 Drak Moon 同步发布,正与该作者商量) [完成度:90%]
献花 x0 回到顶端 [楼 主] From:香港 | Posted:2012-07-24 09:41 |
zsx123665 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x16 鲜花 x95
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

vb哪板??


献花 x0 回到顶端 [1 楼] From:台湾亚太线上服务股份有限公司 | Posted:2012-07-24 14:49 |
绿茶三头犬 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x81 鲜花 x215
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

vb.net
差点认不到你 A_A


—重制 CS:UCE (基本上有些缺陷的,但真是很小事,第一个版本麻烦大家帮忙测试,连线那些应该就不行了,我不懂怎样修复 - - 抱歉 - -'
预计十月发布,应该与 Drak Moon 同步发布,正与该作者商量) [完成度:90%]
献花 x0 回到顶端 [2 楼] From:香港 | Posted:2012-07-24 19:33 |
zsx123665 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x16 鲜花 x95
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

vb.net 的话我只能试试看


献花 x0 回到顶端 [3 楼] From:台湾亚太线上服务股份有限公司 | Posted:2012-07-25 06:51 |
绿茶三头犬 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x81 鲜花 x215
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

正常应该是很难的 0.0


—重制 CS:UCE (基本上有些缺陷的,但真是很小事,第一个版本麻烦大家帮忙测试,连线那些应该就不行了,我不懂怎样修复 - - 抱歉 - -'
预计十月发布,应该与 Drak Moon 同步发布,正与该作者商量) [完成度:90%]
献花 x0 回到顶端 [4 楼] From:香港 | Posted:2012-07-25 13:26 |
ebolaman 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖

级别: 副版主 该用户目前不上站
版区: 程式设计
推文 x38 鲜花 x458
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

• Solution : 使用 API : GetScrollInfo


TextBox 预设没有 Scroll 的触发事件,比较难开发

如果改成 RichTextBox,就有 VScroll (垂直卷动,水平卷动是 HScroll) 的触发事件,

再来用 API 去处理判断是否卷动到最后一行


以你的需求,底下的程式码要改成 加上一个 Boolean 值记录是否已经卷动到最后一行

卷动到最后一行的瞬间,即启动 下一步 的按钮,或是改变某个记录的变数值,

好让 点按钮后 知道使用者是否已卷动到最后一行





▼ 卷动前





▼ 卷动到最后一行,以下的事件都会触发

(1) 滑鼠拖曳 Scrollbar 到最后一行

(2) 文字选取使 Scrollbar 卷动到最后一行

(3) 点方向键 ↓ 使 Scrollbar 卷动到最后一行





• 方法 :

使用 API 函数 GetScrollInfo() 记录资料到 SCROLLINFO Structure 后

再用 si.nPos / (si.nMax - si.nPage) 得到 Scrollbar 的 ratio (0 代表第一行、1 代表最后一行)

ratio 大于 1 则代表卷动到最后一行



• 程式码 (VB 2010) :

将以下程式码贴到一个 Form 中

需要 1 个 RichTextBox 物件,命名为 "RichTextBox1"


复制程式
'[Info.] The following codes show how to detect an event that 
' user scroll the scrollbars in a RichTextBox to the end
'
' *Required controls :
' 1x Form
' 1x RichTextBox named as "RichTextBox1"



Imports System.Runtime.InteropServices

Public Class Form1

    '========== API ==========

    <StructLayout(LayoutKind.Sequential)> Public Structure SCROLLINFO
        Public cbSize As Integer
        Public fMask As Integer
        Public nMin As Integer
        Public nMax As Integer
        Public nPage As Integer
        Public nPos As Integer
        Public nTrackPos As Integer
    End Structure

    Public Declare Function GetScrollInfo Lib "user32" Alias "GetScrollInfo" ( _
    ByVal hWnd As IntPtr, _
    ByVal nBar As Integer, _
    <MarshalAs(UnmanagedType.Struct)> ByRef lpScrollInfo As SCROLLINFO) As Integer

    Private Const SB_HORZ As Integer = 0
    Private Const SB_VERT As Integer = 1
    Private Const SIF_RANGE As Integer = &H1
    Private Const SIF_PAGE As Integer = &H2
    Private Const SIF_POS As Integer = &H4
    Private Const SIF_DISABLENOSCROLL As Integer = &H8
    Private Const SIF_TRACKPOS As Integer = &H10
    Private Const SIF_ALL As Integer = (SIF_RANGE Or SIF_PAGE Or SIF_POS Or SIF_TRACKPOS)


    '========== Records ==========

    Dim var_last_scrollbarRatio As Double 'Record last scrollbard ratio, used in 'check_scrollbar_ratio()' func.


    '========== Functions ==========

    '\brief     Get user-defined scrollbar info
    '\param     ByVal hwnd As System.IntPtr     |   Handle of object
    '           ByVal iMode As Integer          |   Mode (Integer)
    '           ByRef si As SCROLLINFO          |   'SCROLLINFO' structure
    '\return    Result of 'GetScrollInfo' API func.
    Private Function get_scrollbarInfo(ByVal hwnd As System.IntPtr, ByVal iMode As Integer, _
                                       ByRef si As SCROLLINFO) As Integer

        Dim iRst As Integer 'Result


        With si
            .fMask = SIF_ALL
            .cbSize = Len(si)

            iRst = GetScrollInfo(hwnd, iMode, si)
        End With

        Return iRst

    End Function


    '\brief     Get scrollbar value/max (Ratio)
    '\param     ByRef si As SCROLLINFO          |   'SCROLLINFO' structure
    '\return    Double type : 0 ~ 1, 0 as first line, 1 as last line
    Private Function get_scrollbarRatio(ByRef si As SCROLLINFO) As Double

        If 0 <> (si.nMax - si.nPage) Then
            Return si.nPos / (si.nMax - si.nPage)
        Else
            Return 0
        End If

    End Function


    '\brief     Check scrollbar ratio (User-defined)
    '
    Private Sub check_scrollbar_ratio()

        Dim si As SCROLLINFO
        Dim iRst As Integer
        Dim dRatio As Double


        iRst = get_scrollbarInfo(RichTextBox1.Handle, SB_VERT, si)
        dRatio = get_scrollbarRatio(si)
        '' Debug.Print("Scrollbar ratio : " & dRatio) '_DEBUG_

        'Ratio must exceed 1 and it's not equal to last recorded ratio
        ' and last recorded ratio is lower than 1
        ' (Means that there are two states : one is not scrolled to the end, and otherwise)
        If dRatio >= 1 And dRatio <> var_last_scrollbarRatio And var_last_scrollbarRatio < 1 Then
            MessageBox.Show("You have scrolled to last line !!", "Scrollbar said", _
                            MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

        'Record last ratio
        var_last_scrollbarRatio = dRatio

    End Sub


    '========== Object events ==========

    Private Sub RichTextBox1_VScroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.VScroll

        check_scrollbar_ratio()

    End Sub

End Class






by Ebola


[ 此文章被ebolaman在2012-07-25 23:07重新编辑 ]


My BOINC stats :

献花 x1 回到顶端 [5 楼] From:台湾教育部 | Posted:2012-07-25 23:02 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.057433 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言