找回密码
 加入
搜索
查看: 5174|回复: 25

[AU3基础] 如何上下移动控件所显示的信息【已解决】

[复制链接]
发表于 2019-7-30 17:48:31 | 显示全部楼层 |阅读模式
本帖最后由 dnvplj 于 2019-8-3 07:18 编辑

请问各位朋友:如何通过点击右侧的上下 “箭头”,上下移动左侧控件所显示的信息。多谢了
一、代码
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Local $iNumber = 1
Local $iSpacingX = 200, $iSpacingY = 50
Local $ini = @ScriptDir & "\123.ini"

Local $Form1 = GUICreate("Form1", 500, 340, -1, -1)

Local $Label1 = GUICtrlCreateLabel("↓", 400, 70, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label2 = GUICtrlCreateLabel("↓", 400, 120, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label3 = GUICtrlCreateLabel("↓", 400, 170, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label4 = GUICtrlCreateLabel("↓", 400, 220, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label5 = GUICtrlCreateLabel("↓", 400, 270, 20, 17)

GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label6 = GUICtrlCreateLabel("↑", 422, 70, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label7 = GUICtrlCreateLabel("↑", 422, 120, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label8 = GUICtrlCreateLabel("↑", 422, 170, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label9 = GUICtrlCreateLabel("↑", 422, 220, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label10 = GUICtrlCreateLabel("↑", 422, 270, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)


_Label()
GUISetState(@SW_SHOW)


While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

Func _Label()
        Local $Label[6]
        For $i = 1 To UBound($Label) - 1
                $Label[$i] = GUICtrlCreateLabel($i & " ." & IniRead($ini, $i, "Name", ""), $iSpacingX * Mod($i, $iNumber) + 30, $iSpacingY * Floor($i / $iNumber) + 20, 160, 20)
        Next
        Return $Label
EndFunc   ;==>_Label
二、配置文件(123.ini
[1]
Name=我是第一个

[2]
Name=我是第二个

[3]
Name=我是第三个

[4]
Name=我是第四个

[5]
Name=我是第五个

发表于 2019-7-30 20:46:46 | 显示全部楼层
设计好上下按钮与需要移动的控件的一一对应关系

不管采用何种方式,也不用管代码的长短优劣,先实现再优化

提问应该是在自己努力未果后,这类代码我帮写过不少,望LZ举一反三,自己完成
 楼主| 发表于 2019-7-30 22:29:42 | 显示全部楼层
afan 发表于 2019-7-30 20:46
设计好上下按钮与需要移动的控件的一一对应关系

不管采用何种方式,也不用管代码的长短优劣,先实现再优 ...

谢谢回复,自己确实研究一天了,删除应能做得到,但上下移动还真没想出来。
发表于 2019-7-30 22:32:34 | 显示全部楼层
dnvplj 发表于 2019-7-30 22:29
谢谢回复,自己确实研究一天了,删除应能做得到,但上下移动还真没想出来。

删除应能做得到就好办了,重新读取就行了
发表于 2019-7-30 22:43:41 | 显示全部楼层
dnvplj 发表于 2019-7-30 22:29
谢谢回复,自己确实研究一天了,删除应能做得到,但上下移动还真没想出来。

移动就是 —— 将当前与目标控件两两互换位置

BTW,研究一天不知道算不算长,恕我愚钝,反正我有些问题许多年了还在自己琢磨…
 楼主| 发表于 2019-7-30 23:09:33 | 显示全部楼层
afan 发表于 2019-7-30 22:43
移动就是 —— 将当前与目标控件两两互换位置

BTW,研究一天不知道算不算长,恕我愚钝,反正我有些问 ...

应是2个控件互换位置(加和减),但还要改写配置文件,不然读取出来的信息还是原来的位置,还真有点难。
发表于 2019-7-31 07:04:00 | 显示全部楼层
本帖最后由 chzj589 于 2019-7-31 07:07 编辑
dnvplj 发表于 2019-7-30 23:09
应是2个控件互换位置(加和减),但还要改写配置文件,不然读取出来的信息还是原来的位置,还真有点难。


#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Local $Labela[6]
Local $iNumber = 1
Local $iSpacingX = 200, $iSpacingY = 50
Local $ini = @ScriptDir & "\123.ini"

Local $Form1 = GUICreate("Form1", 500, 340, -1, -1)
Local $Label1 = GUICtrlCreateLabel("↓", 400, 70, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label2 = GUICtrlCreateLabel("↓", 400, 120, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label3 = GUICtrlCreateLabel("↓", 400, 170, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label4 = GUICtrlCreateLabel("↓", 400, 220, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label5 = GUICtrlCreateLabel("↓", 400, 270, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label6 = GUICtrlCreateLabel("↑", 424, 70, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label7 = GUICtrlCreateLabel("↑", 424, 120, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label8 = GUICtrlCreateLabel("↑", 424, 170, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label9 = GUICtrlCreateLabel("↑", 424, 220, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Label10 = GUICtrlCreateLabel("↑", 424, 270, 20, 17)
GUICtrlSetBkColor(-1, 0xfce6c9)
Local $Labela[6]
Local $aArray = IniReadSectionNames($ini)
For $i = 1 To $aArray[0]
        $Labela[$i] = GUICtrlCreateLabel($i & " ." & IniRead($ini, $i, "Name", ""), $iSpacingX * Mod($i, $iNumber) + 30, $iSpacingY * Floor($i / $iNumber) + 20, 160, 20)
        GUICtrlSetFont(-1, 11, 600, 0, "")
        GUICtrlSetColor(-1, 0x0000FF)
Next
GUISetState(@SW_SHOW)
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Label1
                        _Label1()
                Case $Label6
                        _Label()
                Case $Label2
                        _Label2()
        EndSwitch
WEnd
Func _Label()
        _LabelA()
        For $i = 1 To $aArray[0]
                $Labela[$i] = GUICtrlCreateLabel($i & " ." & IniRead($ini, $i, "Name", ""), $iSpacingX * Mod($i, $iNumber) + 30, $iSpacingY * Floor($i / $iNumber) + 20, 160, 20)
                GUICtrlSetFont(-1, 11, 600, 0, "")
                GUICtrlSetColor(-1, 0x0000FF)
        Next
EndFunc   ;==>_Label
Func _Label1()
        _LabelA()
        For $i = 1 To $aArray[0] - 1
                $Labela[$i] = GUICtrlCreateLabel($i + 1 & " ." & IniRead($ini, $i + 1, "Name", ""), $iSpacingX * Mod($i + 1, $iNumber) + 30, $iSpacingY * Floor($i + 1 / $iNumber) - 30, 160, 20)
                GUICtrlSetFont(-1, 11, 600, 0, "")
                GUICtrlSetColor(-1, 0x009900)
        Next
EndFunc   ;==>_Label1
Func _Label2()
        _LabelA()
        For $i = 1 To $aArray[0] - 2
                $Labela[$i] = GUICtrlCreateLabel($i + 2 & " ." & IniRead($ini, $i + 2, "Name", ""), $iSpacingX * Mod($i + 1, $iNumber) + 30, $iSpacingY * Floor($i + 1 / $iNumber) - 30, 160, 20)
                GUICtrlSetFont(-1, 11, 600, 0, "")
                GUICtrlSetColor(-1, 0x990000)
        Next
EndFunc   ;==>_Label2
Func _LabelA()
        For $i = 0 To $aArray[0]
                GUICtrlDelete($Labela[$i]);删除控件
        Next
EndFunc   ;==>_LabelA

 楼主| 发表于 2019-7-31 08:11:55 | 显示全部楼层

谢谢chzj589朋友的回复,可能是我没有说清楚,是单个控件上下移动。
发表于 2019-7-31 08:26:22 | 显示全部楼层
dnvplj 发表于 2019-7-31 08:11
谢谢chzj589朋友的回复,可能是我没有说清楚,是单个控件上下移动。

不是这样吗?



本帖子中包含更多资源

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

×
 楼主| 发表于 2019-7-31 08:39:08 | 显示全部楼层

您好chzj589,是上下单个移动,不是删除。
发表于 2019-7-31 08:48:50 | 显示全部楼层
dnvplj 发表于 2019-7-31 08:39
您好chzj589,是上下单个移动,不是删除。

那应该用<GUICtrlCreateCombo>控件
 楼主| 发表于 2019-7-31 09:01:43 | 显示全部楼层
chzj589 发表于 2019-7-31 08:48
那应该用<GUICtrlCreateCombo>控件

添加和删除我会,但上下移动真的不会了,能有个小例子吗?
发表于 2019-7-31 09:07:51 | 显示全部楼层

LZ应该是这个意思
就是当前与目标两两互换位置

本帖子中包含更多资源

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

×
 楼主| 发表于 2019-7-31 09:11:14 | 显示全部楼层
afan 发表于 2019-7-31 09:07
LZ应该是这个意思
就是当前与目标两两互换位置

是的afan大,但顺序号不要变。
发表于 2019-7-31 09:17:57 | 显示全部楼层
dnvplj 发表于 2019-7-31 09:11
是的afan大,但顺序号不要变。

顺序号难道不是为了展示例子用? 如果实际顺序号不改变为何要和可变的控件弄成一个,直接创建一列固定的顺序号控件不就行了…
互换位置这个功能比分页简单,简单的用 ControlGetPos() 获取当前与目标控件坐标,再 GUICtrlSetPos() 即可,慢慢研究吧
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 08:36 , Processed in 0.102116 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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