kk_lee69 发表于 2017-8-17 11:28:20

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

本帖最后由 kk_lee69 于 2017-8-17 11:59 编辑

讨论个观念问题

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

有16:9有16:10

问题来了

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

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

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

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

希望大家讨论一下吧!!

譬如 我設計的時候 是16:9布滿了 整個GUI但是4:3 的人 拿到了肯定整個控件的大小 跑掉....

tubaba 发表于 2017-8-17 12:25:57

为每个控件单独GUICtrlSetResizing啊

chzj589 发表于 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)

kk_lee69 发表于 2017-8-17 13:14:52

回复 3# chzj589

所以你的位置 都是活動的...............會因為每個不一樣 位置的值會不一樣??

chzj589 发表于 2017-8-17 13:45:02

回复 4# kk_lee69
在不一样的分辨率显示的窗口或控件不会跑偏或看不见

kk_lee69 发表于 2017-8-17 14:03:19

回复 5# chzj589

是因為 你寫成活動的原因嗎??

cfanpc 发表于 2017-8-17 14:27:22

回复 6# kk_lee69

是的   根据当前显示的分辨率赖生成窗口大小很好很方便

kk_lee69 发表于 2017-8-17 15:13:56

回复 7# cfanpc

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

有更簡便的方法嗎??

kk_lee69 发表于 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

kk_lee69 发表于 2017-8-17 15:29:05

回复 7# cfanpc

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

我想討論的是當GUI 變大的時候我原本的控件相對位置 還有大小要怎樣調整 還是最方便的

chzj589 发表于 2017-8-17 16:15:21

回复 10# kk_lee69
是的有点累,特别是窗口控件有很多的话,就更难计算了。
如果有那位高手写个窗口控件部署的UDF,
适用与800*600至2000*900的分辨率,
那就方便多了。
期待??????

fenhanxue 发表于 2017-8-17 18:32:42

这种我默认程序全屏显示,不可缩小。
        $w = @DesktopWidth
        $h = @DesktopHeight - 任务栏高度
        GUICreate('',$w,$h)
然后里面控件的left top widthheight 都用相对位置,如
        $left = $w * 0.2
        $top =$h * 0.3
        $width = $w * 0.4
        $height = $h * 0.5
        GUICtrlCreateButton('',$left,$top,$width,$height)

kk_lee69 发表于 2017-9-5 01:49:22

本帖最后由 kk_lee69 于 2017-9-5 01:50 编辑

回复 12# fenhanxue

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

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

可是別人都是寬螢幕了

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

所以我都不會用全屏去設計....

fenhanxue 发表于 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;GUI        界面的长和宽
        Local $pos_1 = WinGetPos('');获取任务栏高度
        $GUI_pos = @DesktopWidth
        $GUI_pos = @DesktopHeight - $pos_1 - 20;屏幕高度 - 任务栏高度 - 标题高度(假设为20)
       
        ;1        创建GUI
        $Form1 = GUICreate("Form1", $GUI_pos, $GUI_pos, 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
                        Local        $total_h_line_3 = 50;第三行总的要占用多少高度
                Local $edit_h_line_2 = $GUI_pos - $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

kk_lee69 发表于 2017-9-5 23:25:09

回复 14# fenhanxue

是得不錯的邏輯   先學起來感謝!!
页: [1]
查看完整版本: 讨论如何 写出 适合各种形况的GUI 控件布置 求写法逻辑