需要能够控制垂直滚动文本。我需要一个关于表格提出一些学分。由作者的一篇文章,名为保罗·皮克特,行星源code.com的页面上,我发现了一个基本的解决方案。目前我的要求改变一个我不得不增强的特点,基本解决。
请被语言错误patined的,因为英语不是我的母语。
使用代码
我喜欢平摊到部分文章。第1部分解释由开发者的控制的使用。第2部分的代码结构和背后的基础知识。
第1部分:“控制使用”
属性设置:
现在,你准备好来设置属性。在除了已知属性的用户控件,您可能会发现2个新的属性“消息”和“MessageTimer” 。他们也可能被发现在新旅馆类型“扩展属性”属性页。
这两个属性是代表两个用户控件的子控件。“ 消息 “标签控制和的” MessageTimer “的一个标准定时器控制。使用属性childcontrols和UserControl的主要性能的本到设计您的animatedTexbox控制。
Message.Text: 持有的滚动文本,线条可能会跌由vbCRlf Message.TextAlign:滚动文本对齐
MessageTimer.Interval: 滚动以毫秒为单位的时间间隔。50ms的应该是不错的。MessageTimer.Enabled:启动/停止scolling
这就是一切!
准备承载该控件的Windows窗体:
现在我们就来当父窗体加载初始化控制。我们这样做是在负载范围内活动的形式,看到代码列表区域。
// Private Sub frmAbout_Load(sender As Object, e As EventArgs) Handles MyBase.Load
// ‘ define the text for the message. Use vbCrlf for carriage return/new line
// Dim strMessage As String = “Copyright fremde Programm Controls:” & vbCrLf
// strMessage = strMessage & “(Taken form codeproject.com)” & vbCrLf & vbCrLf
// strMessage = strMessage & “ImageView Control by Jordy Ruiter” & vbCrLf
// strMessage = strMessage & “MultiColCombobox by Gismo” & vbCrLf
// strMessage = strMessage & “CustValidatorTextbox by Vivek Bhatnagar” & vbCrLf
// ‘ ini the control property values
// animTextBox1.Message.Text = strMessage ‘ set the message text
// ‘ set no TextAlign to use the default center alignment
// ‘ set no timer interval to use the default value of 50 milliseconds
// animTextBox1.MessageTimer.Enabled = True ‘start animation
// End Sub
第2部分:“监控守则”
- 去创建一个新的项目,选择的VisualBasic语言和类型的Windows用户控件。
- 重命名为的usercontrol的名称,并给它起名叫一个nimTextbox的。这个名字每亩使用,否则你将不得不使用助手类的工具箱图标(详见followes)的冲突。
-
创建16×16像素的位图(BMP)工具箱项的位图和地方项目文件夹中的文件。
名称必须是animToolbox.bmp。 - 在设计器中打开UserControl的。
- 拖动面板控制它,其Dock属性设置来填补。将它命名为Panel1的。
- 一个标签控件拖动到面板控制面板的页脚设置其位置,它命名为labelMessage。
- 打开用户控件的代码窗口中。
我除以代码成reagions更好的可读性。
在UserControl的代码头,我们必须定义参考导入System.ComponentModel。我们需要进口定义扩展的UserControl属性。
// ‘ ### neccessary Imports
// Imports System.ComponentModel
接下来,我们必须定义工具箱图标的代码。此代码是联系在一起的开幕类语句。
代码referencies的两个班,你必须连接到用户控件项目。这个helper类是用来显示正确的图标在Visual Studio工具箱。请使用它们的。类的内容在这篇文章中没有解释,因为他们只是辅助类。
// ‘ set the Toolbox Bitmap Icon
// ‘ this done by the classes classToolboxIcon and clsTypeConverter
// <ToolboxItem(True)> <ToolboxBitmap(GetType(animTextBoxToolboxitem), “animTextBox.bmp”)> _
// Public Class animTextBox
下一行下开幕类语句,我们定义一些全局变量和动画,我们需要一个计时器对象。
// #Region “INI Variables, objects, events” ‘ ################
// ‘ ## Property variables
// Private _Msg As Label = LabelMessage
// Private _TMR As Timer
// ‘ ## other variables
// Private intPosition = 0
// ‘ ## Private objects
// Private WithEvents objTimer1 As New Timer ‘ use withevents to get timer tick event
// #End Region
将定义_msg和_TMR变量作为对照组。这个简单的技巧,为我们提供了可能性,使这个控件的属性透明透过UserControl的。由于这个原因,控制用户能够以modifiy属性的。如果我们不这样做UserControl的只显示了其自身的属性。
现在我们可以集中定义一些额外的性能提升的用户控件的标准属性:
// #Region “extended usercontrol properties” ‘ ###########
//
// ‘ public all label object properties to be able to change them
// <Browsable(True), Description(“Textlabel of the message to hold the message text”) _
// , Category(“extended Properties”)> _
// Public Property Message As Label
// Get
// Return LabelMessage
// End Get
// Set(value As Label)
// _Msg = value
// End Set
// End Property
//
// ‘ public all timer object properties to be able to change them
// <Browsable(True), Description(“Timer for animation of the message”) _
// , Category(“extended Properties”)> _
// Public Property MessageTimer As Timer
// Get
// Return objTimer1
// End Get
// Set(value As Timer)
// _TMR = value
// End Set
// End Property
// #End Region
第一物业信息 持有用户控件的子控件对象“ labelMessage “和物业MessageTimer 内部定时器对象。
下一个步骤是定义的控制事件:
的Load事件中,我们将poulate的物业的变量_msg和_TMR
至少我们调用内部函数“ALignText()”,使舒尔的scorlled文本对齐的要求与控制。..
// #Region “Control events” ‘#########################
// ‘ Event control loads
// ‘ set startup values
// Private Sub animTextBox_Load(sender As Object, e As EventArgs) Handles Me.Load
// intPosition = Panel1.Height + 25 ‘ set initial start position
// _TMR = objTimer1 ‘ load property value with timer object
// _Msg = LabelMessage ‘ load property value with label object
// ‘ 50 (Milliseconds) should be a good timer.interval value for a smooth
// ‘ animation
// objTimer1.Interval = 50
// ALignText() ‘ reset text alignment
// End Sub
管理动画的文字中,我们使用的计时器滴答事件,
动画/滚动文本,我们开始设置labelMessage.Top位置外(下同)的Panel1的控制。因此,在开始时是不可见的。
每个定时器打勾我们从顶部位置值减去1强制升abelMessage控制重绘高1点的顶部Panel1的控制。这看起来像一个向上滚动。我们这样做,只要完整labelMessage控制之外(以上)的Panel1的 控制。因此labelMessage控制是不可见的。
如果我们达到这一点,我们的labelMessage控制复位位置到IST开始值。这mimicks无休止的滚动文本。
至少我们调用Application.DoEvents版本更新保持在定时器tikc任务可能会在所有悬而未决的应用任务。
// ‘ Event timer tick = next animation step
// Private Sub objTimer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
// Handles objTimer1.Tick
// On Error Resume Next
// ‘ if there is no message text stop timer
// If LabelMessage.Text = “” Then
// objTimer1.Enabled = False
// Else
// ‘ increase/scroll label top point
// intPosition = intPosition – 1
// ‘ check if label is completly scrolled
// ‘ if yes reset label top position below panel to restart animation
// If intPosition = (LabelMessage.Height + 25) * -1 Then
// LabelMessage.Top = Me.Height + 25
// intPosition = LabelMessage.Top
// End If
// ‘ show label at new postion
// LabelMessage.Top = intPosition
// End If
// ALignText() ‘ make shure text alignment
// Application.DoEvents() ‘ give other app tasks a chance to work
// End Sub
为了给用户的应用程序,我们为他提供的机会可能停止滚动静态文本阅读的可能性都是这样做UserControl的区域用鼠标光标指向。要定义这一点,我们使用的Mose.Enter和鼠标。 / /’事件光标输入/面板/控制区域内离开事件, Panel1的控制。
// ‘ stop the animation and set text to top
// Private Sub Panel1_MouseEnter(sender As Object, e As EventArgs) Handles Panel1.MouseEnter
// ‘ stop the timer and set the label.top position to the top of the panel
// objTimer1.Enabled = False
// LabelMessage.Top = Me.Height – 50
// ALignText()
// End Sub
//
// ‘ Event cursor is leaving panel/control area
// ‘ restart the animation
// Private Sub Panel1_MouseLeave(sender As Object, e As EventArgs) Handles Panel1.MouseLeave
// ‘ reset the label.top position below the panel to restart animation
// LabelMessage.Top = Me.Height + 25
// intPosition = LabelMessage.Top
// objTimer1.Enabled = True
// End Sub
// #End Region
UFF,我们即将剩下的所有工作。我们必须定义的功能AlignText() 。这将会把labelMessage控制的左边框在Panel1的控制(左对齐)或中心。
// #Region “Private Functions/Subs” ‘#################
// ‘ Align the Textposition
// Sub ALignText()
// On Error Resume Next
// ‘ if the TextAlign property of the text label is set to left
// ‘ put the text label control to the left border of its parent (panel)
// If LabelMessage.TextAlign = ContentAlignment.TopLeft Then
// LabelMessage.Left = 1
// Else ‘ if not always center the text label (panel dock property is set to fill)
// Dim intW As Integer = Int(Me.Width / 2)
// Dim intW1 As Integer = Int(LabelMessage.Width / 2)
// Dim intDiff = intW – intW1
// If intDiff < 0 Then intDiff = 0 ‘ avoid negativ values
// LabelMessage.Left = intDiff
// End If
// End Sub
// #End Region
<span style=”font-size: 9pt;”>// end class </span>
编译该项目,并在你的下一个项目使用所创建的(控制animTextbox)DLL。
相关推荐
2. **控件选择**:在界面上添加必要的控件,如文本框(TextBox)显示软件信息,图片框(PictureBox)展示Logo,甚至可以添加超链接标签(LinkLabel)链接到开发者网站或帮助文档。 3. **事件处理**:为每个控件添加...
关于`C#资源库-AboutBox`,这个项目主要涉及的是在C#编程环境中创建和使用`AboutBox`。`AboutBox`是Windows应用程序中常见的一种对话框,用于展示软件的相关信息,如版本号、版权信息、开发人员、公司名称等。在C#中...
在"AboutBox.rar"这个例子中,滚动的渐变效果可能使得关于框更具动态感,增强了用户的交互体验,但同时也要注意不要过度使用动画,以免分散用户注意力或造成性能影响。 实现这样的效果可能涉及到的技术包括: - **...
在这个文件中,我们可以看到开发者可能已经添加了诸如文本框(TextBox)用于显示软件名称和版本,标签(Label)展示版权信息,以及可能的图片控件(PictureBox)来放置公司或软件的logo。 2. **图像处理**: - `...
aboutbox android移动应用
4. **AboutBox.vb和AboutBox.Designer.vb**:这两个文件一起定义了`AboutBox`类,VB.NET代码实现了关于对话框的逻辑和界面设计。`.Designer.vb`文件由Visual Studio自动生成,用于存储控件布局等UI元素的信息。 5. ...
本资源“特效关于对话框[AboutBox.rar]”提供了一套精品源代码,帮助开发者创建具有独特视觉效果的关于对话框。 源代码是软件开发的核心部分,它由程序员编写,用特定编程语言实现特定功能的指令集合。在本资源中,...
可以使用字符串切片和拼接来实现滚动效果,或者利用API函数如SetWindowRgn来创建更复杂的滚动动画。 在"压缩包子文件的文件名称列表"中提到的`AboutBox`,很可能是包含这个关于对话框的VB Form文件。这个文件可能...
AboutBox1 aboutBox = new AboutBox1(); aboutBox.ShowDialog(); } ``` 在这个过程中,"C#156显示系统默认的关于对话框 源代码"的文件很可能包含了一个完整的关于对话框实现,包括上述步骤的代码。源代码可能会有...
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX ); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_...
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX ); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = ...
它们描述了界面上的按钮、文本框等元素的位置和属性。 5. **主要源代码(.vb)**:`Form1.vb` 和 `AboutBox1.vb` 是实际编写代码的地方。`Form1.vb` 应该包含了计算器的核心逻辑,比如处理按钮点击事件,执行计算并...
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX ); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_...
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX ); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_...
在关于对话框的实现中,"AboutBox"通常是对话框类的名称,它可能包含了实现上述功能的代码和资源。开发者可能需要根据具体的应用程序环境和需求来调整动画的参数,如速度、延迟等,以达到最佳的视觉效果。 总的来说...
然后,给窗口命名(如AboutBox),并为源文件指定名字(如AboutBox.cpp)。接着,通过Project->Options将新建的窗口从自动建立中移除,确保它在程序启动时不自动显示。在View->Project Source中打开工程源文件,并在...
#define IDM_ABOUTBOX 0x0010 #define IDD_ABOUTBOX 100 #define IDS_ABOUTBOX 101 #define IDD_TESTBMPCP_DIALOG 102 #define IDR_MAINFRAME 128 #define IDC_BUTTON1 1000 #define IDC_EDIT1 1001 #define IDC_...
5. **控件**:在用户界面设计中,控件是指可以交互的对象,如按钮、文本框等。在创建图标时,可能会用到各种控件来构建编辑界面,如`iconedit.frm`可能是一个图标编辑器的表单。 6. **资源管理**:在Windows应用...
例如,通过集成DirectX或OpenGL库,游戏可以拥有流畅的动画和高品质的图像;通过网络库,可以实现多人在线对战功能,增强游戏的社交性。 综上所述,《Iq.zip_game》这款游戏利用了Delphi的强大功能,展示了Delphi在...
6. **AboutBox.xaml.cs**: 这通常用于显示关于应用程序的信息,如版本号、版权、开发者信息等。UI可能会包含文本和图像,代码则处理显示和关闭这个对话框的行为。 7. **WpfApplication1.csproj**: 这是项目的项目...