yamakawa 发表于 2017-7-13 20:08:59

#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
AutoItSetOption("GUIOnEventMode", 1)


Global Const $ix = "800", $iy = "500", $title = "柱状图 GDI+ (GDI+新人 yamakawa)"
Global $Color =
Global $data = ["80","110.5","200","150.3","220","110","150","400","250","180.4","300","480"]
Global $ydata =
Global $month = ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]
Global $pen1,$hBitmap1,$hBackbuffer1,$hBrush

#Region GUI
Global $mGui = GUICreate($title, $ix + 100, $iy + 100)
Global $pic1 = GUICtrlCreatePic("", 40, 40, $ix + 60, $iy + 60)
Global $hpic1 = GUICtrlGetHandle($pic1)


GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUISetState(@SW_SHOW)
#EndRegion
_GDIPlus_Startup()

_draw()

Func _draw()
        Local $shift = "30"
           Local $hGraphics1 = _GDIPlus_GraphicsCreateFromHWND($hpic1)
        $hBitmap1 = _GDIPlus_BitmapCreateFromGraphics($ix + 60, $iy + 60, $hGraphics1)
    $hBackbuffer1 = _GDIPlus_ImageGetGraphicsContext($hBitmap1)
        _GDIPlus_GraphicsSetSmoothingMode($hBackbuffer1, 2)
        _GDIPlus_GraphicsClear($hBackbuffer1, 0xF2000000 + 0x00FF00)

        Local $pen1 = _GDIPlus_PenCreate(0xFF000000,2)
        ;画XY线
    _GDIPlus_GraphicsDrawLine($hBackbuffer1, $shift, 0, $shift, $iy, $Pen1);Y轴
        ;
        For $i = 0 To 5
                  _GDIPlus_GraphicsDrawString($hBackbuffer1, $ydata[$i], $shift / 2 - 10, $iy - $i * 100)
        Next               
    _GDIPlus_GraphicsDrawLine($hBackbuffer1, $shift, $iy, $ix + $shift, $iy, $Pen1);X轴
        For $i = 0 To 11
                  _GDIPlus_GraphicsDrawString($hBackbuffer1, $month[$i], $shift + 20 + $i * 65, $iy + 10)
        Next
        ;填入数据
        For $i = 0 To 11
                $hBrush = _GDIPlus_BrushCreateSolid($Color[$i])
                _GDIPlus_GraphicsFillRect($hBackbuffer1,$shift + 20 + $i * 65,$iy - $data[$i],50,$data[$i],$hBrush)
                _GDIPlus_GraphicsDrawString($hBackbuffer1,$data[$i],$shift + 30 + $i * 65,$iy - $data[$i] - 20)
          _GDIPlus_BrushDispose($hBrush)
        Next
       
;草稿好了,绘图       
   _GDIPlus_GraphicsDrawImageRect($hGraphics1, $hBitmap1, 0, 0, $ix, $iy)
EndFunc ;==>_draw

While 1
Sleep(20)               
WEnd

Func _Exit() ;
    _GDIPlus_PenDispose($pen1)
    _GDIPlus_BitmapDispose($hBitmap1)
       

        _GDIPlus_Shutdown()
        GUIDelete($mGui)
        Exit
EndFunc   ;==>_ExitGDI+新人练手

chzj589 发表于 2017-7-13 21:23:21

回复 30# joint

yamakawa 发表于 2017-7-13 21:36:20

回复 32# chzj589


    {:face (303):}蓝色矩形起始坐标没弄对吧

joint 发表于 2017-7-13 22:04:05

回复 33# yamakawa

回复 32# chzj589

不错啊,楼上二位再努努力,看起来已经比较接近了。看看能不能做成这样:

yamakawa 发表于 2017-7-13 22:14:04

回复 34# joint


    图好做,关键是你要求交互,,这个俺暂时不会

joint 发表于 2017-7-13 22:20:08

回复joint
    图好做,关键是你要求交互,,这个俺暂时不会
yamakawa 发表于 2017-7-13 22:14 http://www.autoitx.com/images/common/back.gif

前进一步是一步,这里大神很多,相信au3不会搞不出个堆积柱状图的。

joint 发表于 2017-7-13 22:39:06

看看这类处理方式有没有参考价值:

chzj589 发表于 2017-7-14 10:49:24

回复chzj589


    蓝色矩形起始坐标没弄对吧
yamakawa 发表于 2017-7-13 21:36 http://www.autoitx.com/images/common/back.gif

谢谢提醒,这样对吗?

chzj589 发表于 2017-7-14 11:08:06

回复 37# joint
只能是这样,用31楼的代码修改就可以了

joint 发表于 2017-7-14 13:08:30

本帖最后由 joint 于 2017-7-14 13:11 编辑

回复joint
只能是这样,用31楼的代码修改就可以了
chzj589 发表于 2017-7-14 11:08 http://www.autoitx.com/images/common/back.gif

不错不错,鼠标点击竖条不同颜色的地方能给出响应信号吗?可以的话基本上需要的功能已经实现了啊。
另外,彩条不同颜色的部分是堆积起来的还是重叠起来的?需要的是堆积起来的,因为不同颜色代表不同的数据,堆积的高度是累计值。

chzj589 发表于 2017-7-14 13:21:44

不错不错,鼠标点击竖条不同颜色的地方能给出响应信号吗?可以的话基本上需要的功能已经实现了啊。
另 ...
joint 发表于 2017-7-14 13:08 http://www.autoitx.com/images/common/back.gif
没错,是堆积起来的,不同颜色可代表不同的数据,堆积的高度是累计值。
这是一张图表,鼠标点击不能给出响应信号

joint 发表于 2017-7-14 13:50:15

本帖最后由 joint 于 2017-7-14 13:56 编辑

没错,是堆积起来的,不同颜色可代表不同的数据,堆积的高度是累计值。
这是一张图表,鼠标点击不能给出 ...
chzj589 发表于 2017-7-14 13:21 http://www.autoitx.com/images/common/back.gif

那已经很接近了,再努把力兄弟。就差那么一点点了。
实际上柱状图放在ListView上差不多就是第二个表了,选这图就是希望尽量能复用。我还在折腾数据方面的事情,精力不够眼睛也不行,各位请多帮忙,谢谢了。
我得考虑给你们发个红包了。

chzj589 发表于 2017-7-14 14:15:16

那已经很接近了,再努把力兄弟。就差那么一点点了。
实际上柱状图放在ListView上差不多就是第二个表了 ...
joint 发表于 2017-7-14 13:50 http://www.autoitx.com/images/common/back.gif
实际上柱状图放在ListView上差不多就是第二个表了?不理解这个意思。
把ListView上的数据生成上面的图表就可以

joint 发表于 2017-7-14 14:21:38

本帖最后由 joint 于 2017-7-14 14:23 编辑

实际上柱状图放在ListView上差不多就是第二个表了?不理解这个意思。
把ListView上的数据生成上面的图表就 ...
chzj589 发表于 2017-7-14 14:15 http://www.autoitx.com/images/common/back.gif

看9楼我那两张图。左边的是堆积图,右边的色块图。色块图实际上可看成是在ListView上放了很多个小柱状图。

joint 发表于 2017-7-14 14:38:45

回复joint
    图好做,关键是你要求交互,,这个俺暂时不会
yamakawa 发表于 2017-7-13 22:14 http://www.autoitx.com/images/common/back.gif

我看你和chzj589两个已经搞的差不多了,再努把力,搞好了我发个红包。数据方面的事情也把我折腾的够呛,精力不够眼睛也不行,拜托多帮帮忙。谢谢。

响应点击信号方面看看UDF的一些函数是否可以,比如下面这样的好像有很多:

_GUICtrlListView_SubItemHitTest
确定哪些列表视图项目或子项目在控件的给定位置
#include <GuiListView.au3>
_GUICtrlListView_SubItemHitTest ( $hWnd [, $iX = -1 [, $iY = -1]] )
参 数
$hWnd      控件 ID 或句柄.
$iX      [可选] 测试位置的 X 值, 或 -1, 使用当前的鼠标位置
$iY      [可选] 测试位置的 Y 值, 或 -1, 使用当前的鼠标位置


_GUICtrlListView_HitTest
确定列表视图指定位置的项目.
#include <GuiListView.au3>
_GUICtrlListView_HitTest ( $hWnd [, $iX = -1 [, $iY = -1]] )
参 数
$hWnd      控件 ID 或句柄.
$iX      [可选] 客户端测试点 X 坐标位. 或 -1, 使用当前鼠标位置
$iY      [可选] 客户端测试点 Y 坐标位. 或 -1, 使用当前鼠标位置
页: 1 2 [3] 4 5 6 7 8 9 10 11
查看完整版本: 这个代码能否转为AU3的?