找回密码
 加入
搜索
查看: 3854|回复: 14

[AU3基础] 讨论如何 写出 适合各种形况的GUI 控件布置 求写法逻辑

    [复制链接]
发表于 2017-8-17 11:28:20 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2017-8-17 11:59 编辑

讨论个观念问题

首先 不可讳言的 目前仍旧有些工厂的屏幕是 4:3  有 17吋 有 19吋 当然也有21吋

有16:9  有16:10

问题来了  

通常我写的东西是类似ERP的小型管理系统,我希望可以 以最大化窗口 操作程序画面!! 但是 每个人的大小都不一样,我如何能确保 每个人所看到的程序画面都一样,至少不能应为分辨率不一样,可能会有些控件看不到吧!!

因此 目前我的作法是  800*600 固定大小 然后排列我要排列的控件布局…..
这项可以确保 至少大家都可以看到所有的控件布局

可是这样的问题是  就是无法以最大化操作

不晓得 各位是如何处理 这个问题的??

希望大家讨论一下吧!!

譬如 我設計的時候 是16:9  布滿了 整個GUI  但是4:3 的人 拿到了  肯定整個控件的大小 跑掉....
发表于 2017-8-17 12:25:57 | 显示全部楼层
为每个控件单独GUICtrlSetResizing啊

本帖子中包含更多资源

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

×
发表于 2017-8-17 13:07:50 | 显示全部楼层
回复 1# kk_lee69
每台的分辨率不一样,我是用:
Global $iWidtha = @DesktopWidth
Global $iHeighta = @DesktopHeight
计算每个控件的座标。比如:
        _GUICtrlListView_AddColumn($ListView1, "ID", $iWidtha / 12 - 20);设置列属性
        _GUICtrlListView_AddColumn($ListView1, "日期", $iWidtha / 9)
        _GUICtrlListView_AddColumn($ListView1, "", $iWidtha / 14)
        _GUICtrlListView_AddColumn($ListView1, "", $iWidtha / 16)
        _GUICtrlListView_AddColumn($ListView1, "", $iWidtha / 8)
        _GUICtrlListView_AddColumn($ListView1, "", $iWidtha / 4)
        _GUICtrlListView_AddColumn($ListView1, "", $iWidtha / 14)
        _GUICtrlListView_AddColumn($ListView1, "", $iWidtha / 14)
        _GUICtrlListView_AddColumn($ListView1, "", $iWidtha / 12)
 楼主| 发表于 2017-8-17 13:14:52 | 显示全部楼层
回复 3# chzj589

所以你的位置 都是活動的...............會因為每個不一樣 位置的值會不一樣??
发表于 2017-8-17 13:45:02 | 显示全部楼层
回复 4# kk_lee69
在不一样的分辨率显示的窗口或控件不会跑偏或看不见
 楼主| 发表于 2017-8-17 14:03:19 | 显示全部楼层
回复 5# chzj589

是因為 你寫成活動的原因嗎??
发表于 2017-8-17 14:27:22 | 显示全部楼层
回复 6# kk_lee69

是的   根据当前显示的分辨率赖生成窗口大小  很好很方便
 楼主| 发表于 2017-8-17 15:13:56 | 显示全部楼层
回复 7# cfanpc

    全部寫成計算公式 有點累吧

有更簡便的方法嗎??
 楼主| 发表于 2017-8-17 15:15:03 | 显示全部楼层
本帖最后由 kk_lee69 于 2017-8-17 15:16 编辑

回复 5# chzj589

Opt("GUIResizeMode", 0) 或者 Opt("GUIResizeMode", 1)

採用自動都怪怪的  好像真的要一個一個去定義 每個的變化方式 這樣才會 正常些

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Example()

Func Example()
        Opt("GUIResizeMode", 0) 
    Opt("GUICoordMode", 2)
    GUICreate("設置控件調整", 190, 114, -1, -1, $WS_SIZEBOX + $WS_SYSMENU) ; 開始定義

    GUISetFont(8, -1, "Arial")

    GUICtrlCreateLabel("提示", 8, 7) ; 添加提示信息
    ;GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP)

    Local $idEdit = GUICtrlCreateInput("默認", -1, 3, 175, 20, $ES_PASSWORD) ; 添加輸入框字符
    GUICtrlSetState($idEdit, $GUI_FOCUS)
    ;GUICtrlSetResizing($idEdit, $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)

    Local $idOK = GUICtrlCreateButton("確定", -1, 3, 75, 24) ; 添加將關閉 GUI 的按鈕
    ;GUICtrlSetResizing($idOK, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)

    Local $idCancel = GUICtrlCreateButton("取消", 25, -1) ; 添加將關閉 GUI 的按鈕
    ;GUICtrlSetResizing($idCancel, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)

    GUISetState(@SW_SHOW) ; 顯示 GUI

    ; 循環到用戶退出.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop

        EndSwitch
    WEnd
EndFunc   ;==>Example
 楼主| 发表于 2017-8-17 15:29:05 | 显示全部楼层
回复 7# cfanpc

我知道 可以 根據目前 螢幕大小 設定 GUI 大小

我想討論的是  當GUI 變大的時候  我原本的控件相對位置 還有大小要怎樣調整 還是最方便的
发表于 2017-8-17 16:15:21 | 显示全部楼层
回复 10# kk_lee69
是的有点累,特别是窗口控件有很多的话,就更难计算了。
如果有那位高手写个窗口控件部署的UDF,
适用与800*600至2000*900的分辨率,
那就方便多了。
期待??????
发表于 2017-8-17 18:32:42 | 显示全部楼层
这种我默认程序全屏显示,不可缩小。
        $w = @DesktopWidth
        $h = @DesktopHeight - 任务栏高度
        GUICreate('',$w,$h)
然后里面控件的  left top width  height 都用相对位置,如
        $left = $w * 0.2
        $top =  $h * 0.3
        $width = $w * 0.4
        $height = $h * 0.5
        GUICtrlCreateButton('',$left,$top,$width,$height)
 楼主| 发表于 2017-9-5 01:49:22 | 显示全部楼层
本帖最后由 kk_lee69 于 2017-9-5 01:50 编辑

回复 12# fenhanxue

所以你的程序 一開始 就是全屏設計版面嗎???
可是你還是會遇到

像我自己得是1280*1024 我的是這種螢幕

可是別人都是寬螢幕了

但是我自己習慣用這個螢幕

所以我都不會用全屏去設計....
发表于 2017-9-5 10:40:11 | 显示全部楼层
回复 13# kk_lee69


如果程序界面不大的(要展示的内容不多),如长*宽 = 800*800的,那可能就不存在排版问题吧(是个电脑分辨率应该都会比800要大)

如果程序的界面很大(要展示的内容很多),那我觉得默认全屏排版,每个控件都用相对位置进行表示,可能是一个解决方案
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

_Main_Gui();

Func _Main_Gui();
        
        Local $GUI_pos[2];GUI        界面的长和宽
        Local $pos_1 = WinGetPos('[class:Shell_TrayWnd]');获取任务栏高度
        $GUI_pos[0] = @DesktopWidth
        $GUI_pos[1] = @DesktopHeight - $pos_1[3] - 20;屏幕高度 - 任务栏高度 - 标题高度(假设为20)
        
        ;1        创建GUI
        $Form1 = GUICreate("Form1", $GUI_pos[0], $GUI_pos[1], 0, 0)
        
        
        ;2        假设界面由3行控件组成
                #cs
                        第一行        几个button
                        第二行        一个edit
                        第三行        几个button
                #ce
                ;创建三行内容
                
                ;2.1        第一行
                Local $top_Reserve_line_1 = 10;第一行的控件,预留多少高度
                Local $bt_top_line_1 = 0        + $top_Reserve_line_1
                Local $bt_left_line_1 = 0
                Local $bt_w_line_1 = 100
                Local $bt_h_line_1 = 30
                GUICtrlCreateButton('第一行的按钮',$bt_left_line_1,$bt_top_line_1,$bt_w_line_1,$bt_h_line_1)
        
                
                ;2.2        第二行
                Local $top_Reserve_line_2 = 10;第二行的控件,预留多少高度
                Local $edit_top_line_2 = $bt_top_line_1 + $bt_h_line_1 + $top_Reserve_line_2
                Local $edit_left_line_2 = 0
                Local $edit_w_line_2 = $GUI_pos[0]
                        Local        $total_h_line_3 = 50;第三行总的要占用多少高度
                Local $edit_h_line_2 = $GUI_pos[1] - $edit_top_line_2 - $total_h_line_3        
                GUICtrlCreateEdit('eidt',$edit_left_line_2,$edit_top_line_2,$edit_w_line_2,$edit_h_line_2)
                
                ;2.3        第三行
                Local $top_Reserve_line_3 = 10 
                Local $bt_top_line_3  = $edit_top_line_2        + $edit_h_line_2 + $top_Reserve_line_3
                Local $bt_left_line_3 = 0
                Local $bt_w_line_3 = 100
                Local $bt_h_line_3 = $total_h_line_3 - $top_Reserve_line_3
                GUICtrlCreateButton('第三行的按钮',$bt_left_line_3,$bt_top_line_3,$bt_w_line_3,$bt_h_line_3)


                
        GUISetState(@SW_SHOW)

        While 1
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                                Exit

                EndSwitch
        WEnd
EndFunc
 楼主| 发表于 2017-9-5 23:25:09 | 显示全部楼层
回复 14# fenhanxue

是得不錯的邏輯   先學起來  感謝!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-21 17:44 , Processed in 0.106257 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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