网上有关“用VB编写一个计算器程序的代码”话题很是火热,小编也是针对用VB编写一个计算器程序的代码寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

1、创建控件组的方法

首先创建一个命令按钮,调整其大小(觉得合适就行),名称为Command1,Caption 属性为数字 0 ;然后进行“复制”和“粘贴”,当选择“粘贴”时,出现对话框提示已有一个同名控件,询问是否创建控件组,选择“是”后,即创建了一个名为“Command”的控件组。

这时,第一个按钮的Index属性值默认为“0”,第二个的Index属性值自动设为“1”,并且大小与第一个按钮相同,只需修改其 Caption 属性为数字“1”并将其拖至合适位置即可。此后继续使用“粘贴”的方法建立其他控件组中其余按钮,共20个按钮,每建立一个,就将它拖到合适处,并修改相应的Caption属性值。

2、各控件组其属性设置如下:

设置效果如下图所示:

二、编写代码

Dim s1 As Single, s2 As Single, ysf As String

‘定义两个单精度数变量用与存放参与运算的数,一个字符型存放运算符

Private Sub Command1_Click(Index As Integer)

Text1.Text = Text1.Text & Command1(Index).Caption ’将command1的单击事件与文本框显示的内容连接

End Sub

Private Sub Command2_Click()

Text1.Text = Text1.Text + “。”

If (InStr(Text1.Text, “。”) = 1) Then ‘第一位不能为小数

Text1.Text = “”

End If

If InStr(Text1.Text, “。”) 《 Len(Text1.Text) Then ’防止出现两个小数点

Text1.Text = Left

(Text1.Text, Len(Text1.Text) - 1)

End If

End Sub

Private Sub

Command3_Click()

s2 = Val(Text1.Text) ‘开始加减乘除运算

Select Case ysf Case “+”

Text1.Text = s1 + s2

Case “-”

Text1.Text = s1 - s2

Case “*”

Text1.Text = s1 * s2

Case “/”

If s2 = 0 Then

MsgBox “分母不能为零!”

Text1.Text = “”

Else

Text1.Text = s1 / s2 End If End Select

Text1 = IIf(Left(Text1.Text, 1) = “。”, 0 & Text1.Text, Text1.Text) ‘

这个很关键,如果没有这个的话,得出小于1的小数前面没有0

End Sub

Private Sub Command4_Click()

If Text1.Text = “” Then ’文本为空就结束

Exit Sub

End If

Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1) ‘文本退一格

End Sub

Private Sub Command5_Click()

Text1.Text = “” ’清除当前框内文本

End Sub

Private Sub Command6_Click(Index As Integer)

s1 = Val(Text1.Text) ‘将s1隐藏起来 ysf = Command6(Index).Caption

Text1.Text = “”

End Sub

Private Sub Command7_Click()

If Left(Text1.Text, 1) 《》 “-” Then ’判断作为负数

Text1.Text = “-” & Text1.Text

Else

Text1.Text = Right(Text1.Text, Len(Text1.Text) - 1)

End If

End Sub

Private Sub Command8_Click()

Text1.Text = Text1.Text * Text1.Text ‘平方

End Sub

Visual Basic(VB)是由微软公司开发的包含环境的事件驱动编程语言。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松地使用VB提供的组件快速创建一个应用程序。

参考链Visual Basic——百度百科接

'是你的bitbit用法有问题,下面是修改后的代码:

Option Explicit

Private Type PALETTEENTRY

peRed As Byte

peGreen As Byte

peBlue As Byte

peFlags As Byte

End Type

Private Type LOGPALETTE

palVersion As Integer

palNumEntries As Integer

palPalEntry(255) As PALETTEENTRY

End Type

Private Type GUID

Data1 As Long

Data2 As Integer

Data3 As Integer

Data4(7) As Byte

End Type

Private Const RASTERCAPS As Long = 38

Private Const RC_PALETTE As Long = &H100

Private Const SIZEPALETTE As Long = 104

Private Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Long) As Long

Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Long, _

ByVal nWidth As Long, ByVal nHeight As Long) As Long

Private Declare Function GetDeviceCaps Lib "GDI32" (ByVal hDC As Long, ByVal _

iCapabilitiy As Long) As Long

Private Declare Function GetSystemPaletteEntries Lib "GDI32" (ByVal hDC As Long, _

ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries _

As PALETTEENTRY) As Long

Private Declare Function CreatePalette Lib "GDI32" (lpLogPalette As LOGPALETTE) _

As Long

Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal hObject _

As Long) As Long

Private Declare Function BitBlt Lib "GDI32" (ByVal hDCDest As Long, ByVal XDest As _

Long, ByVal YDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, _

ByVal hDCSrc As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop _

As Long) As Long

Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Long) As Long

Private Declare Function GetForegroundWindow Lib "user32" () As Long

Private Declare Function SelectPalette Lib "GDI32" (ByVal hDC As Long, ByVal hPalette _

As Long, ByVal bForceBackground As Long) As Long

Private Declare Function RealizePalette Lib "GDI32" (ByVal hDC As Long) As Long

Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As _

RECT) As Long

Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As _

Long) As Long

Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Type PicBmp

Size As Long

Type As Long

hBmp As Long

hPal As Long

Reserved As Long

End Type

Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As _

PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Dim ComputerName As String '本机名称,用来区分不同的机器所生成的图像。

'创建BMP位图

Public Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture

Dim r As Long

Dim Pic As PicBmp

Dim IPic As IPicture

Dim IID_IDispatch As GUID

'填充IDispatch界面

With IID_IDispatch

.Data1 = &H20400

.Data4(0) = &HC0

.Data4(7) = &H46

End With

'填充Pic

With Pic

.Size = Len(Pic) '注释: Pic结构长度

.Type = vbPicTypeBitmap '注释: 图象类型

.hBmp = hBmp '注释: 位图句柄

.hPal = hPal '注释: 调色板句柄

End With

'建立Picture图象

r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)

'返回Picture对象

Set CreateBitmapPicture = IPic

End Function

'截图处理

Public Function CaptureWindow(ByVal hWndSrc As Long, ByVal Client As Boolean, ByVal _

LeftSrc As Long, ByVal TopSrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc _

As Long) As Picture

Dim hDCMemory As Long '保存截取图象的目标设备

Dim hBmp As Long

Dim hBmpPrev As Long

Dim r As Long

Dim hDCSrc As Long '要截取图象的源设备

Dim hPal As Long

Dim hPalPrev As Long

Dim RasterCapsScrn As Long

Dim HasPaletteScrn As Long

Dim PaletteSizeScrn As Long

Dim LogPal As LOGPALETTE

'GetDC传回用于写入窗口显示区域的设备内容句柄,而GetWindowDC传回写入整个窗口的设备内容句柄

'区别在于GetDC不包括边框、滚动条、标题栏、菜单等,而GetWindowDC则包括

If Client Then '如果为真,即指定是客户区(不包括标题栏等)

hDCSrc = GetDC(hWndSrc) 'GetDC检索一指定窗口的客户区域或整个屏幕的显示设备上下文的句柄

Else '否则用GetWindowDC寻找后获取

hDCSrc = GetWindowDC(hWndSrc)

End If

hDCMemory = CreateCompatibleDC(hDCSrc) '创建一块与hDCSrc设备场景一样的内存区

hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc) '创建一幅与设备有关位图

hBmpPrev = SelectObject(hDCMemory, hBmp) 'SelectObject将位图放入设备场景中

'获得屏幕属性

RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS) '根据指定设备场景代表的设备的功能返回信息

HasPaletteScrn = RasterCapsScrn And RC_PALETTE

PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE)

'如果屏幕对象有调色板则获得屏幕调色板

If HasPaletteScrn And (PaletteSizeScrn = 256) Then

'建立屏幕调色板的拷贝

LogPal.palVersion = &H300

LogPal.palNumEntries = 256

r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0)) '获取系统调色板

hPal = CreatePalette(LogPal) 'CreatePalette调色板函数

'将新建立的调色板选入建立的内存绘图句柄中

hPalPrev = SelectPalette(hDCMemory, hPal, 0)

r = RealizePalette(hDCMemory) 'RealizePalette函数使系统恢复当前选中的逻辑调色板中的值

End If

'拷贝图象

r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy)

hBmp = SelectObject(hDCMemory, hBmpPrev)

If HasPaletteScrn And (PaletteSizeScrn = 256) Then

hPal = SelectPalette(hDCMemory, hPalPrev, 0)

End If

'释放资源

r = DeleteDC(hDCMemory)

r = ReleaseDC(hWndSrc, hDCSrc)

Set CaptureWindow = CreateBitmapPicture(hBmp, hPal)

End Function

Private Sub Form_Load()

Dim sBuffer As String

Dim lSize As Long

sBuffer = Space$(255)

lSize = Len(sBuffer)

Call GetComputerName(sBuffer, lSize)

ComputerName = Trim(Left$(sBuffer, lSize))

End Sub

Private Sub Timer1_Timer()

Dim hWndScreen As Long, CaptureScreen As StdPicture

'获得桌面的窗口句柄

hWndScreen = GetDesktopWindow()

Set CaptureScreen = CaptureWindow(hWndScreen, False, 0, 0, Screen.Width _

\ Screen.TwipsPerPixelX, Screen.Height \ Screen.TwipsPerPixelY)

SavePicture CaptureScreen, "\\WWW-94E37D893B8\D$\ClientScreen\image" & ComputerName & ".bmp"

Call iniPara

End Sub

'当发现有异常情况时,往往需要缩短采样间隔,下面iniPara函数可实现改变定时器的Interval属性的功能。

Private Function iniPara() '读取服务器上的Client.ini文件,初使化定时器的间隔。

Dim sBuffer As String

Dim lSize As Long

Dim TimerInterval As Integer '采样间隔

Open "\\WWW-94E37D893B8\D$\ClientScreen\Client.ini" For Input As #1

Line Input #1, sBuffer

lSize = InStr(1, sBuffer, "=")

Timer1.Interval = Val(Mid(sBuffer, lSize + 1))

Close (1)

End Function

关于“用VB编写一个计算器程序的代码”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!