找回密码
 加入
搜索
查看: 5864|回复: 8

[图形处理] 【已解决】JPG图片显示效果和显示坐标的问题?

[复制链接]
发表于 2014-11-18 10:06:35 | 显示全部楼层 |阅读模式
本帖最后由 newuser 于 2014-11-18 17:17 编辑

脚本运行后,图片加载的效果不好?问题来回切换后,图片切换的效果不好?(图片不一样大,想在一个固定区域显示大小不一的图片,不想一个个都给处理成大小一致的)
#cs
完成于20141111
1、增加了  ’参考提示‘
2、了解了题库中  ’给定答案与用户的选择一致性‘如何用 Bitand()和if语句进行判读

下一阶段任务:
1、给试题添加图片

感谢:
地平线
lanfengc

#ce

#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#Include <Misc.au3>

If _singleton(@scriptname,1)=0 Then
        MsgBox(0,"请注意","目前有脚本程序正在运行")
        Exit
EndIf
;强制脚本只执行一个设计实例

If Not FileExists(@ScriptDir&"\考试题.ini") Then
        MsgBox(0,"请注意","考试题库不存在")
        Exit
EndIf
;判断考试题库是否存在

Global $his
;$his一定要设置为“全局变量”,从该字段读题号
GUICreate("考驾照自测题系统",800,600,-1,-1,BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX))
$his=IniRead(@ScriptDir&"\考试题.ini","His","Num","x");考试从第1题开始
$question=IniRead(@ScriptDir&"\考试题.ini",$his,"问题","x")
$sela=IniRead(@ScriptDir&"\考试题.ini",$his,"SelectA","x")
$selb=IniRead(@ScriptDir&"\考试题.ini",$his,"SelectB","x")
$selc=IniRead(@ScriptDir&"\考试题.ini",$his,"SelectC","x")
$seld=IniRead(@ScriptDir&"\考试题.ini",$his,"SelectD","x")
$selimage=IniRead(@ScriptDir&"\考试题.ini",$his,"ImagePath","x")

;$selimage=IniRead(@ScriptDir"\考试题.ini",$his,"ImagePath","x")
;error:"\考试题.ini"前竟然落了一个   &  ,找了半天才看到


;error:语法错误,原因是  $his  前多写了个 ,
;以上执行“将问题和选择从考试题库ini文件中读出来存储在指定的变量中

$key="x";答案变量初始值
$note="x";提示变量初始值
$GUInum=GUICtrlCreateLabel($his,30,40,55,20);自动创建窗口中  “题号”  的位置
$GUIque=GUICtrlCreateLabel($question,87,40,700,80);自动创建窗口中  “问题”  的位置
$GUIa=GUICtrlCreateRadio($sela,40,80,700,50,$BS_MULTILINE);以下是4个选择项建立
$GUIb = GUICtrlCreateRadio($selb,40,130,700,50,$BS_MULTILINE)
$GUIc = GUICtrlCreateRadio($selc,40,180,700,50,$BS_MULTILINE)
$GUId = GUICtrlCreateRadio($seld,40,230,700,50,$BS_MULTILINE)
$GUIpic=GUICtrlCreatePic($selimage,350,100,300,194)
;GUICtrlSetData($GUIpic,$selimage)
;把上面读到变量里的内容写在“窗口指定控件位置上”
$GUIsub=GUICtrlCreateButton("提交答案",40,330,100,40)
GUICtrlCreateLabel("参考答案:",50,400)
$GUIkey=GUICtrlCreateLabel($key,120,395,60,20)
GUICtrlCreateLabel("参考提示:",50,430)
$GUInote=GUICtrlCreateLabel($note,120,428,600,80)
;GUICtrlCreateLabel("已自动加载"&@CRLF&"上次答题进度",390,405,100,30,0x01,$WS_EX_CLIENTEDGE)
$GUItab1=GUICtrlCreateLabel("跳转到第",510,330,70,25)
$GUIinput=GUICtrlCreateInput($his,585,330,50,25)
$GUItab2=GUICtrlCreateLabel("题",640,330,20,25)
$GUIgo=GUICtrlCreateButton("Go",665,330,30,30)
$GUIbefore = GUICtrlCreateButton("<<-- 上一题",180,330,100,40)
$GUInext = GUICtrlCreateButton("下一题 -->>",320,330,100,40)
GUICtrlSetFont($GUInum,13)
GUICtrlSetFont($GUIque,13)
GUICtrlSetFont($GUIa,13)
GUICtrlSetFont($GUIb,13)
GUICtrlSetFont($GUIc,13)
GUICtrlSetFont($GUId,13)
GUICtrlSetFont($GUIkey,15)
GUICtrlSetFont($GUItab1,13)
GUICtrlSetFont($GUItab2,13)
GUICtrlSetFont($GUInote,11)
;为窗口设置界面
GUISetState(@SW_SHOW)

While 1
        $msg=GUIGetMsg()
        Select
                Case $msg=$GUIsub
                        $i=IniRead(@ScriptDir&"\考试题.ini",GUICtrlRead($GUInum),"Key","x")
                        GUICtrlSetData($GUIkey,$i)
                        ;从考试题库中读取正确答案并设置在提示答案处
                        ;变量 $i 是为了在下面 _YN()函数中对用户的选择进行判断,否则也不用在此建立,就像下面的“答案”提示那样
                        
                        GUICtrlSetData($GUInote,IniRead(@ScriptDir&'\考试题.ini',$his,"提示","×"))
                        ;$tishi=IniRead(@ScriptDir&"考试题.ini",GUICtrlRead($GUInum),"提示","x")
                        ;GUICtrlSetData($GUInote,$tishi)
                        ;question1:考试题库中的关键字  ”提示“   内容过多,多行显示,琢磨怎么通过 iniread()函数把它读取呢?
                        ;         其实,在“记事本”中把“自动换行”功能关闭,再多的内容也给它弄成一行
                        ;question2:在脚本中只显示“一行提示内容”?把显示内容的控件高度增加就OK了,哎!
                        
                        
                        _YN()
                Case $msg=$GUInext
                        $his=$his+1
                        GUICtrlSetData($GUIkey,$key)
                        GUICtrlSetData($GUInote,$note)
                        GUICtrlSetBkColor($GUIkey,-1);去除“醒目”的背景色
                        _GUIset()
                Case $msg=$GUIbefore
                        $his=$his-1
                        GUICtrlSetData($GUIkey,$key)
                        GUICtrlSetData($GUInote,$note)
                        GUICtrlSetBkColor($GUIkey,-1)
                        ;question:一直减下去,会出负数,不妥?141111
                        If  $his < 1 Then
                                $his=1
                                MsgBox(0,"请注意","目前已经回到第1题")
                        endif
                        _GUIset()
                Case $msg=$GUIgo
                        $his=GUICtrlRead($GUIinput)
                        _GUIset()
                Case $msg=$GUI_EVENT_CLOSE
                        IniWrite(@ScriptDir&"\考试题.ini","His","Num",$his);记忆用户上次答题的位置
                        ExitLoop
        EndSelect
WEnd
GUIDelete()
 
Func _YN()
        GUICtrlSetBkColor($GUIkey,-1);在提示答案处设置背景颜色
        $a = BitAnd(GUICtrlRead($GUIa),$GUI_CHECKED)
        $b = BitAnd(GUICtrlRead($GUIb),$GUI_CHECKED)
        $c = BitAnd(GUICtrlRead($GUIc),$GUI_CHECKED)
        $d = BitAnd(GUICtrlRead($GUId),$GUI_CHECKED)
                ;以上是判读哪个答案被选中了
        If $i = "A" And $a <> 1 Then;如果题库给定答案与用户的选择不一致,则在答案提示处设置醒目颜色给以警示
                GUICtrlSetBkColor($GUIkey,0xFF1E1E)
        ElseIf $i = "B" And $b <> 1 Then
                GUICtrlSetBkColor($GUIkey,0xFF1E1E)
        ElseIf $i = "C" And $c <> 1 Then
                GUICtrlSetBkColor($GUIkey,0xFF1E1E)
        ElseIf $i = "D" And $d <> 1 Then
                GUICtrlSetBkColor($GUIkey,0xFF1E1E)
                EndIf
EndFunc   ;==>_YN
 
Func _GUIset()
        GUICtrlSetData($GUInum,$his);默认题号是 $his 的最初设置值
        GUICtrlSetData($GUIque,IniRead(@ScriptDir&'\考试题.ini',$his,"问题","×"))
        GUICtrlSetData($GUIa,IniRead(@ScriptDir&'\考试题.ini',$his,"SelectA","×"))
        GUICtrlSetData($GUIb,IniRead(@ScriptDir&'\考试题.ini',$his,"SelectB","×"))
        GUICtrlSetData($GUIc,IniRead(@ScriptDir&'\考试题.ini',$his,"SelectC","×"))
        GUICtrlSetData($GUId,IniRead(@ScriptDir&'\考试题.ini',$his,"SelectD","×"))
                $GUIpiccheck=IniRead(@ScriptDir&"\考试题.ini",$his,"ImagePath","")
                If $GUIpiccheck="" Then
                        GUICtrlSetState($GUIpic,$GUI_HIDE)
                Else
                        $GUIpic=GUICtrlCreatePic($GUIpiccheck,350,100,300,194)
                        ;GUICtrlSetImage($GUIpic,$GUIpiccheck)
                EndIf 
                ;设置进入界面显示哪道题
                
                ;此处不需照猫画虎:GUICtrlSetData($GUInote,IniRead(@ScriptDir&'\考试题.ini',$his,"提示","×"))                
EndFunc   ;==>_GUIset
        

本帖子中包含更多资源

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

×
 楼主| 发表于 2014-11-18 10:53:22 | 显示全部楼层
回复 1# newuser
等...
发表于 2014-11-18 11:46:50 | 显示全部楼层
不明白,固定区域显示,大小不一样,是什么意思
发表于 2014-11-18 12:59:42 | 显示全部楼层
楼主提的问题太不明确了
发表于 2014-11-18 14:02:50 | 显示全部楼层
#include <GDIPlus.au3>
Opt('GUIOnEventMode', 1)
Dim $w_picctrl = 498, $h_picctrl = 298
$Form1 = GUICreate('居中显示图像例子 - afan', 600, 430, -1, -1, -1, 0x00000010)
GUISetOnEvent(-3, '_Exit')
GUISetOnEvent(-13, 'Show')
GUICtrlCreateGraphic(50, 50, 500, 300)
GUICtrlSetGraphic(-1, 10, 0, 0,500,300)
$ts = GUICtrlCreateLabel('请拖拽任意图片至本框中', 51, 51,498,298, 0x01 + 0x0200)
GUICtrlSetState(-1, 8)
$pic = GUICtrlCreatePic('', 51, 51,500,300)
GUICtrlCreateLabel('图片文件路径:', 50, 355, 90, 17)
$ts_File = GUICtrlCreateLabel('', 140, 355, 400, 17)
GUICtrlCreateLabel('图片原始尺寸:', 50, 370, 90, 17)
$ts_size = GUICtrlCreateLabel('', 140, 370, 200, 17)
GUICtrlCreateLabel('格式(后缀名):', 50, 385, 90, 17)
$ts_hzm = GUICtrlCreateLabel('', 140, 385, 90, 17)
GUISetState()
WinSetOnTop($Form1, '', 1)
While 1
        Sleep(10)
WEnd

Func _Exit()
        GUIDelete()
        Exit
EndFunc   ;==>_Exit

Func Show()
        
        Local $imgfile = @GUI_DragFile
                GUICtrlSetData($ts_hzm, StringRegExpReplace($imgfile, '.+\\.+\.', ''))
        _GDIPlus_Startup()
        $hImage = _GDIPlus_ImageLoadFromFile($imgfile)
        $w_img = _GDIPlus_ImageGetWidth($hImage)
        $h_img = _GDIPlus_ImageGetHeight($hImage)
        If $w_img * $h_img = 0 Then
                _GDIPlus_Shutdown()
                Return MsgBox(48, @error, '非图片格式', '', $Form1)
        EndIf
        GUICtrlSetData($ts, '')
        GUICtrlSetData($ts_size, $w_img & ' x ' & $h_img)
        GUICtrlSetData($ts_File, $imgfile)
        GUICtrlSetData($ts_hzm, StringRegExpReplace($imgfile, '.+\\.+\.', ''))
        Local $kgb = $h_picctrl / $w_picctrl
        Local $kgb1 = $h_img / $w_img
        Local $x_py = 0, $y_py = 0, $hBMP, $hObject
        If $w_img > $w_picctrl Or $h_img > $h_picctrl Then
                If $kgb1 > $kgb Then
                        $h_img = $h_picctrl
                        $w_img = Round(1 / $kgb1 * $h_img)
                        $x_py = ($w_picctrl - $w_img) / 2
                Else
                        $w_img = $w_picctrl
                        $h_img = Round($kgb1 * $w_img)
                        $y_py = ($h_picctrl - $h_img) / 2
                EndIf
        Else
                $x_py = ($w_picctrl - $w_img) / 2
                $y_py = ($h_picctrl - $h_img) / 2
        EndIf
        $hBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
        $hObject = GUICtrlSendMsg($pic, 0x0172, 0, $hBMP)
                GUICtrlSetPos($pic, 51 + $x_py - 1, 51 + $y_py - 1, $w_img, $h_img)
        GUICtrlSetPos($pic, 51 + $x_py, 51 + $y_py)
        _WinAPI_DeleteObject($hObject)
        _GDIPlus_ImageDispose($hImage)
        _WinAPI_DeleteObject($hBMP)
        _GDIPlus_Shutdown()
        
EndFunc   ;==>Show
看看对你有用不?非原创,出处已忘!
 楼主| 发表于 2014-11-18 15:35:30 | 显示全部楼层
本帖最后由 newuser 于 2014-11-18 16:33 编辑

回复 3# netegg
很多图片大小不一样,我想在固定区域完整加载它们(例子中只是加载了2个JPG图片,高度和宽度设置不合适,图片会显示不全!调来调去很麻烦,后面的题还有很多图片)!而且,例子加载的图片显示效果有问题,不知道怎么回事?
老大,麻烦帮助看一下,增加到10道题,后面几题都有图片,纳闷的是加载的图片怎么还串了呢(第9题加载的图片和第10题加载的图片颠倒了)?

本帖子中包含更多资源

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

×
 楼主| 发表于 2014-11-18 15:41:16 | 显示全部楼层
回复 5# ap112
谢谢,学习一下!
 楼主| 发表于 2014-11-18 16:46:45 | 显示全部楼层
回复 1# newuser
图片加载迷糊了!哎,继续等待中...
 楼主| 发表于 2014-11-18 17:17:14 | 显示全部楼层
回复 1# newuser
明白了,原来是窗口各个控件的坐标没弄好,造成了加载的图片被覆盖,导致了图片显示问题?还以为代码哪个地方出错了呢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 14:24 , Processed in 0.081321 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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