窗口改变控件如何按照自己设想的改变
本帖最后由 macran 于 2017-1-10 18:09 编辑请见下图:
这是窗口最大化的时候,似乎都很正常
这是窗口还原或者说被改变大小后,明细工具栏被首先遮挡了,
不知道我的意思大家明白没有。界面很简单一个窗口,里面有菜单、工具栏、一个listview,一个状态栏。
如果点击窗口的上或者下边框缩小窗口时,我希望最先遮挡的是listview下面的数据,整个listview遮挡完毕后,
再遮挡最下面的状态栏(状态栏这里大家没看到),状态栏遮挡后再遮挡工具栏然后是菜单。而不是首先遮挡了工具栏。
如果点击窗口的左或者右边框缩小窗口时,我希望最先遮挡的是右边的内容。
GUICtrlSetResizing设置了好久也没成功。
请高手指点一下。谢谢! 首先,楼主这软件是你自己编写的吗?不是的话可以不用考虑了。。
第二,如果是楼主写的,楼主肯定是处女座。。。 回复 1# macran
请高手指点一下也必需上代码吧? 第3方软件要用 winmovecontrolmove 是我用AUTOIT自己写的,数据库之前用的SQLITE,最近换成mysql 都很顺利。可能是我太爱较真。不过,有会的请告诉我一下,谢谢了。 回复 5# macran
能写出这样的代码己经达到一定的水平,应该可以自己解决。
不会论坛搜索与查看帮助? 我发现如果什么也不设置,基本就是按照我设想的方式遮挡,问题出在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 和状态栏有时候会重叠。 回复 5# macran
mysql就是自带那个udf吗? 回复 8# heroxianf
我用的是mysql.au3,然后把MySQL安装目录里面的libmysql.dll复制到你的程序目录中,和SQLITE原理一样,都是调用接口函数。 回复 9# macran
可以的话 贴出一段示例 想你学习一下。目前在用SQLite,就是不能局域网共享使用。 本帖最后由 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写。
回复 11# macran
谢谢,好好学习下。 回复 1# macran
我覺得問題不大你的問題應該是你把 控件的位置重疊到了我也用 菜單 也用 工具攔也用LISTVIEW
我就沒發生過這樣的問題 回复 13# kk_lee69
能贴下源码参考学习一下吗?谢谢 回复 7# macran
GUICtrlSetResizing不能对UDF创建的控件(因其返回的是句柄)调整,所以GUICtrlSetResizing($toolbar,$GUI_DOCKMENUBAR)不会作用.
还是得用WM_SIZE消息处理.消息函数中先取得窗体坐标大小数据_WinAPI_GetWindowRect($hWnd),然后用_WinAPI_SetWindowPos设置toolbar位置大小
页:
[1]
2