首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

窗体显示任意大小、颜色和位置的图形,该如何处理

2012-03-24 
窗体显示任意大小、颜色和位置的图形要求:单击窗体,在任意位置显示任意大小,任意颜色的五角星由于没有直接

窗体显示任意大小、颜色和位置的图形
要求:单击窗体,在任意位置显示任意大小,任意颜色的五角星
由于没有直接画出五角星的控件,我想到了在窗体上输出一个五角星(键盘中的特殊符号★)
问题是:窗体上直接通过print输出的字符是无法改变大小和颜色的,这让我又想通过标签label中的caption来显示★,但受限于以下几个问题:
1)★的大小受限于标签的大小,不可能达到任意大小
2)label标签没有currentX和currentY属性,不能实现在任意位置显示的目的
我写了点,但都是错的:

VB code
Private Sub Form_Click()Label1.Caption = "★"Label1.ForeColor = RGB(Int(Rnd(256)), Int(Rnd(256)), Int(Rnd(256)))Label1.FontSize = Int(Rnd(24))Printer.CurrentX = Int(Rnd(4801))Printer.CurrentY = Int(Rnd(3601))End Sub

不知道大家能否帮我实现这个窗体单击代码?
谢谢了。

[解决办法]
试试,看看
VB code
Private Sub Form_Click()RandomizeForeColor = RGB(Int(Rnd(1) * 256), Int(Rnd(1) * 256), Int(Rnd(1) * 256))FontSize = Int(Rnd(1) * 2160)CurrentX = Int(Rnd(1) * 4801)CurrentY = Int(Rnd(1) * 3601)Print "★"End Sub
[解决办法]
随机坐标自己设置吧
VB code
Private Type COORD    x As Long    y As LongEnd TypePrivate Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As Any, ByVal nCount As Long, ByVal nPolyFillMode As Long) As LongPrivate Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As Any, ByVal nCount As Long) As LongPrivate Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As LongPrivate Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As LongPrivate Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongConst ALTERNATE = 1Const WINDING = 2Const BLACKBRUSH = 4Private Sub Form_Paint()    Dim poly(1 To 10) As COORD, NumCoords As Long, hBrush As Long, hRgn As Long    Me.Cls    NumCoords = 10    Me.ScaleMode = vbPixels    Dim arr(1 To 10) As String    Dim i As Integer        Dim index As Integer    index = 1    arr(index) = "140,0"    index = index + 1    arr(index) = "185,82"    index = index + 1    arr(index) = "280,105"    index = index + 1    arr(index) = "215,171"    index = index + 1    arr(index) = "227,270"    index = index + 1    arr(index) = "140,228"    index = index + 1    arr(index) = "51,270"    index = index + 1    arr(index) = "61,171"    index = index + 1    arr(index) = "0,105"    index = index + 1    arr(index) = "94,82"    For i = 1 To 10       poly(i).x = Split(arr(i), ",")(0)       poly(i).y = Split(arr(i), ",")(1)    Next i        Polygon Me.hdc, poly(1), NumCoords        hBrush = GetStockObject(BLACKBRUSH)        hRgn = CreatePolygonRgn(poly(1), NumCoords, ALTERNATE)        If hRgn Then FillRgn Me.hdc, hRgn, hBrush    DeleteObject hRgnEnd SubPrivate Sub Form_Resize()    Form_PaintEnd Sub
[解决办法]
自己绘制是正确的办法。
[解决办法]
label1的Autosize 设置为true
VB code
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Randomize   Label1.Visible = False   Label1.FontSize = Int(100 * Rnd + 5)   Label1.ForeColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)   Label1.Move X, Y   Label1.Visible = TrueEnd Sub
[解决办法]
位置随机就Move rnd *Me.scalewidth+1,rnd*Me.scaleheight+1 即可
[解决办法]
探讨
…………
问题是:窗体上直接通过print输出的字符是无法改变大小和颜色的,这让我又想通过标签label中的caption来显示★,但受限于以下几个问题:
1)★的大小受限于标签的大小,不可能达到任意大小


2)label标签没有currentX和currentY属性,不能实现在任意位置显示的目的
…………


[解决办法]
这个是直接在窗口上打印的代码。
用 Label 也大同小异,没有难度。
VB code
Option Explicit'设计时把窗口弄得稍大些Private Sub Form_Click()   Dim s&, c&   Cls   Randomize   c = RGB(Rnd() * 255, Rnd() * 255, Rnd() * 255)  '颜色   s = 30 + 270 * Rnd()             '随机产生一个字体大小   CurrentX = (ScaleWidth - s) * Rnd()   CurrentY = (ScaleHeight - s) * Rnd()   FontSize = s   ForeColor = c   Print "★"End SubPrivate Sub Form_Load()   ScaleMode = 3End Sub
[解决办法]
试试这个

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Randomize
ForeColor = RGB(Int(Rnd(1) * 256), Int(Rnd(1) * 256), Int(Rnd(1) * 256))

FontSize = Int(Rnd(1) * 500)
CurrentX = X - TextWidth("★") / 2
CurrentY = Y - TextHeight("★") / 2
Print "★"


End Sub

[解决办法]
是啊。感觉楼主不动脑筋,不用心。
一、俺认为,学啥之前,最重要的是,先弄明白“手册(Manual)”。手册还没弄明白,就来论坛问,完全颠倒了学习的次序。例如:
1. 审题,人家题目如果要求“绘制五角星”,就绝对不要搞什么“五角星字符”,绕过问题绝对不是新手的求解之道。
2. Label的一个简单AutoSize就解决了大小问题,为什么说“不能改变大小”呢?
3. label标签没有currentX和currentY属性,不能实现在任意位置显示的目的。难道非要CurrentX和Y属性,才能实现“任意位置”?怪透了。
二、俺认为,设计啥之前,都老老实实,踏踏实实地“临摹”几个作品。不要一开始就想当然。临摹过程中,逼着自己死啃手册,把手册吃透了,知道各种道具(“控件”等)是干嘛用的了,问题自然迎刃而解。

是不点太不用心了。呵呵。

[解决办法]
探讨

感谢自己绘制五角星的2位学长,目前还没有学到那里来;也感谢提示将label的autosize属性设置为true的兄弟。3种方法都是可行的,我自己也实验了一个
现在我想改进一下,要求保留在窗体上生成的所有随机五角星,不知道3位兄弟有何见解?VB code
Private Sub Form_Click()
Randomize
Label1.Move Int(Rnd * Form1.ScaleWi……

[解决办法]
探讨
.......
要求保留在窗体上生成的所有随机五角星,即第n次单击鼠标要求窗体显示n个五角星

热点排行