找回密码
 加入
搜索
查看: 8170|回复: 32

[GUI管理] [已解决]控件Edit 如何根据窗口大小变化呢

[复制链接]
发表于 2020-5-26 20:42:57 | 显示全部楼层 |阅读模式
本帖最后由 .Simba 于 2020-5-29 15:34 编辑

这里如何根据窗体来计算呢?有没有函数可以移动控件改变大小的。










本帖子中包含更多资源

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

×
 楼主| 发表于 2020-5-29 10:59:43 | 显示全部楼层
afan 发表于 2020-5-29 10:23
那你慢慢折腾,伸手党不是那么好当的

A大,我现在是这样处理的,感觉拖动快的时候还是有一点晃动,有更好的解决办法吗?另外还有一个问题,我吧Edit控件换成富文本控件,这个改变大小的方式就不管用了。
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)

#Region ### START Koda GUI section ###
$Form1 = GUICreate("测试窗体", 615, 450, -1, -1, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SIZEBOX))
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1Minimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1Maximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "Form1Restore")

$Tab1 = GUICtrlCreateTab(24, 24, 569, 390)
GUICtrlCreateTabItem("Tab1")
$Edit1 = GUICtrlCreateEdit("", 28, 50, 561, 360)
GUICtrlSetData(-1, "Edit1")

GUICtrlCreateTabItem("Tab2")
$Edit2 = GUICtrlCreateEdit("", 28, 50, 561, 360)
GUICtrlSetData(-1, "Edit2")

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
While 1
        Sleep(100)
WEnd

Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
        Switch $hWnd
                Case $Form1
                        Local $aPos = ControlGetPos('', '', $Edit1)
                        If Not @error Then
                                $iX = $aPos[0] - 2
                                $iY = $aPos[1] - 20
                                $iW = $aPos[2] + 10
                                $iH = $aPos[3] + 25
                                GUICtrlSetPos($Tab1, $iX, $iY, $iW, $iH)
                        EndIf
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE

Func Form1Close()
        Exit
EndFunc   ;==>Form1Close
Func Form1Maximize()
        Local $aPos = ControlGetPos('', '', $Edit1)
        If Not @error Then
                $iX = $aPos[0] - 2
                $iY = $aPos[1] - 20
                $iW = $aPos[2] + 10
                $iH = $aPos[3] + 25
                GUICtrlSetPos($Tab1, $iX, $iY, $iW, $iH)
        EndIf
EndFunc   ;==>Form1Maximize
Func Form1Minimize()
        Local $aPos = ControlGetPos('', '', $Edit1)
        If Not @error Then
                $iX = $aPos[0] - 2
                $iY = $aPos[1] - 20
                $iW = $aPos[2] + 10
                $iH = $aPos[3] + 25
                GUICtrlSetPos($Tab1, $iX, $iY, $iW, $iH)
        EndIf
EndFunc   ;==>Form1Minimize
Func Form1Restore()
        Local $aPos = ControlGetPos('', '', $Edit1)
        If Not @error Then
                $iX = $aPos[0] - 2
                $iY = $aPos[1] - 20
                $iW = $aPos[2] + 10
                $iH = $aPos[3] + 25
                GUICtrlSetPos($Tab1, $iX, $iY, $iW, $iH)
        EndIf
EndFunc   ;==>Form1Restore


发表于 2020-5-26 21:09:19 | 显示全部楼层

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 271, 220, -1, -1, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SIZEBOX))
$Edit1 = GUICtrlCreateEdit("", 16, 8, 241, 177)
GUICtrlSetData(-1, "Edit1")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
        Switch $hWnd
                Case $Form1
                        Local $aPos = WinGetPos($Form1, '')
                        If Not @error Then
                                $iW = $aPos[2] - 15
                                $iH = $aPos[3] - 15
                                GUICtrlSetPos($Edit1, 16, 8, $iW -30, $iH - 43)
                        EndIf
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE



评分

参与人数 1金钱 +10 收起 理由
.Simba + 10 很给力!

查看全部评分

发表于 2020-5-27 11:49:38 | 显示全部楼层
GUICtrlSetResizing
发表于 2020-5-27 12:52:03 | 显示全部楼层
GUICtrlSetResizing
发表于 2020-5-27 16:54:57 | 显示全部楼层
本帖最后由 水木子 于 2020-5-27 16:59 编辑

afan前辈这个界面做得确实很惊艳,后来自己仿过一个。效果看起来差不多的。向afan前辈致敬。

本帖子中包含更多资源

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

×
发表于 2020-5-27 17:36:13 | 显示全部楼层
6666666666666666666666666666666666
 楼主| 发表于 2020-5-27 22:37:22 | 显示全部楼层
水木子 发表于 2020-5-27 16:54
afan前辈这个界面做得确实很惊艳,后来自己仿过一个。效果看起来差不多的。向afan前辈致敬。

我是在TAB里套一个EDIT 然后计算,现在是可以粗略的实现,就是快速拖动还是有错位
发表于 2020-5-28 11:18:53 | 显示全部楼层
水木子 发表于 2020-5-27 16:54
afan前辈这个界面做得确实很惊艳,后来自己仿过一个。效果看起来差不多的。向afan前辈致敬。

木子666~~~
印象中我当时写这个拖拉中部分界条而改变上下编辑框大小的时候,一开始也是使用的这种方式,但发现在XP下拖拉时上下编辑框均频繁闪烁,影响体验,因此才改为先使用一个定位框定位,完成后再调整编辑框的方式。
发表于 2020-5-28 12:09:14 | 显示全部楼层
afan 发表于 2020-5-28 11:18
木子666~~~
印象中我当时写这个拖拉中部分界条而改变上下编辑框大小的时候,一开始也是使用的这种方式, ...

那个Au3.REHelper 上面的编辑框能否加个快捷键ctrl+A全选.有时需要频繁更换测试文本.手动全选清除不太方便
发表于 2020-5-28 12:15:18 | 显示全部楼层
tubaba 发表于 2020-5-28 12:09
那个Au3.REHelper 上面的编辑框能否加个快捷键ctrl+A全选.有时需要频繁更换测试文本.手动全选清除不太方 ...

上下编辑框都可以Ctrl+A全选,一直是这样啊
发表于 2020-5-28 12:20:55 | 显示全部楼层
当时做这种界面时也是闪烁的利害,没有想到好办法,只能移动前先隐藏控件了.

本帖子中包含更多资源

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

×
发表于 2020-5-28 12:27:00 | 显示全部楼层
tubaba 发表于 2020-5-28 12:20
当时做这种界面时也是闪烁的利害,没有想到好办法,只能移动前先隐藏控件了.

偷懒~~状态栏没跟进 
发表于 2020-5-28 12:29:45 | 显示全部楼层
afan 发表于 2020-5-28 12:15
上下编辑框都可以Ctrl+A全选,一直是这样啊

啊,又试了下,以前的1.0.99版本可以全选,现在的1.6反而不可以了..
发表于 2020-5-28 12:41:10 | 显示全部楼层
tubaba 发表于 2020-5-28 12:29
啊,又试了下,以前的1.0.99版本可以全选,现在的1.6反而不可以了..

我知道了,是以前的一个老问题复现了,你是选择的启动时不新建标签页吧~ 是这个就快捷键失效了,一会修正
发表于 2020-5-28 16:25:34 | 显示全部楼层
tubaba 发表于 2020-5-28 12:29
啊,又试了下,以前的1.0.99版本可以全选,现在的1.6反而不可以了..

已修正,顺便修改了一些坐标尺寸逻辑;以及看楼主贴图似乎工具栏下横线显示异常的问题。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-19 06:44 , Processed in 0.086748 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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