如何上下移动控件所显示的信息【已解决】
本帖最后由 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
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
Name=我是第一个
Name=我是第二个
Name=我是第三个
Name=我是第四个
Name=我是第五个
设计好上下按钮与需要移动的控件的一一对应关系
不管采用何种方式,也不用管代码的长短优劣,先实现再优化
提问应该是在自己努力未果后,这类代码我帮写过不少,望LZ举一反三,自己完成 afan 发表于 2019-7-30 20:46
设计好上下按钮与需要移动的控件的一一对应关系
不管采用何种方式,也不用管代码的长短优劣,先实现再优 ...
谢谢回复,自己确实研究一天了,删除应能做得到,但上下移动还真没想出来。 dnvplj 发表于 2019-7-30 22:29
谢谢回复,自己确实研究一天了,删除应能做得到,但上下移动还真没想出来。
删除应能做得到就好办了,重新读取就行了 dnvplj 发表于 2019-7-30 22:29
谢谢回复,自己确实研究一天了,删除应能做得到,但上下移动还真没想出来。
移动就是 —— 将当前与目标控件两两互换位置
BTW,研究一天不知道算不算长,恕我愚钝,反正我有些问题许多年了还在自己琢磨… afan 发表于 2019-7-30 22:43
移动就是 —— 将当前与目标控件两两互换位置
BTW,研究一天不知道算不算长,恕我愚钝,反正我有些问 ...
应是2个控件互换位置(加和减),但还要改写配置文件,不然读取出来的信息还是原来的位置,还真有点难。 本帖最后由 chzj589 于 2019-7-31 07:07 编辑
dnvplj 发表于 2019-7-30 23:09
应是2个控件互换位置(加和减),但还要改写配置文件,不然读取出来的信息还是原来的位置,还真有点难。
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Local $Labela
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
Local $aArray = IniReadSectionNames($ini)
For $i = 1 To $aArray
$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
$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 - 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 - 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
GUICtrlDelete($Labela[$i]);删除控件
Next
EndFunc ;==>_LabelA
chzj589 发表于 2019-7-31 07:04
谢谢chzj589朋友的回复,可能是我没有说清楚,是单个控件上下移动。 dnvplj 发表于 2019-7-31 08:11
谢谢chzj589朋友的回复,可能是我没有说清楚,是单个控件上下移动。
不是这样吗?
chzj589 发表于 2019-7-31 08:26
不是这样吗?
您好chzj589,是上下单个移动,不是删除。 dnvplj 发表于 2019-7-31 08:39
您好chzj589,是上下单个移动,不是删除。
那应该用<GUICtrlCreateCombo>控件 chzj589 发表于 2019-7-31 08:48
那应该用<GUICtrlCreateCombo>控件
添加和删除我会,但上下移动真的不会了,能有个小例子吗? chzj589 发表于 2019-7-31 08:26
不是这样吗?
LZ应该是这个意思
就是当前与目标两两互换位置 afan 发表于 2019-7-31 09:07
LZ应该是这个意思
就是当前与目标两两互换位置
是的afan大,但顺序号不要变。 dnvplj 发表于 2019-7-31 09:11
是的afan大,但顺序号不要变。
顺序号难道不是为了展示例子用? 如果实际顺序号不改变为何要和可变的控件弄成一个,直接创建一列固定的顺序号控件不就行了…
互换位置这个功能比分页简单,简单的用 ControlGetPos() 获取当前与目标控件坐标,再 GUICtrlSetPos() 即可,慢慢研究吧
页:
[1]
2