如何解决vb绘图变形问题?

drunkfsoul 2008-04-01 09:29:27
我尝试用以下代码绘制五角星,得到的结果跟窗体的大小设置有关。如果窗体大小设置不当,则发现五角星跟外圆不相切。如何解决这个问题?

ScaleMode = 3
Scale (0, 0)-(640, 480)

DrawWidth = 2
Circle (320, 240), 200
Dim i As Integer

Dim x1, x2, y1, y2 As Double
pi = 3.1415926
x1 = 320
y1 = 40
For i = 1 To 5
x2 = 320 - 200 * Sin(pi * 0.8 * i)
y2 = 240 - 200 * Cos(i * 0.8 * pi)
Line (x1, y1)-(x2, y2)
x1 = x2
y1 = y2

Next
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
drunkfsoul 2008-04-03
  • 打赏
  • 举报
回复
谢谢两位,不过你们好像都没提到为什么我的代码绘制图形时会出现图形变形。
东方之珠 2008-04-01
  • 打赏
  • 举报
回复
刘老师上面这个五角星真漂亮,还填充透明,不错!
cbm6666 2008-04-01
  • 打赏
  • 举报
回复
'打开窗体贴上代码即可, 随你要几角型的星,改变下面这行的参数即可

'Call DrawAngle(5, 0, 0, SizeWH) '参数:几角型,X座标,Y座标,边长

Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Const WS_EX_LAYERED = &H80000
Const GWL_EXSTYLE = (-20)
Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
'*******************************
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function ExtFloodFill Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long, ByVal wFillType As Long) As Long
Const FLOODFILLBORDER = 0
Const pi = 3.14159265358979
Const FLOODFILLSURFACE = 1
Const crNewColor = &HFFFF80
Const SizeWH = 5000 '边长
Dim rtn&, i&, X1&, Y1&, transcolor&, mBrush&
Private Sub Form_Load()
transcolor = RGB(66, 66, 66)
Me.BorderStyle = 0: Me.Caption = "": Me.BackColor = transcolor
Me.FillColor = QBColor(Int(Rnd * 6) + 9): Me.FillStyle = 0
Me.AutoRedraw = True
mBrush = CreateSolidBrush(crNewColor)
SelectObject Me.hdc, mBrush
Call DrawAngle(5, 0, 0, SizeWH) '参数:几角型,X座标,Y座标,边长
Me.ScaleMode = 3: Me.Width = SizeWH * 2: Me.Height = SizeWH * 2
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
X1 = Me.Width \ 2 \ 15: Y1 = Me.Height \ 2 \ 15
ExtFloodFill Me.hdc, X1, Y1, Me.Point(X1, Y1), 1
rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes hwnd, transcolor, 150, LWA_COLORKEY Or LWA_ALPHA
End Sub

Private Sub Form_Unload(Cancel As Integer)
DeleteObject mBrush
End
End Sub

Public Sub DrawAngle(Nangle%, StartX&, StartY&, Lsize&)
StartX = IIf(StartX <= Lsize, Lsize, StartX)
StartY = IIf(StartY <= Lsize, Lsize, StartY)
Me.Cls
Me.FillColor = QBColor(15)
Me.Circle (StartX, StartY), SizeWH
Me.FillColor = QBColor(10)
Me.PSet (StartX + Sin(0) * Lsize, StartY - Cos(0) * Lsize)
For i = 0 To 360 Step (360 / Nangle)
X1 = StartX + Sin(i * pi / 180) * Lsize
Y1 = StartY - Cos(i * pi / 180) * Lsize
Me.Line -(X1, Y1)
X1 = StartX + Sin((i + (180 / Nangle)) * pi / 180) * Lsize / 2
Y1 = StartY - Cos((i + (180 / Nangle)) * pi / 180) * Lsize / 2
Me.Line -(X1, Y1)
Next i
Me.Line -(StartX + Sin(0) * Lsize, StartY - Cos(0) * Lsize)
DeleteObject mBrush
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then Unload Me
Me.FillColor = QBColor(Int(Rnd * 6) + 9)
ExtFloodFill Me.hdc, X, Y, Me.Point(X, Y), 1
End Sub


效果图:
http://p.blog.csdn.net/images/p_blog_csdn_net/cbm666/366646/o_Star5.jpg

东方之珠 2008-04-01
  • 打赏
  • 举报
回复
'参考一下我写的这个代码
'根据输入的直径画出五角星
Option Explicit

Private Sub Command1_Click()
Dim R, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5
Dim X, Y, chenjl1031
Const Pi = 3.14159265358979
Cls
chenjl1031 = Val(InputBox("输入五角星的直径,大于10,小于窗体高度" & Me.ScaleHeight)) / 2

'中心坐标是(x,y)
X = Me.ScaleWidth / 2: Y = Me.ScaleHeight / 2

Circle (X, Y), chenjl1031 '画外接园

'五个点的坐标为
x1 = X: y1 = Y - chenjl1031
x2 = X + chenjl1031 * Cos(Pi / 10)
y2 = Y - chenjl1031 * Sin(Pi / 10)
x3 = X + chenjl1031 * Cos(54 / 180 * Pi)
y3 = Y + chenjl1031 * Sin(54 / 180 * Pi)
x4 = X - chenjl1031 * Cos(54 / 180 * Pi)
y4 = y3
x5 = X - chenjl1031 * Cos(18 / 180 * Pi)
y5 = y2

'画出五角星
Line (x1, y1)-(x3, y3)
Line -(x5, y5)
Line -(x2, y2)
Line -(x4, y4)
Line -(x1, y1)
End Sub

Private Sub FoRm_Load()
Me.ScaleMode = 3
Me.AutoRedraw = True
End Sub
东方之珠 2008-04-01
  • 打赏
  • 举报
回复
0.8有误差,还要精确
水文资料数据库管理系统开发及应用 摘 要:随着科学技术的迅速发展,水文资料数据库管理系统的开发应用,在提高水文数据 管理质量的同时,还能简化水文资料的录入及操作,科学的节省了水文管理时间,提高 了管理人员的工作效率。在此,本文针对水文资料数据库管理系统的发展及应用这一问 题,做以下论述。 关键词:水文资料;数据库;管理系统;开发应用 顾名思义,所谓的水文资料主要是指记录涵盖降水、蒸发、地表径流及地下水等各 类水的运动指标等多个方面的基础资料,这些资料在当前人们的日常生活中,能够准确 的反应该地区人们生活用水的形成及实际属性,在很大程度上具备一定的连续性及复杂 性。随着社会的迅速发展,传统的人工式水文资料管理已经无法满足人们的生活需求, 再加上网络技术在各行各业的运用,水文资料数据库管理系统的开发与应用,已经成为 当前水文管理中的主要发展趋势。这种管理模式在提高管理质量的同时,还能节省管理 成本。本文从水文资料数据库管理系统的总体设计、水文资料数据库管理系统的开发、 水文资料数据库管理系统的主要功能及应用等几个方面出发,针对水文资料数据库管理 系统开发及应用中出现的相关问题及完善途径,做以下简要分析: 1 水文资料数据库管理系统的总体设计 针对水文资料数据库管理系统的设计,通过长时间的研究发现,水文资料整编计算 系统作为一个动态的运行系统,除了具备一定的稳定性外,其功能也比较齐全。在整个 系统投入使用时,其输入输出多采用文本文件的方式,且数据比较多,输入人员一旦没 有掌握数据的输入形式,将会造成整个文件表格出现混乱状态,在浪费大量时间精力进 行纠正的同时,还会降低整个水文资料的管理效率。这就要求当前的开发人员在实际工 作中,能够开发出一个接口程序,使其专门管理整编计算机程序的输入输出文件。从当 前我国水文资料管理的实际状况出现,其数据库的开发应用,该系统的应用需求主要体 现在以下几个方面:第一,针对不具备计算机操作能力或计算机操作基础差的管理人员 ,该系统在设计应用中,具备一定的人性化特点,以便操作人员在实际应用中,能够尽 快熟悉管理程序,避免因操作失误而引起的不必要损失;第二,在整个系统中,针对大 量输入、输出的数据,需要系统使用Excel表格对其进行相应的记录;第三,管理人员在 增加或删除表格数据时,应使用简单的操作即可,以此来保证系统自身的稳定性;第四 ,系统在投入使用中,应在原有的基础上加强对数据的检索能力,并通过绘图的形式来 变形出系统自身的管理功能,为管理人员的查阅提供方便。 2 水文资料数据库管理系统的开发 水文资料数据库管理系统的开发,既需要相应的技术支持,又需要一定的运行环境 ,只有这样才能确保数据库的顺利运行。针对整个系统的开发,主要包括以下几个方面 : 2.1 系统开发工具及运行环境 根据新系统的目标,采用VB6控制Excel和Access来完成任务,在技术上是成熟和可 靠的。选用VB6作为开发工具,是因为它是可视化编程工具中最容易掌握的一种,且和O ffice结合紧密。在功能上完全能满足用户的需要。使用Excel作为输入输出的表格控件 ,主要是因为他得到了用户的广泛使用,在数据输入、修改、计算等方面都有着非常出 色的表现。而且Excel与VB6同属Microsoft公司产品,二者兼容性非常好,便于实现各种 功能上的程序控制。 2.2 关键技术 在当前水文数据库资料管理系统的开发中,一般以Excel程序为核心,并通过Excel 中的相关程序来完成整个数据的输入、输出工作。在整个运行过程中,其关键技术主要 体现在以下几个方面:首先,管理人员需要熟练的打开Excel表格中的关键代码;其次, 在顺利打开的基础上,输出与之相符的关键代码;最后,准确控制Excel单元表格中的关 键代码。 3 水文资料数据库管理系统的主要功能及应用 3.1 原始数据的录入及修改 水文资料数据库管理系统的应用,能够在录入与修改数据的过程中,使用同一模块 ,若录入的数据已经存在,则操作人员只需打开与之相应的文件夹即可;若没有存在, 则打开的问价夹将会是一个空表文件。与此同时,基于整个管理系统是以Excel管理系统 为主,因而在表格的帮助下,能够将整个杂乱的数据进行分类管理,在提高管理质量的 同时,还极大的方便了管理人员的查阅。 3.2 成果表的输出及打印 一般而言,在系统程序投入使用后,整编程序计算后出现的输出成果,管理人员在 打印的过程中,会发现这些结果一般是以文本文件的格式答应出来的,且这些文本数据 都已经自动录入事先设置的Excel表格中,并以表格的形式出现在人们眼前。使用表格的 形式将整个成果表现出来,在方便查阅的同时,系统还会自动将整个数据按照相应的格 式转移到数据库中进行储存,并对其标注上日期,以便今后的查阅。 3.3 数据库

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧