設為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
樓主: tmtony
打印 上一主題 下一主題

[高1]使用ACCESS實現(xiàn)滑塊slider控件的效果

[復制鏈接]

點擊這里給我發(fā)消息

21#
 樓主| 發(fā)表于 2003-4-8 03:32:00 | 只看該作者
也許是我的疏忽,我不知道已有這個貼子,不過三四年前,我還剛開始用ACCESS :),還沒上過論壇。 我記得進度條的程序在這里已有發(fā)過,但滑塊效果我還沒發(fā)現(xiàn)過。
我想以后如果出的題目已有現(xiàn)成的答案,請大家盡快發(fā)貼提示,以免重復勞動。
這次我想這樣來處理,roadbeg一早讓賢,而cg1這次是評委,不能參賽:),harsonliao的功能和trynew的功能不相上下,但在界面上略勝,所以我想一等獎為harsonliao,二等獎為trynew,三等獎為roadbeg. 不知意下如何。因為題目是我出錯了,我想這次勝出者照加分,我的分數(shù)減100(我晚上偷偷再加回來)
22#
發(fā)表于 2003-4-8 03:58:00 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
23#
發(fā)表于 2003-4-8 04:34:00 | 只看該作者
雖然已頒獎,不過我完善了一下,支持鼠標點擊。
tmtony應該給我一個“勞苦功高"獎:)




[此貼子已經(jīng)被作者于2003-4-7 20:35:16編輯過]

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
24#
發(fā)表于 2003-4-8 04:39:00 | 只看該作者
不知漂然看我的例子沒有,我的例子本身就支持點擊.
不過,看了下你的例子,給提個意見,你最好用主體的 mousemove 事件來做點擊.
照你現(xiàn)有的方式做.....,也太累了,且難于再開發(fā).
25#
發(fā)表于 2003-4-8 04:41:00 | 只看該作者
所以我說是“勞苦功高”獎:)
另外,Roadbeg你的例子:
1、有時候點擊起來不靈哦,沒反應。
2、位置明顯不對應。
3、給用戶的感覺就是粗制濫造

希望你不要氣暈:)
[此貼子已經(jīng)被作者于2003-4-7 20:45:08編輯過]

26#
發(fā)表于 2003-4-8 05:37:00 | 只看該作者
我支持飄然妹子,從市場、用戶角度來說,Roadbeg的例子與飄然的例子是不可想提并論的,飄然的成本很低效果很好(站在haosonliao的巨人肩膀上),而Roadbeg的成本太高,效果較差。
27#
發(fā)表于 2003-4-8 05:38:00 | 只看該作者
以下是引用飄然在2003-4-7 20:40:34的發(fā)言:
所以我說是“勞苦功高”獎:)
另外,Roadbeg你的例子:
1、有時候點擊起來不靈哦,沒反應。
2、位置明顯不對應。
3、給用戶的感覺就是粗制濫造

希望你不要氣暈:)
[此貼子已經(jīng)被作者于2003-4-7 20:45:08編輯過]

1.點起來沒反應是因為我作了點擊位置判斷,不在進度條范圍內(nèi)的點擊不處理.
2.可能是我眼睛有問題,因為我沒發(fā)現(xiàn)與 windows 的標準控件相比在點擊處理上有什么不
同.
3.這句很正確,因為我一向不做界面,本就是粗制濫造!
28#
發(fā)表于 2003-4-8 16:27:00 | 只看該作者
完了!晚了。。。∥覄倓傋龊!你們早完事了!郁悶!~!`
我不獻丑了!閃!
29#
發(fā)表于 2003-4-8 16:58:00 | 只看該作者
不晚不晚,冠軍已產(chǎn)生,你就來個挑戰(zhàn)賽嘛。
大家給點掌聲,有請吳大高手出場!
30#
發(fā)表于 2003-4-8 19:47:00 | 只看該作者
以下是引用竹笛在2003-4-7 21:37:15的發(fā)言:
我支持飄然妹子,從市場、用戶角度來說,Roadbeg的例子與飄然的例子是不可想提并論的,飄然的成本很低效果很好(站在haosonliao的巨人肩膀上),而Roadbeg的成本太高,效果較差。


成本太高可能是說我的源程明顯比別人的長.大家看一下我的源碼:
我的代碼確是較長,且定義了許多變量(常量也是預備將來轉(zhuǎn)換到變量的.),并且有些變量還沒用到.不錯,如果只是要實現(xiàn)示例子中所示的功能,根本用不了這許多代碼,但一開始我就不是只為實現(xiàn)這點簡單功能而設計的.而是考慮到如何讓它方便的轉(zhuǎn)換到類,如何更像一個真正的 slider 控件.
如何能方便的定義刻度數(shù)量,最小刻度值,最大刻度值,最小移動,最大移動距離,
如何能方便的限定 slider 的大小....

當然,我這個例子主要是模仿 slider 的刻度尺功能,而其它的例子都是模仿的滑塊功能,所以我的例子只能是跳躍移動(因為標準控件實現(xiàn)刻度尺功能的時候就是跳躍移動的),而其它例子都是平滑移動的.

Option Compare Database
Option Explicit

'本例主要模仿了 標準 slider 控件的 刻度尺功能.

'定義初始常量,這些常量為設計模式中的左邊距(或其它數(shù)值) 乘以 567
Private Const pcnt_lngArrowStart As Long = 477                      '箭頭起始位置的 left 屬性值
Private Const pcnt_lngMinScale As Long = 8                          '最小刻度標記
Private Const pcnt_lngMaxScale As Long = 16                         '最大刻度標記
Private Const pcnt_lngScaleSpace As Long = 567                      '兩個刻度之間的距離.

Private Const pcnt_lngSliderTop As Long = 2041                      'slider 的 top
Private Const pcnt_lngSliderHeight As Long = 624                    'slider 的 height
Private Const pcnt_lngSliderLeft As Long = 340                      'slider 的 left
Private Const pcnt_lngSliderWidth As Long = 4990                    'slider 的 width

Private Const pcnt_lngArrowLeft As Long = 477                       '滑塊圖的 left(即, slider 開始處的 left)
Private Const pcnt_lngBackLineLeft As Long = 576                    '滑塊背景線的 left(即, slider 開始處的 left
Private Const pcnt_lngBackLineWidth As Long = 4536                  'width

Private p_lngLongMove As Long                                       '最小單次移動距離
Private p_lngShortMove As Long                                      '最大單次移動距離
Private p_lngSliderValue As Long                                    'slider 的當前值
Private p_lngSpaceScale As Long                                     '最大移動距離與最小移動距離的比例
'

Private Sub Form_Load()
   
    p_lngSpaceScale = 4                                             '最大距離與最小距離之間的比例.
    p_lngShortMove = pcnt_lngScaleSpace                             '初始設置最小距離為兩個刻度之單的距離
    p_lngLongMove = p_lngShortMove * p_lngSpaceScale                '初始設置最大距離為最小距離的 4 倍.
    p_lngSliderValue = pcnt_lngMinScale                             '設置 slider 的當前值為最小刻度值
        
End Sub

'箭頭的 mousemove 事件.
'在此事件中實現(xiàn)箭頭的短距離移動,即一次移動一個刻度.

Private Sub imgArrow_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button And acLeftButton > 0 Then                                 '檢測左鍵是否被按下
        If X > pcnt_lngScaleSpace / 2 Then                              '如果正在向正方向移動,且因為是跳躍移動,所以必須判斷 mousemove 的距離是否已超過 1/2 間距,超過才進行移動,反之則不移動.
            If imgArrow.Left + p_lngShortMove <= pcnt_lngArrowLeft + pcnt_lngBackLineWidth Then                               '判斷移動后是否會超出范圍
                imgArrow.Left = imgArrow.Left + p_lngShortMove
                p_lngSliderValue = p_lngSliderValue + 1
            End If
        ElseIf X < pcnt_lngScaleSpace / 2 * -1 Then                     '如果正在向負方向移動
            If imgArrow.Left - p_lngShortMove >= pcnt_lngArrowLeft Then                               '判斷移動后是否會超出范圍
                imgArrow.Left = imgArrow.Left - p_lngShortMove         '進行單次短移動.
                p_lngSliderValue = p_lngSliderValue - 1
            End If
        End If
        Call ResetFontSize
    End If
End Sub


'主體的單擊事件.
'在此事件中實現(xiàn)刻度的長距
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 06:26 , Processed in 0.139444 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表