我想直接用vb提供的Slider改进成任意形状,似乎有点难,不过你可以自己做个activeX控件。界面自己设计(就象设计窗体一样,放上自己喜欢控件如image等),因为是Slider我想不会有很多属性,事件的,自己模仿Slider的几个主要要用到的属性、事件、方法,写进你的控件里去。
1、写属性:
dim m_formatmask as string
Public progerty Get FormatMask() as String
FormatMask=Mm_FormatMask
End Property
Pblic Property Let FormatMask(ByVal New_FormatMask as String)
m_FormatiMask=New_formatMask
PropertyChanged "FormatMask"
End Property
2、写方法
Public Sub Clear()
text1.text="" 'text1是自己添加上去的控件
End Sub
3、写事件
Public Sub text1_Change() 'text1_Change 是自己定义的时间名
RaiseEvent Change
CheckSetChang
End Sub
1、写属性:
dim m_formatmask as string
Public progerty Get FormatMask() as String
FormatMask=Mm_FormatMask
End Property
Pblic Property Let FormatMask(ByVal New_FormatMask as String)
m_FormatiMask=New_formatMask
PropertyChanged "FormatMask"
End Property
2、写方法
Public Sub Clear()
text1.text="" 'text1是自己添加上去的控件
End Sub
3、写事件
Public Sub text1_Change() 'text1_Change 是自己定义的时间名
RaiseEvent Change
CheckSetChang
End Sub
解决方案 »
- VB.NET打开WORD
- 会创建不能删除的图标的高手请进
- 在office2003上正常,在office2000中生成excel报表的时候,就退出,这是什么原因
- 如何将listview控件的内容存储/载入/删除/删除某行/到数据库
- VB6.0 中,如何使ShockwaveFlash控件停止播放?
- 程序运行时,如果此时正开着excel,我希望能报错!!!高手帮帮忙,50分!立刻给!
- 请问,VB重起计算机的代码怎么写?
- 我不知怎么办了?
- 怎样用instr查找空格?在线等待!
- 我的msdxm.ocx文件为什么注册不上呀!
- 难到没有高手能回答这个问题???
- 谁有办法把access中不同个表的若干列拷贝制另外表中
控件上只放一个PictureBox控件
Option Explicit
'缺省属性值:
Const m_def_EndValue = 0
Const m_def_StartValue = 0
Const m_def_Max = 0
Const m_def_Min = 0
Const m_def_NowValue = 1
'属性变量:
Dim m_EndValue As Long 'EndValue
Dim m_StartValue As Long 'StartValue
Dim m_Max As Long 'Max
Dim m_Min As Long 'Min
Dim m_NowValue As Long 'NowValue
Dim m_Offset As Single '滑动块的物理偏移量
Dim m_PlaceHolder As Single '滑动块当前物理位置
Dim m_fSlide As Boolean '是否移动滑动块
Dim m_SliderPos As Single '滑标当前的物理位置
'事件声明:
Event Change(StartValue As Long, EndValue As Long, NowValue As Long)
Public Property Get Max() As Long
Max = m_Max
End Property
Public Property Let Max(ByVal New_Max As Long)
m_Max = New_Max
Call DrawSlider
PropertyChanged "Max"
End PropertyPublic Property Get Min() As Long
Min = m_Min
End Property
Public Property Let Min(ByVal New_Min As Long)
m_Min = New_Min
Call DrawSlider
PropertyChanged "Min"
End PropertyPublic Property Get NowValue() As Long
NowValue = m_NowValue
End PropertyPublic Property Let NowValue(ByVal New_NowValue As Long)
m_NowValue = New_NowValue
Call DrawSlider
PropertyChanged "NowValue"
End PropertyPrivate Sub Slider_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Not m_fSlide Then '未移动滑标
m_PlaceHolder = Y '记录鼠标点击时位置
m_SliderPos = Slider.Top '记录滑标的当前位置
m_fSlide = True '开始移动
End If
End SubPrivate Sub Slider_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim SliderTop As Integer
Dim k As Integer
If m_fSlide Then
SliderTop = m_SliderPos + Int(Y - m_PlaceHolder) '调整滑标位置,等于滑标当前位置+鼠标按下点的移动间隔
'限制移动范围
If SliderTop < 0 Then SliderTop = 0
If SliderTop > ScaleHeight - Slider.Height Then SliderTop = ScaleHeight - Slider.Height
'保存滑标当前位置
m_SliderPos = SliderTop
'重新计算 StartValue 和 EndValue 以及 NowValue
k = m_EndValue - m_StartValue + 1
m_StartValue = SliderTop * m_Max / ScaleHeight + 1
m_EndValue = m_StartValue + k - 1
If m_EndValue > m_Max Then '超出范围
m_EndValue = m_Max
m_StartValue = m_Max - k - 1
End If
Call DrawSlider
RaiseEvent Change(m_StartValue, m_EndValue, m_NowValue)
End If
End SubPrivate Sub Slider_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error Resume Next
m_fSlide = False '停止移动
End Sub
'为用户控件初始化属性
Private Sub UserControl_InitProperties()
m_Max = m_def_Max
m_Min = m_def_Min
m_NowValue = m_def_NowValue
m_EndValue = m_def_EndValue
m_StartValue = m_def_StartValue
End SubPrivate Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim k As Integer
If Y > Slider.Top + Slider.Height Then '点击的位置在滑动块下方
If Y + Slider.Height <= ScaleHeight Then
Slider.Top = Y
Else
Slider.Top = ScaleHeight - Slider.Height
End If
Else '上方
Slider.Top = Y
End If
k = m_EndValue - m_StartValue + 1
m_StartValue = Slider.Top * m_Max / ScaleHeight + 1
m_EndValue = m_StartValue + k - 1
If m_EndValue > m_Max Then '超出范围
m_EndValue = m_Max
m_StartValue = m_Max - k - 1
End If
Call DrawSlider
RaiseEvent Change(m_StartValue, m_EndValue, m_NowValue)
End Sub'从存贮器中加载属性值
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
m_Max = PropBag.ReadProperty("Max", m_def_Max)
m_Min = PropBag.ReadProperty("Min", m_def_Min)
m_NowValue = PropBag.ReadProperty("NowValue", m_def_NowValue)
m_EndValue = PropBag.ReadProperty("EndValue", m_def_EndValue)
m_StartValue = PropBag.ReadProperty("StartValue", m_def_StartValue)
End Sub'将属性值写到存储器
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("Max", m_Max, m_def_Max)
Call PropBag.WriteProperty("Min", m_Min, m_def_Min)
Call PropBag.WriteProperty("NowValue", m_NowValue, m_def_NowValue)
' Call PropBag.WriteProperty("End", m_End, m_def_End)
Call PropBag.WriteProperty("EndValue", m_EndValue, m_def_EndValue)
Call PropBag.WriteProperty("StartValue", m_StartValue, m_def_StartValue)
End Sub'重画控件
Private Sub DrawSlider()
If m_Max > 0 Then
Slider.Visible = True
Slider.Width = UserControl.ScaleWidth
If m_EndValue > 0 And m_StartValue > 0 Then
Slider.Height = (m_EndValue - m_StartValue + 1) * UserControl.ScaleHeight / m_Max
Slider.Top = (m_StartValue - 1) * UserControl.ScaleHeight / m_Max '* (m_EndValue - m_StartValue)
End If
Else
Slider.Visible = False
End If
End SubPublic Property Get EndValue() As Long
EndValue = m_EndValue
End PropertyPublic Property Let EndValue(ByVal New_EndValue As Long)
m_EndValue = New_EndValue
Call DrawSlider
PropertyChanged "EndValue"
End PropertyPublic Property Get StartValue() As Long
StartValue = m_StartValue
End PropertyPublic Property Let StartValue(ByVal New_StartValue As Long)
m_StartValue = New_StartValue
Call DrawSlider
PropertyChanged "StartValue"
End Property
我試了以後,再給分好嗎,謝謝了