Board logo

标题: [AU3基础] 窗口改变控件如何按照自己设想的改变 [打印本页]

作者: macran    时间: 2017-1-10 18:07     标题: 窗口改变控件如何按照自己设想的改变

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

请见下图:
[attach]31580[/attach]


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

[attach]31582[/attach]

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

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

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

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

请高手指点一下。谢谢!
作者: austere    时间: 2017-1-10 19:36

首先,楼主这软件是你自己编写的吗?  不是的话可以不用考虑了。。
第二,如果是楼主写的,楼主肯定是处女座。。。
作者: chzj589    时间: 2017-1-10 20:25

回复 1# macran
请高手指点一下也必需上代码吧?
作者: Alam    时间: 2017-1-10 21:41

第3方软件要用 winmove  controlmove
作者: macran    时间: 2017-1-11 08:06

是我用AUTOIT自己写的,数据库之前用的SQLITE,最近换成mysql 都很顺利。可能是我太爱较真。不过,有会的请告诉我一下,谢谢了。
作者: chzj589    时间: 2017-1-11 09:56

回复 5# macran
能写出这样的代码己经达到一定的水平,应该可以自己解决。
不会论坛搜索与查看帮助? 
作者: macran    时间: 2017-1-11 14:16

我发现如果什么也不设置,基本就是按照我设想的方式遮挡,问题出在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

回复 5# macran


    mysql就是自带那个udf吗?
作者: macran    时间: 2017-1-12 09:42

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

回复 9# macran

可以的话 贴出一段示例 想你学习一下。目前在用SQLite,就是不能局域网共享使用。
作者: macran    时间: 2017-1-12 15:58

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

回复 10# heroxianf

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

  12.   If $connected = 0 Then
  13.                           $errno = _MySQL_errno($MysqlConn)
  14.                           MsgBox(0,"Error:",$errno & @LF & _MySQL_error($MysqlConn))
  15.                           If $errno = $CR_UNKNOWN_HOST Then MsgBox(0,"Error:","$CR_UNKNOWN_HOST" & @LF & $CR_UNKNOWN_HOST)
  16.                                   
  17. Endif
  18. ;以上就是数据库连接,下面就可以查询,删除,插入,等操作了。
  19. _mysql_set_character_set($MysqlConn,"GBK") ;设置一下数据库字符集为GBK ,否则显示中文是乱码-----[color=Red]这个是个坑,好多人痛苦在这里,因为AUTOIT不支持显示mysql的UTF8字符集,当然autoit本身是支持utf8的。[/color]
  20.   $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 & "%')"
  21.                                    $len = StringLen(_StringToHex($query)) /2 ;[color=Red]又一个坑,因为字符集的原因。需要转换一下,否则查询不了。记住,无论执行什么sql语句之前都这么写一下。[/color]
  22.                   _MySQL_Real_Query($MysqlConn,$query,$len)
  23. $res = _MySQL_Store_Result($MysqlConn)
  24. $fields = _MySQL_Num_Fields($res)
  25. $rows = _MySQL_Num_Rows($res)
  26. Dim $aNames[$rows][$fields]

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

  29.         $lenthsStruct = _MySQL_Fetch_Lengths($res)

  30.         For $i = 1 To $fields
  31.                 $length = DllStructGetData($lenthsStruct, 1, $i)
  32.                 $fieldPtr = DllStructGetData($mysqlrow, 1, $i)

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

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

作者: heroxianf    时间: 2017-1-12 23:12

回复 11# macran


    谢谢,好好学习下。
作者: kk_lee69    时间: 2017-1-13 23:16

回复 1# macran

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

我就沒發生過這樣的問題
作者: macran    时间: 2017-1-16 22:31

回复 13# kk_lee69
能贴下源码参考学习一下吗?谢谢
作者: tubaba    时间: 2017-1-19 09:57

回复 7# macran


    GUICtrlSetResizing不能对UDF创建的控件(因其返回的是句柄)调整,所以GUICtrlSetResizing($toolbar,$GUI_DOCKMENUBAR)不会作用.
还是得用WM_SIZE消息处理.消息函数中先取得窗体坐标大小数据_WinAPI_GetWindowRect($hWnd),然后用_WinAPI_SetWindowPos设置toolbar位置大小
作者: kk_lee69    时间: 2017-1-19 10:41

回复 14# macran

何不將你的程式 貼出   我們也好了解 甚麼事 遮住問題

只要簡單的 遮住範例




欢迎光临 AUTOIT CN (http://autoitx.com/) Powered by Discuz! 7.2