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