macran 发表于 2017-1-10 18:07:44

窗口改变控件如何按照自己设想的改变

本帖最后由 macran 于 2017-1-10 18:09 编辑

请见下图:



这是窗口最大化的时候,似乎都很正常



这是窗口还原或者说被改变大小后,明细工具栏被首先遮挡了,

不知道我的意思大家明白没有。界面很简单一个窗口,里面有菜单、工具栏、一个listview,一个状态栏。

如果点击窗口的上或者下边框缩小窗口时,我希望最先遮挡的是listview下面的数据,整个listview遮挡完毕后,
再遮挡最下面的状态栏(状态栏这里大家没看到),状态栏遮挡后再遮挡工具栏然后是菜单。而不是首先遮挡了工具栏。

如果点击窗口的左或者右边框缩小窗口时,我希望最先遮挡的是右边的内容。
GUICtrlSetResizing设置了好久也没成功。

请高手指点一下。谢谢!

austere 发表于 2017-1-10 19:36:51

首先,楼主这软件是你自己编写的吗?不是的话可以不用考虑了。。
第二,如果是楼主写的,楼主肯定是处女座。。。

chzj589 发表于 2017-1-10 20:25:32

回复 1# macran
请高手指点一下也必需上代码吧?

Alam 发表于 2017-1-10 21:41:10

第3方软件要用 winmovecontrolmove

macran 发表于 2017-1-11 08:06:43

是我用AUTOIT自己写的,数据库之前用的SQLITE,最近换成mysql 都很顺利。可能是我太爱较真。不过,有会的请告诉我一下,谢谢了。

chzj589 发表于 2017-1-11 09:56:06

回复 5# macran
能写出这样的代码己经达到一定的水平,应该可以自己解决。
不会论坛搜索与查看帮助? 

macran 发表于 2017-1-11 14:16:32

我发现如果什么也不设置,基本就是按照我设想的方式遮挡,问题出在toolbar ,由于内建函数没有创建工具栏的功能,使用UDF的创建工具栏,这样工具栏总是和listview一起首先resize。而不像菜单一样永远是最后resize。
后来,我想到了用GUICtrlSetResizing($listview,$GUI_DOCKLEFT+$GUI_DOCKTOP),这样首先遮挡的就是LISTVIEW下面的数据,因为左边和上边固定了。状态栏似乎不能用GUICtrlSetResizing($statebar,$GUI_DOCKSTATEBAR),还是沿用原来的 GUIRegisterMsg($WM_SIZE, "WM_SIZE")
然后在WM_SIZE里实现状态栏自动调整大小。
现在还存在一些问题是:
1、工具栏先与状态栏被遮挡(即使我使用了GUICtrlSetResizing($toolbar,$GUI_DOCKMENUBAR)
2、缩放窗口时,工具栏闪烁比较厉害,窗口窄到一定程度的时候才没有闪烁。
3、listview 下面负责宽度的scroll 和状态栏有时候会重叠。

heroxianf 发表于 2017-1-11 23:00:43

回复 5# macran


    mysql就是自带那个udf吗?

macran 发表于 2017-1-12 09:42:20

回复 8# heroxianf
我用的是mysql.au3,然后把MySQL安装目录里面的libmysql.dll复制到你的程序目录中,和SQLITE原理一样,都是调用接口函数。

heroxianf 发表于 2017-1-12 12:03:05

回复 9# macran

可以的话 贴出一段示例 想你学习一下。目前在用SQLite,就是不能局域网共享使用。

macran 发表于 2017-1-12 15:58:38

本帖最后由 macran 于 2017-1-12 16:04 编辑

回复 10# heroxianf

sqlite 可以把数据库文件放在公共盘,这样也可以多人访问。效率可能差些,我当时是在连接数据库之前,做一个连接数据库界面,提示所谓的连接数据库,其实是复制公共盘的数据库到个人的temp文件夹下面。这样每个人操作的就是他自己电脑下的数据库了。每次登陆都判断文件修改时间来决定是否需要更新数据库。虽然给人的感觉也想多人同时操作数据库一样,但数据库文件越来越大。复制时间太长。所以我现在改成mysql了。
mysql的用法论坛上很多。;其他的#include 省略 .........
#include <mysql.au3>
_MySQL_InitLibrary() ;注意下你的mysql版本,可能的话需要修改mysql_version.au3里面的版本信息:
;Global Const $MYSQL_SERVER_VERSION        =         "5.7.7"
;Global Const $MYSQL_BASE_VERSION        =         "mysqld-5.7"
$MysqlConn = _MySQL_Init()
$connected = _MySQL_Real_Connect($MysqlConn,"127.0.0.1","username","password","datebasename")
;"127.0.0.1"是服务器的IP地址,默认是127.0.0.1 也就是locathost (你自己的电脑)如果mysql
;数据库装别人电脑,就填别人电脑的IP地址。当然mysql需要设置让你访问。可以设置任何远程都可
;访问,也可以指定某个ip可访问。这些是需要mysql服务器上操作的。后面的几个含义不用我解释了
;吧。比如“ root”, “1234567”,“test ” test是你建的数据库的名字。

If $connected = 0 Then
                          $errno = _MySQL_errno($MysqlConn)
                          MsgBox(0,"Error:",$errno & @LF & _MySQL_error($MysqlConn))
                          If $errno = $CR_UNKNOWN_HOST Then MsgBox(0,"Error:","$CR_UNKNOWN_HOST" & @LF & $CR_UNKNOWN_HOST)
                                  
Endif
;以上就是数据库连接,下面就可以查询,删除,插入,等操作了。
_mysql_set_character_set($MysqlConn,"GBK") ;设置一下数据库字符集为GBK ,否则显示中文是乱码-----这个是个坑,好多人痛苦在这里,因为AUTOIT不支持显示mysql的UTF8字符集,当然autoit本身是支持utf8的。
$query="SELECT * FROM payments where 1=1 and (fkmc like'%" &$hkdw&"%' )and (jyr between " & $qishiriqi & " and "&$jieshuriqi& " ) and (checking like '%" & $pzhm & "%') and (zhaiyao like '%" & $zhaiyao & "%')"
                                   $len = StringLen(_StringToHex($query)) /2 ;又一个坑,因为字符集的原因。需要转换一下,否则查询不了。记住,无论执行什么sql语句之前都这么写一下。
                _MySQL_Real_Query($MysqlConn,$query,$len)
$res = _MySQL_Store_Result($MysqlConn)
$fields = _MySQL_Num_Fields($res)
$rows = _MySQL_Num_Rows($res)
Dim $aNames[$rows][$fields]

For $k = 1 To $rows
        $mysqlrow = _MySQL_Fetch_Row($res,$fields)

        $lenthsStruct = _MySQL_Fetch_Lengths($res)

        For $i = 1 To $fields
                $length = DllStructGetData($lenthsStruct, 1, $i)
                $fieldPtr = DllStructGetData($mysqlrow, 1, $i)

                $data = DllStructGetData(DllStructCreate("CHAR[" & $length & "]", $fieldPtr), 1)
                $aNames[$k - 1][$i - 1] = $data
        Next
Next

;这样数组$aNames中存着你要的查询结果数据了。怎么显示就自己结合listview写。

heroxianf 发表于 2017-1-12 23:12:19

回复 11# macran


    谢谢,好好学习下。

kk_lee69 发表于 2017-1-13 23:16:09

回复 1# macran

我覺得問題不大你的問題應該是你把 控件的位置重疊到了我也用 菜單 也用 工具攔也用LISTVIEW

我就沒發生過這樣的問題

macran 发表于 2017-1-16 22:31:44

回复 13# kk_lee69
能贴下源码参考学习一下吗?谢谢

tubaba 发表于 2017-1-19 09:57:24

回复 7# macran


    GUICtrlSetResizing不能对UDF创建的控件(因其返回的是句柄)调整,所以GUICtrlSetResizing($toolbar,$GUI_DOCKMENUBAR)不会作用.
还是得用WM_SIZE消息处理.消息函数中先取得窗体坐标大小数据_WinAPI_GetWindowRect($hWnd),然后用_WinAPI_SetWindowPos设置toolbar位置大小
页: [1] 2
查看完整版本: 窗口改变控件如何按照自己设想的改变