廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 111471 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.094000 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言