讨论如何 写出 适合各种形况的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 的人 拿到了肯定整個控件的大小 跑掉.... 为每个控件单独GUICtrlSetResizing啊
回复 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) 回复 3# chzj589
所以你的位置 都是活動的...............會因為每個不一樣 位置的值會不一樣?? 回复 4# kk_lee69
在不一样的分辨率显示的窗口或控件不会跑偏或看不见 回复 5# chzj589
是因為 你寫成活動的原因嗎?? 回复 6# kk_lee69
是的 根据当前显示的分辨率赖生成窗口大小很好很方便 回复 7# cfanpc
全部寫成計算公式 有點累吧
有更簡便的方法嗎?? 本帖最后由 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
回复 7# cfanpc
我知道 可以 根據目前 螢幕大小 設定 GUI 大小
我想討論的是當GUI 變大的時候我原本的控件相對位置 還有大小要怎樣調整 還是最方便的 回复 10# kk_lee69
是的有点累,特别是窗口控件有很多的话,就更难计算了。
如果有那位高手写个窗口控件部署的UDF,
适用与800*600至2000*900的分辨率,
那就方便多了。
期待?????? 这种我默认程序全屏显示,不可缩小。
$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:50 编辑
回复 12# fenhanxue
所以你的程序 一開始 就是全屏設計版面嗎???
可是你還是會遇到
像我自己得是1280*1024 我的是這種螢幕
可是別人都是寬螢幕了
但是我自己習慣用這個螢幕
所以我都不會用全屏去設計.... 回复 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 回复 14# fenhanxue
是得不錯的邏輯 先學起來感謝!!
页:
[1]