vb.net开发简单的时钟程序??高手救救我!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net开发简单的时钟程序??高手救救我!相关的知识,希望对你有一定的参考价值。

vb.net开发简单的时钟程序??高手救救我!请写出源代码和方法!!重谢!
是开发应用程序!!!一个可以显示当前时间的程序!数字时钟!








Hand类的代码:
Public MustInherit Class Hand
Protected gp As GraphicsPath = New GraphicsPath()
Protected gpBase As GraphicsPath = Nothing
Protected midX As Integer = 150 ‘默认的窗体
Protected midY As Integer = 150 ‘中心位置
‘构造器,得到窗体中心位置
Public Sub New(ByVal theForm As Form1)
midX = (theForm.ClientRectangle.Left + theForm.ClientRectangle.Right) / 2
midY = (theForm.ClientRectangle.Top + theForm.ClientRectangle.Bottom) / 2
End Sub
MustOverride Sub Transform(ByVal d As DateTime)
‘绘制指针路径
Overridable Sub Draw(ByVal g As Graphics)
Dim aPen As Pen = New Pen(Brushes.Black, 4F)
g.DrawPath(aPen, gp)
g.FillPath(Brushes.Black, gp)
aPen.Dispose()
End Sub
‘使用矩阵实现路径(gp)的旋转
Public Sub Rotate(ByVal angle As Double)
gp = CType(gpBase.Clone(), GraphicsPath)
Dim mTransform As Matrix = New Matrix()
mTransform.RotateAt(CType(angle,Single),NewPointF(midX,midY))
gp.Transform(mTransform)
End Sub
End Class
为了节省篇幅,上面的代码省略了引入命名空间的语句。
下面是分针(MinuteHand)类的定义:
Public Class MinuteHand
Inherits Hand
‘构造器,生成绘制分针的路径(gp)
Public Sub New(ByVal myForm As Form1)
MyBase.New(myForm)
gp.AddLine(midX, midY, midX, 45)
gp.AddLine(midX, 45, midX - 3, 50)
gp.AddLine(midX - 3, 50, midX + 3, 50)
gp.AddLine(midX + 3, 50, midX, 45)
gpBase = CType(gp.Clone(), GraphicsPath)
End Sub
‘Transform方法取得系统当前时间,并旋转时钟指针。
Public Overrides Sub Transform(ByVal d As DateTime)
Dim minuteTime As Double = (CDbl(d.Minute) + CDbl(d.Second / 60))
Dim angle As Double = (CDbl(minuteTime) / 60) * 360
Rotate(angle)
End Sub
End Class
对所有的指针旋转的方法都是相同的,因此在基类中实现。由于时针和秒针的实现与分针相似,所不同者,只在于构造器中绘制的指针路径不同和Transform方法中转动的角度不同,在这里就不在赘述了。
另外还需要提一下的是画时钟表面的代码,时钟表面用ClockFace类来实现。这个类首先画一个圆代表时钟,然后画上米老鼠的图案,最后在相应的位置画上数字1~12代表12个小时。
Public Sub Draw(ByVal g As Graphics)
DrawClockFace(g)
DrawImage(g)
DrawNumbers(g)
DrawPin(g)
End Sub
下面是ClockFace类的属性:
Private ClockRectangle As Rectangle
Private ClockFont As Font = New Font("Arial", 12)
Private midPoint As Point
Private ClockImage As Bitmap
Private Const IMAGEX As Integer = 50
Private Const IMAGEY As Integer = 50
DrawClockFace方法用来画时钟表面:
Private Sub DrawClockFace(ByVal g As Graphics)
g.FillEllipse(Brushes.White, ClockRectangle.Left + 10, ClockRectangle.Top + 10, ClockRectangle.Width - 20, ClockRectangle.Height - 20)
g.DrawEllipse(Pens.Black, ClockRectangle.Left + 10, ClockRectangle.Top + 10, ClockRectangle.Width - 20, ClockRectangle.Height - 20)
End Sub
然后用Graphics对象的DrawImage方法画出米老鼠的图片:
Private Sub DrawImage(ByVal g As Graphics)
Dim nWidth As Integer = ClockImage.Width
Dim nHeight As Integer = ClockImage.Height
Dim destRect As Rectangle = New Rectangle(midPoint.X - IMAGEX / 2, midPoint.Y - IMAGEY / 2, IMAGEX, IMAGEY)
g.DrawImage(ClockImage, destRect)
End Sub
数字在时钟上的位置是用sin和cos函数计算的:
Private Sub DrawNumbers(ByVal g As Graphics)
Dim count As Integer = 1
Dim a As Double
For a = 0 To 2 * Math.PI Step 2 * Math.PI / 12
Dim x As Double = (ClockRectangle.Width - 70) / 2 * Math.Cos(a - Math.PI / 3) + (ClockRectangle.Width - 70) / 2 + 25
Dim y As Double = (ClockRectangle.Width - 70) / 2 * Math.Sin(a - Math.PI / 3) + (ClockRectangle.Width - 70) / 2 + 20
g.DrawString(Convert.ToString(count), ClockFont, Brushes.Black, CType(x, Single), CType(y, Single), New StringFormat())
count += 1
Next
End Sub
最后是窗体文件(Form1.vb):
Public Class Form1
Inherits System.Windows.Forms.Form
Private MyMinuteHand As MinuteHand
Private MyHourHand As HourHand
Private MySecondHand As SecondHand
Private TheClockFace As ClockFace
Private FirstTick As Boolean = False
‘在窗体的OnPaint事件中取得Graphics对象
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
If (FirstTick = False) Then Exit Sub
Dim g As Graphics = e.Graphics
TheClockFace.Draw(g)
MyHourHand.Draw(g)
MyMinuteHand.Draw(g)
MySecondHand.Draw(g)
TheClockFace.DrawPin(g)
End Sub
‘计时器事件
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
MySecondHand.Transform(DateTime.Now)
MyHourHand.Transform(DateTime.Now)
MyMinuteHand.Transform(DateTime.Now)
FirstTick = True
Invalidate()
参考技术A 这个应该能帮上你
------------------
是使用GDI+画图的例子
本章最后的综合实例是一个模拟时钟。程序运行时,窗体中模拟一个真实的时钟那样显示当前的时间。
本程序使用了面向对象的编程方法,由于时针(HourHand)、分针(MinuteHand)和秒针(SecondHand)包含相似的属性和方法,我们生成一个针(Hand)类作为它们共同的基类,提供共有的类成员。下面是定义Hand类的代码:
Public MustInherit Class Hand
Protected gp As GraphicsPath = New GraphicsPath()
Protected gpBase As GraphicsPath = Nothing
Protected midX As Integer = 150 ‘默认的窗体
Protected midY As Integer = 150 ‘中心位置
‘构造器,得到窗体中心位置
Public Sub New(ByVal theForm As Form1)
midX = (theForm.ClientRectangle.Left + theForm.ClientRectangle.Right) / 2
midY = (theForm.ClientRectangle.Top + theForm.ClientRectangle.Bottom) / 2
End Sub
MustOverride Sub Transform(ByVal d As DateTime)
‘绘制指针路径
Overridable Sub Draw(ByVal g As Graphics)
Dim aPen As Pen = New Pen(Brushes.Black, 4F)
g.DrawPath(aPen, gp)
g.FillPath(Brushes.Black, gp)
aPen.Dispose()
End Sub
‘使用矩阵实现路径(gp)的旋转
Public Sub Rotate(ByVal angle As Double)
gp = CType(gpBase.Clone(), GraphicsPath)
Dim mTransform As Matrix = New Matrix()
mTransform.RotateAt(CType(angle,Single),NewPointF(midX,midY))
gp.Transform(mTransform)
End Sub
End Class
为了节省篇幅,上面的代码省略了引入命名空间的语句。
下面是分针(MinuteHand)类的定义:
Public Class MinuteHand
Inherits Hand
‘构造器,生成绘制分针的路径(gp)
Public Sub New(ByVal myForm As Form1)
MyBase.New(myForm)
gp.AddLine(midX, midY, midX, 45)
gp.AddLine(midX, 45, midX - 3, 50)
gp.AddLine(midX - 3, 50, midX + 3, 50)
gp.AddLine(midX + 3, 50, midX, 45)
gpBase = CType(gp.Clone(), GraphicsPath)
End Sub
‘Transform方法取得系统当前时间,并旋转时钟指针。
Public Overrides Sub Transform(ByVal d As DateTime)
Dim minuteTime As Double = (CDbl(d.Minute) + CDbl(d.Second / 60))
Dim angle As Double = (CDbl(minuteTime) / 60) * 360
Rotate(angle)
End Sub
End Class
对所有的指针旋转的方法都是相同的,因此在基类中实现。由于时针和秒针的实现与分针相似,所不同者,只在于构造器中绘制的指针路径不同和Transform方法中转动的角度不同,在这里就不在赘述了。
另外还需要提一下的是画时钟表面的代码,时钟表面用ClockFace类来实现。这个类首先画一个圆代表时钟,然后画上米老鼠的图案,最后在相应的位置画上数字1~12代表12个小时。
Public Sub Draw(ByVal g As Graphics)
DrawClockFace(g)
DrawImage(g)
DrawNumbers(g)
DrawPin(g)
End Sub
下面是ClockFace类的属性:
Private ClockRectangle As Rectangle
Private ClockFont As Font = New Font("Arial", 12)
Private midPoint As Point
Private ClockImage As Bitmap
Private Const IMAGEX As Integer = 50
Private Const IMAGEY As Integer = 50
DrawClockFace方法用来画时钟表面:
Private Sub DrawClockFace(ByVal g As Graphics)
g.FillEllipse(Brushes.White, ClockRectangle.Left + 10, ClockRectangle.Top + 10, ClockRectangle.Width - 20, ClockRectangle.Height - 20)
g.DrawEllipse(Pens.Black, ClockRectangle.Left + 10, ClockRectangle.Top + 10, ClockRectangle.Width - 20, ClockRectangle.Height - 20)
End Sub
然后用Graphics对象的DrawImage方法画出米老鼠的图片:
Private Sub DrawImage(ByVal g As Graphics)
Dim nWidth As Integer = ClockImage.Width
Dim nHeight As Integer = ClockImage.Height
Dim destRect As Rectangle = New Rectangle(midPoint.X - IMAGEX / 2, midPoint.Y - IMAGEY / 2, IMAGEX, IMAGEY)
g.DrawImage(ClockImage, destRect)
End Sub
数字在时钟上的位置是用sin和cos函数计算的:
Private Sub DrawNumbers(ByVal g As Graphics)
Dim count As Integer = 1
Dim a As Double
For a = 0 To 2 * Math.PI Step 2 * Math.PI / 12
Dim x As Double = (ClockRectangle.Width - 70) / 2 * Math.Cos(a - Math.PI / 3) + (ClockRectangle.Width - 70) / 2 + 25
Dim y As Double = (ClockRectangle.Width - 70) / 2 * Math.Sin(a - Math.PI / 3) + (ClockRectangle.Width - 70) / 2 + 20
g.DrawString(Convert.ToString(count), ClockFont, Brushes.Black, CType(x, Single), CType(y, Single), New StringFormat())
count += 1
Next
End Sub
最后是窗体文件(Form1.vb):
Public Class Form1
Inherits System.Windows.Forms.Form
Private MyMinuteHand As MinuteHand
Private MyHourHand As HourHand
Private MySecondHand As SecondHand
Private TheClockFace As ClockFace
Private FirstTick As Boolean = False
‘在窗体的OnPaint事件中取得Graphics对象
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
If (FirstTick = False) Then Exit Sub
Dim g As Graphics = e.Graphics
TheClockFace.Draw(g)
MyHourHand.Draw(g)
MyMinuteHand.Draw(g)
MySecondHand.Draw(g)
TheClockFace.DrawPin(g)
End Sub
‘计时器事件
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
MySecondHand.Transform(DateTime.Now)
MyHourHand.Transform(DateTime.Now)
MyMinuteHand.Transform(DateTime.Now)
FirstTick = True
Invalidate()
‘此方法继承自Control类,使控件失效而导致窗体重绘(即再次调用OnPaint事件)
End Sub
End Class
注意要在Form1类的构造器中键入下列代码:
MyMinuteHand = New MinuteHand(Me)
MyHourHand = New HourHand(Me)
MySecondHand = New SecondHand(Me)
TheClockFace = New ClockFace(ClientRectangle)
在Dispose方法中键入
timer1.Start()
参考技术B 很简单的
可能没有上面的华丽,但很简洁

新建一个标准exe工程
添加一个Timer定时器控件
添加一个Label控件
把窗体改适合,并把Caption属性改为“数字时钟”
将定时器控件的Interval属性修改为1000
双击定时器控件在Private Sub Timer1_Timer() 和 End Sub 之间输入
Label1.Caption = Time()
这样就可以了,但是在程序刚启动时Label控件上的文字Label1很不美观,可以把label1的CaPtion属性删除,我个人把文字改为了“载入中”
参考技术C <div id="bgclockshade" style="position:absolute;visibility:visible;font-family:'Arial black';color:#cccccc;font-size:20px;top:50px;left:173px"></div>
<div id="bgclocknoshade" style="position:absolute;visibility:visible;font-family:'Arial black';color:#000000;font-size:20px;top:48px;left:170px"></div>
<div id="mainbody" style="position:absolute; visibility:visible">
</div>
<script language=javascript>
<!--
function www_helpor_net()
thistime= new Date()
var hours=thistime.getHours()
var minutes=thistime.getMinutes()
var seconds=thistime.getSeconds()
if (eval(hours) <10) hours="0"+hours
if (eval(minutes) < 10) minutes="0"+minutes
if (seconds < 10) seconds="0"+seconds
thistime = hours+":"+minutes+":"+seconds

if(document.all)
bgclocknoshade.innerhtml=thistime
bgclockshade.innerHTML=thistime


if(document.layers)
document.bgclockshade.document.write('<div id="bgclockshade" style="position:absolute;visibility:visible;font-family:Verdana;color:FFAAAAA;font-size:20px;top:10px;left:152px">'+thistime+'</div>')
document.bgclocknoshade.document.write('<div id="bgclocknoshade" style="position:absolute;visibility:visible;font-family:Verdana;color:DDDDDD;font-size:20px;top:8px;left:150px">'+thistime+'</div>')
document.close()

var timer=setTimeout("www_helpor_net()",200)

www_helpor_net();
//-->
</script>
参考技术D 一句就够了,别弄得那么麻烦
添加label1和timer控件,设置interval为1000
timer的tick事件添加以下代码

Label1.Text = TimeOfDay

VB.net 简单的许可证密钥来保护应用程序

【中文标题】VB.net 简单的许可证密钥来保护应用程序【英文标题】:VB.net simple license key to protect application 【发布时间】:2017-05-16 01:49:55 【问题描述】:

我正在开发一个简单的 vb 应用程序。但我想保护它,让用户可以选择仅在特定时间使用它。 所以我想用一个键码制作一个文本文件(除了随机字符,它还包含一个过期日期)。在此到期日期之后启动应用程序时,应用程序应自动关闭。 该纺织品所在的位置可以与运行可执行文件的位置相同。 你们中有人知道如何实现它吗?或者有没有更简单的方法来实现这个

【问题讨论】:

请注意,如果软件在用户控制的硬件中运行,则总是可以绕过您可能实施的任何保护。 @Alejandro 当然是对的,但更有建设性的看待它的方式是问自己一个问题“我在对抗谁?” - 如果您的用户在技术上是文盲,那么即使您描述的机制也将超出他们的范围。当然,如果应用程序不是特别受欢迎、价格不高或以其他方式具有吸引力,那么即使是超出此级别的微小技术进步也将挡在最坚定的应用程序之外。 就其性质而言,没有simple license key 这样的东西。您不能在用户系统上保密。除了在您的系统上之外,您可以以一种非常非常难以复制的方式创建密钥(文件)。然后客户端应用程序“只是”必须验证许可证。仍然需要他们将您的代码修补到IsRegistered = True,而不是调用该方法。到期是另一个完全值得关注的问题。你应该问自己的第一个问题是why does it expire?除非您有技术支持人员,否则您为什么值得拥有它? 【参考方案1】:

如果您想为您的应用程序提供“试用期”,您可能需要对其进行硬编码以防止篡改。然后,在购买时对注册表和其他文件进行修改(可能会下载一些“注册”应用程序的文件,以便将自己识别为“完整”。更进一步,可能会定期让应用程序访问您的服务器并验证许可证。

这是一个巨大的话题,很多比我聪明的人都可以参与其中。我会注意到,这是开发人员和黑客之间试图绕过许可的持续斗争的一部分。

【讨论】:

【参考方案2】:

要使软件在一段时间内解锁,您可以在Pastebin 等网站上创建文本文件并添加到期日期。然后让您的软件检查文件是否仍然有效。

请注意,用户可以“追踪”您的软件发送的请求,绝不存储与您的软件相关联的私人信息。

您也可以使用HWID protection,它确保您的软件只有在与存储在加密字符串中的硬件信息匹配时才能运行。

您可以散列其他用户的信息,如用户名、wifi 名称等,但请记住,更改任何此类信息(操作系统、硬件或系统信息)都会创建新的唯一 HWID,这可能与之前的不匹配- 导致 HWID 授权失败。

要更难绕过保护,您可以obfuscate your software。

【讨论】:

以上是关于vb.net开发简单的时钟程序??高手救救我!的主要内容,如果未能解决你的问题,请参考以下文章

VB.net 和C#.net 各有啥优缺点

用于 VB(5 或 .NET)的基本和简单的图像处理库

用vb.net编写的程序怎么封装?

用vb.net编写的程序怎么封装?

简单的vb.net数据库程序

如何利用vb.net和arcengine实现导航数据的经纬度坐标在地图上显示成导航轨迹