dnvplj 发表于 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
      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=我是第五个

afan 发表于 2019-7-30 20:46:46

设计好上下按钮与需要移动的控件的一一对应关系

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

提问应该是在自己努力未果后,这类代码我帮写过不少,望LZ举一反三,自己完成

dnvplj 发表于 2019-7-30 22:29:42

afan 发表于 2019-7-30 20:46
设计好上下按钮与需要移动的控件的一一对应关系

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

谢谢回复,自己确实研究一天了,删除应能做得到,但上下移动还真没想出来。

chzj589 发表于 2019-7-30 22:32:34

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

删除应能做得到就好办了,重新读取就行了

afan 发表于 2019-7-30 22:43:41

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

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

BTW,研究一天不知道算不算长,恕我愚钝,反正我有些问题许多年了还在自己琢磨…

dnvplj 发表于 2019-7-30 23:09:33

afan 发表于 2019-7-30 22:43
移动就是 —— 将当前与目标控件两两互换位置

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

应是2个控件互换位置(加和减),但还要改写配置文件,不然读取出来的信息还是原来的位置,还真有点难。

chzj589 发表于 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
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

dnvplj 发表于 2019-7-31 08:11:55

chzj589 发表于 2019-7-31 07:04


谢谢chzj589朋友的回复,可能是我没有说清楚,是单个控件上下移动。

chzj589 发表于 2019-7-31 08:26:22

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

不是这样吗?



dnvplj 发表于 2019-7-31 08:39:08

chzj589 发表于 2019-7-31 08:26
不是这样吗?

您好chzj589,是上下单个移动,不是删除。

chzj589 发表于 2019-7-31 08:48:50

dnvplj 发表于 2019-7-31 08:39
您好chzj589,是上下单个移动,不是删除。

那应该用<GUICtrlCreateCombo>控件

dnvplj 发表于 2019-7-31 09:01:43

chzj589 发表于 2019-7-31 08:48
那应该用<GUICtrlCreateCombo>控件

添加和删除我会,但上下移动真的不会了,能有个小例子吗?

afan 发表于 2019-7-31 09:07:51

chzj589 发表于 2019-7-31 08:26
不是这样吗?

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

dnvplj 发表于 2019-7-31 09:11:14

afan 发表于 2019-7-31 09:07
LZ应该是这个意思
就是当前与目标两两互换位置

是的afan大,但顺序号不要变。

afan 发表于 2019-7-31 09:17:57

dnvplj 发表于 2019-7-31 09:11
是的afan大,但顺序号不要变。

顺序号难道不是为了展示例子用? 如果实际顺序号不改变为何要和可变的控件弄成一个,直接创建一列固定的顺序号控件不就行了…
互换位置这个功能比分页简单,简单的用 ControlGetPos() 获取当前与目标控件坐标,再 GUICtrlSetPos() 即可,慢慢研究吧
页: [1] 2
查看完整版本: 如何上下移动控件所显示的信息【已解决】