找回密码
 加入
搜索
楼主: joint

[图形处理] 这个代码能否转为AU3的?

  [复制链接]
发表于 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 = [0xFF1FF4FB, 0xFF07F98C, 0xFF91A804, 0xFFCC9302, 0xFFAF5801, 0xFF9C426B, 0xFF9744A7, 0xFF9841E4, 0xFF241BEE, 0xFF2472F5, 0xFF2190F4, 0xFF12C2FF]
Global $data = ["80","110.5","200","150.3","220","110","150","400","250","180.4","300","480"]
Global $ydata = [0,100,200,300,400,500]
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   ;==>_Exit
GDI+新人练手

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-7-13 21:23:21 | 显示全部楼层
回复 30# joint

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-7-13 21:36:20 | 显示全部楼层
回复 32# chzj589


    蓝色矩形起始坐标没弄对吧
 楼主| 发表于 2017-7-13 22:04:05 | 显示全部楼层
回复 33# yamakawa

回复 32# chzj589

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-7-13 22:14:04 | 显示全部楼层
回复 34# joint


    图好做,关键是你要求交互,,这个俺暂时不会
 楼主| 发表于 2017-7-13 22:20:08 | 显示全部楼层
回复  joint
    图好做,关键是你要求交互,,这个俺暂时不会
yamakawa 发表于 2017-7-13 22:14


前进一步是一步,这里大神很多,相信au3不会搞不出个堆积柱状图的。
 楼主| 发表于 2017-7-13 22:39:06 | 显示全部楼层
看看这类处理方式有没有参考价值:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-7-14 10:49:24 | 显示全部楼层
回复  chzj589


    蓝色矩形起始坐标没弄对吧
yamakawa 发表于 2017-7-13 21:36


谢谢提醒,这样对吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-7-14 11:08:06 | 显示全部楼层
回复 37# joint
只能是这样,用31楼的代码修改就可以了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2017-7-14 13:08:30 | 显示全部楼层
本帖最后由 joint 于 2017-7-14 13:11 编辑
回复  joint
只能是这样,用31楼的代码修改就可以了
chzj589 发表于 2017-7-14 11:08


不错不错,鼠标点击竖条不同颜色的地方能给出响应信号吗?可以的话基本上需要的功能已经实现了啊。
另外,彩条不同颜色的部分是堆积起来的还是重叠起来的?需要的是堆积起来的,因为不同颜色代表不同的数据,堆积的高度是累计值。
发表于 2017-7-14 13:21:44 | 显示全部楼层
不错不错,鼠标点击竖条不同颜色的地方能给出响应信号吗?可以的话基本上需要的功能已经实现了啊。
另 ...
joint 发表于 2017-7-14 13:08

没错,是堆积起来的,不同颜色可代表不同的数据,堆积的高度是累计值。
这是一张图表,鼠标点击不能给出响应信号
 楼主| 发表于 2017-7-14 13:50:15 | 显示全部楼层
本帖最后由 joint 于 2017-7-14 13:56 编辑
没错,是堆积起来的,不同颜色可代表不同的数据,堆积的高度是累计值。
这是一张图表,鼠标点击不能给出 ...
chzj589 发表于 2017-7-14 13:21


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

实际上柱状图放在ListView上差不多就是第二个表了?不理解这个意思。
把ListView上的数据生成上面的图表就可以
 楼主| 发表于 2017-7-14 14:21:38 | 显示全部楼层
本帖最后由 joint 于 2017-7-14 14:23 编辑
实际上柱状图放在ListView上差不多就是第二个表了?不理解这个意思。
把ListView上的数据生成上面的图表就 ...
chzj589 发表于 2017-7-14 14:15


看9楼我那两张图。左边的是堆积图,右边的色块图。色块图实际上可看成是在ListView上放了很多个小柱状图。
 楼主| 发表于 2017-7-14 14:38:45 | 显示全部楼层
回复  joint
    图好做,关键是你要求交互,,这个俺暂时不会
yamakawa 发表于 2017-7-13 22:14


我看你和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, 使用当前鼠标位置
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-29 21:50 , Processed in 0.070247 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表