首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • VB6 PK VB.NET [已结贴,结贴人:VBAdvisor]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • VBAdvisor
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-07-10 16:34:30 楼主
    在VB.NET中,LinearGradientBrush多容易实现。请问在VB中要多少Codes实现?

    VB.NET code
    Dim myRectangle As Rectangle = e.Bounds myRectangle.Inflate(0, 1) Dim myBrush As LinearGradientBrush If a = 1 Then myBrush = New LinearGradientBrush(myRectangle, Color.FromArgb(200, 254, 230, 196), Color.FromArgb(150, 255, 183, 135), 90) Else myBrush = New LinearGradientBrush(myRectangle, Color.FromArgb(150, 255, 237, 212), Color.FromArgb(200, 251, 205, 174), 90) End If Try e.Graphics.FillRectangle(myBrush, e.Bounds) Finally myBrush.Dispose() End Try
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • spotty2008
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-10 16:40:311楼 得分:10
    那要看你具体的代码  或许很短就实现了  或许要转个半天  vb.net强于vb  但可惜我不会vb.net
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • clear_zero
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-10 16:59:482楼 得分:9
    我阅读的结果是

    下面是我引用的
    Gradient Colors in GDI+
    In programming, gradient is a transition color from a start point to end point. In my past with VB6, I have to modify each pixel to make a gradient within a container. Now with VB2005, you can make a gradient on a surface with a few lines of codes.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yangao
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-10 17:18:033楼 得分:9
    晚辈与前辈的PK?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • VBAdvisor
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-10 17:52:124楼 得分:0
    引用 2 楼 clear_zero 的回复:
    我阅读的结果是

    下面是我引用的
    Gradient Colors in GDI+
    In programming, gradient is a transition color from a start point to end point. In my past with VB6, I have to modify each pixel to make a gradient within a container. Now with VB2005, you can make a gradient on a surface with a few lines of codes.



    这就是大家要赶快转型到.NET地原因之一。
    在VB中大家纠缠在细枝末叶上,而.NET有强大的库。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • clear_zero
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-10 19:14:505楼 得分:0
    引用 4 楼 VBAdvisor 的回复:
    引用 2 楼 clear_zero 的回复:
    我阅读的结果是

    下面是我引用的
    Gradient Colors in GDI+
    In programming, gradient is a transition color from a start point to end point. In my past with VB6, I have to modify each pixel to make a gradient within a container. Now with VB2005, you can make a gradient on a surface with a few lines of codes.



    这就是大家要赶快转型到.NET地原因之一。
    在VB中大…


    如果作为学习者来说的话,的确VB.net更加结构化,库也很强大。再加上职位也多些
    但是对于已经工作的人来说了,转型与否也是与目前的工程来说的。

    比我的工程就是一个从VB6到Vb.net的升级过程。原有VB6的东西还需要维护和完善,升级过程是一个缓慢的螺旋进展的过程。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 6

    发表于:2008-07-12 10:26:236楼 得分:9
    强大也是有代价的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • laviewpbt
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-12 14:24:567楼 得分:9
    在VB中不需要多少代码实现,我出差回去帮你搞定。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Sandrer
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-12 15:47:298楼 得分:9
    VB.NET其实所使用的代码也不会很少,只是微软的人帮你封装了而已!
    而VB未经封装,所以你觉得多
    你可以自己做一个相同效果的类,然后在程序里调用,那么你会发现,原来代码也这么“少”
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • clear_zero
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-12 20:48:279楼 得分:0
    引用 8 楼 Sandrer 的回复:
    VB.NET其实所使用的代码也不会很少,只是微软的人帮你封装了而已!
    而VB未经封装,所以你觉得多
    你可以自己做一个相同效果的类,然后在程序里调用,那么你会发现,原来代码也这么“少”


    点头同意
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zzyong00
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2008-07-12 21:02:0710楼 得分:9
    引用 8 楼 Sandrer 的回复:
    VB.NET其实所使用的代码也不会很少,只是微软的人帮你封装了而已!
    而VB未经封装,所以你觉得多
    你可以自己做一个相同效果的类,然后在程序里调用,那么你会发现,原来代码也这么“少”
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • VBAdvisor
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-13 17:21:5711楼 得分:0
    引用 10 楼 zzyong00 的回复:
    引用 8 楼 Sandrer 的回复:
    VB.NET其实所使用的代码也不会很少,只是微软的人帮你封装了而已!
    而VB未经封装,所以你觉得多
    你可以自己做一个相同效果的类,然后在程序里调用,那么你会发现,原来代码也这么“少”



    你可以自己做一个相同效果的类
    是的,可以。
    但.NET是直接调用MS (Windows的娘家人)做的库,可靠性更高吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happy_sea
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      2

    发表于:2008-07-13 17:48:3612楼 得分:9
    vb.net比vb6无疑要强大得多,但是做出一个只有几十K几百K的程序发布到其他机子时却需要先安装一个20多M的.net framework,在vista占主流并预装.net framework3.5之前,这确实也值得好好掂量掂量啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • VBAdvisor
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-13 20:59:0413楼 得分:0
    引用 12 楼 happy_sea 的回复:
    vb.net比vb6无疑要强大得多,但是做出一个只有几十K几百K的程序发布到其他机子时却需要先安装一个20多M的.net framework,在vista占主流并预装.net framework3.5之前,这确实也值得好好掂量掂量啊

    你用你的电脑写此帖时,你的电脑装了.NET Framework吗?肯定装了吧。呵呵。
    3年前,我每次重新安装WinXP后,安装Fish's .NET Code Library时总是要求我下载.NET Framework,现在我的电脑
    再安装它时,提示已安装了!
    AutoCAD 2008
    Acrobat pro 8
    RSLogix5000 V16
    Siemens s7
    Wonderware Intouch 10
    Wincc
    Photoshop
    Norton 2008
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • VBAdvisor
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-13 21:01:2214楼 得分:0
    还有Office2007,IE7
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happy_sea
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      2

    发表于:2008-07-13 21:34:1415楼 得分:0
    引用 13 楼 VBAdvisor 的回复:
    引用 12 楼 happy_sea 的回复:
    vb.net比vb6无疑要强大得多,但是做出一个只有几十K几百K的程序发布到其他机子时却需要先安装一个20多M的.net framework,在vista占主流并预装.net framework3.5之前,这确实也值得好好掂量掂量啊

    你用你的电脑写此帖时,你的电脑装了.NET Framework吗?肯定装了吧。呵呵。
    3年前,我每次重新安装WinXP后,安装Fish's .NET Code Library时总是要求我下载.NET Framework,现在我的电脑
    再安…


    我当然装了.net framework,但那是vb.net 2005附带的,如果你写的程序都是为了自己使用,不存在发布的问题,那么我说的情况你当然不必考虑。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • online
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 5

    发表于:2008-07-14 23:27:0916楼 得分:9
    咋样方便咋样写吧

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • myjian
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2008-07-14 23:41:5017楼 得分:9
    看情况

    如果我写的软件是类似工控一类对开发语言要求不高,却对快速开发以及稳定性要求高的情况,我选择VB或VB.NET完全是看我自己的掌握程度及顺不顺手...

    毕竟这两种语言都是由微软这个超级保姆跟着的,而后者的保姆更强大......
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • VBAdvisor
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-15 10:51:3518楼 得分:0
    引用 17 楼 myjian 的回复:
    看情况

    如果我写的软件是类似工控一类对开发语言要求不高,却对快速开发以及稳定性要求高的情况,我选择VB或VB.NET完全是看我自己的掌握程度及顺不顺手...

    毕竟这两种语言都是由微软这个超级保姆跟着的,而后者的保姆更强大......


    毕竟这两种语言都是由微软这个超级保姆跟着的,而后者的保姆更强大,更年轻,漂亮......
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • laviewpbt
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-15 11:09:0219楼 得分:0
    Option Explicit
    Private Type COLORBYTES
      BlueByte As Byte
      GreenByte As Byte
      RedByte As Byte
      AlphaByte As Byte
    End Type

    Private Type COLORLONG
      longval As Long
    End Type

    Private Type GdiplusStartupInput
        GdiplusVersion          As Long
        DebugEventCallback      As Long
        SuppressBackgroundThread As Long
        SuppressExternalCodecs  As Long
    End Type

    Private Enum WrapMode
      WrapModeTile
      WrapModeTileFlipX
      WrapModeTileFlipY
      WrapModeTileFlipXY
      WrapModeClamp
    End Enum

    Private Type RECTF    ' aka RectF
      Left As Single
      Top As Single
      Right As Single
      Bottom As Single
    End Type

    Private Enum LinearGradientMode
      LinearGradientModeHorizontal          ' 0
      LinearGradientModeVertical            ' 1
      LinearGradientModeForwardDiagonal    ' 2
      LinearGradientModeBackwardDiagonal    ' 3
    End Enum

    Private Declare Function GdipDeleteBrush Lib "gdiplus" (ByVal Brush As Long) As Long
    Private Declare Function GdiplusStartup Lib "gdiplus" (token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
    Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal token As Long)
    Private Declare Function GdipCreateFromHDC Lib "gdiplus" (ByVal hDC As Long, Graphics As Long) As Long
    Private Declare Function GdipDeleteGraphics Lib "gdiplus" (ByVal Graphics As Long) As Long
    Private Declare Function GdipFillRectangle Lib "gdiplus" (ByVal Graphics As Long, ByVal Brush As Long, ByVal x As Single, ByVal y As Single, ByVal Width As Single, ByVal Height As Single) As Long
    Private Declare Function GdipCreateLineBrushFromRect Lib "gdiplus" (Rect As RECTF, ByVal color1 As Long, ByVal color2 As Long, ByVal Mode As LinearGradientMode, ByVal WrapMd As WrapMode, lineGradient As Long) As Long


    Public Sub DrawGradient(hDC As Long)
        Dim token As Long
        Dim GSI As GdiplusStartupInput
        Dim Graphics As Long
        Dim Brush As Long
        Dim Rect As RECTF
        Dim BlendColor(1) As Long
     
        BlendColor(0) = ColorARGB(255, 255, 0, 34)
        BlendColor(1) = ColorARGB(255, 0, 255, 123)

        Rect.Left = 0
        Rect.Top = 0
        Rect.Right = 400
        Rect.Bottom = 500

        GSI.GdiplusVersion = 1
        GdiplusStartup token, GSI
        GdipCreateFromHDC hDC, Graphics
        GdipCreateLineBrushFromRect Rect, BlendColor(0), BlendColor(1), LinearGradientModeBackwardDiagonal, WrapModeTile, Brush
        GdipFillRectangle Graphics, Brush, 0, 0, 400, 500
        GdipDeleteBrush Brush
        GdipDeleteGraphics Graphics
        GdiplusShutdown token


    End Sub

    Private Sub Command1_Click()
        DrawGradient Me.hDC
        Me.Refresh

    End Sub

    Public Function ColorARGB(ByVal alpha As Byte, ByVal Red As Byte, ByVal Green As Byte, ByVal Blue As Byte) As Long
      Dim bytestruct As COLORBYTES
      Dim result As COLORLONG

      With bytestruct
          .AlphaByte = alpha
          .RedByte = Red
          .GreenByte = Green
          .BlueByte = Blue
      End With

      LSet result = bytestruct
      ColorARGB = result.longval
    End Function

    类似的代码,你自己改下就可以满足你的要求。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Soyokaze
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-15 11:44:4820楼 得分:9
    只使用传统的 GDI 库的:

    VB code
    Private Function StyleDrawFill(ByVal hDCDst As Long, _ tRectDst As RECT, _ ByVal eBorder As BorderStyle, _ ByVal eFill As FillStyle, _ ByVal crBorder As Long, _ ByVal crFill1 As Long, _ Optional ByVal crFill2 As Long, _ Optional ByVal byFillAlpha As Byte = 255) As Boolean Dim hDCSrc As Long, hDCMask As Long Dim hBmpSrc As Long, hBmpOld1 As Long Dim hBmpMask As Long, hBmpOld2 As Long Dim hPen As Long, hPenOld As Long Dim hBrush As Long, hBrushOld As Long Dim tRect As RECT Dim tPoint(2) As POINTAPI Dim tBlend As BLENDFUNCTION Dim lpBlend As Long Dim tVertex(3) As TRIVERTEX Dim tGRect(1) As GRADIENT_RECT Dim nBorderWidth As Long '边框 Select Case eBorder Case BS_NONE Case BS_RAISED, BS_SUNKEN Call DrawEdge(hDCDst, tRectDst, eBorder, BF_RECT) Case BS_ETCHED, BS_BUMP Call DrawEdge(hDCDst, tRectDst, eBorder, BF_RECT) nBorderWidth = nBorderWidth + 1 Case Else hPen = CreatePen(Choose(eBorder And &HF, PS_SOLID, PS_DASH, PS_DOT), 1, crBorder) hBrush = GetStockObject(NULL_BRUSH) hPenOld = SelectObject(hDCDst, hPen) hBrushOld = SelectObject(hDCDst, hBrush) If CBool(eBorder And BS_ROUNDRECT) Then Call RoundRect(hDCDst, tRectDst.Left, tRectDst.Top, tRectDst.Right, tRectDst.Bottom, 6, 6) Else Call Rectangle(hDCDst, tRectDst.Left, tRectDst.Top, tRectDst.Right, tRectDst.Bottom) End If Call DeleteObject(SelectObject(hDCDst, hPenOld)) Call SelectObject(hDCDst, hBrushOld) End Select nBorderWidth = nBorderWidth + 1 '填充 - - - - - - - - - - - - - - - - - - - - - '创建目标 DC 副本 Call SetRect(tRect, 0, 0, tRectDst.Right - tRectDst.Left, tRectDst.Bottom - tRectDst.Top) hDCSrc = CreateCompatibleDC(hDCDst) hBmpSrc = CreateCompatibleBitmap(hDCDst, tRect.Right - tRect.Left, tRect.Bottom - tRect.Top) hBmpOld1 = SelectObject(hDCSrc, hBmpSrc) Call BitBlt(hDCSrc, 0, 0, tRect.Right - tRect.Left, tRect.Bottom - tRect.Top, hDCDst, tRectDst.Left, tRectDst.Top, vbSrcCopy) '填充此副本 Call InflateRect(tRect, -nBorderWidth, -nBorderWidth) hDCMask = CreateCompatibleDC(hDCDst) hBmpMask = CreateCompatibleBitmap(hDCDst, tRect.Right - tRect.Left, tRect.Bottom - tRect.Top) hBmpOld2 = SelectObject(hDCMask, hBmpMask) Call OffsetRect(tRect, -nBorderWidth, -nBorderWidth) Select Case eFill Case FS_NONE byFillAlpha = 0 Case FS_SOLIDCOLOR hBrush = CreateSolidBrush(crFill1) Call FillRect(hDCMask, tRect, hBrush) Call DeleteObject(hBrush) Case FS_GRADIENT_H, FS_GRADIENT_V With tVertex(0) .x = tRect.Left .y = tRect.Top .red = GetRedGB16(crFill1) .green = GetRGreenB16(crFill1) .blue = GetRGBlue16(crFill1) .alpha = 0 End With With tVertex(1) .x = tRect.Right .y = tRect.Bottom .red = GetRedGB16(crFill2) .green = GetRGreenB16(crFill2) .blue = GetRGBlue16(crFill2) .alpha = 0 End With tGRect(0).UpperLeft = 0 tGRect(0).LowerRight = 1 Call GradientFill(hDCMask, tVertex(0), 2, tGRect(0), 1, Choose(eFill \ 2, GRADIENT_FILL_RECT_H, GRADIENT_FILL_RECT_V)) Case Else '双矩形填充 With tVertex(0) .x = tRect.Left .y = tRect.Top .red = GetRedGB16(crFill1) .green = GetRGreenB16(crFill1) .blue = GetRGBlue16(crFill1) .alpha = 0 End With With tVertex(3) .x = tRect.Right .y = tRect.Bottom .red = GetRedGB16(crFill1) .green = GetRGreenB16(crFill1) .blue = GetRGBlue16(crFill1) .alpha = 0 End With With tVertex(1) '.x = (pending) '.y = (pending) .red = GetRedGB16(crFill2) .green = GetRGreenB16(crFill2) .blue = GetRGBlue16(crFill2) .alpha = 0 End With With tVertex(2) '.x = (pending) '.y = (pending) .red = GetRedGB16(crFill2) .green = GetRGreenB16(crFill2) .blue = GetRGBlue16(crFill2) .alpha = 0 End With tGRect(0).UpperLeft = 0 tGRect(0).LowerRight = 1 tGRect(1).UpperLeft = 2 tGRect(1).LowerRight = 3 Select Case (eFill A