找回密码
 加入
搜索
查看: 4393|回复: 11

[GUI管理] [已解决] skin 皮肤 BUG? 显示不正常!急急 !!

  [复制链接]
发表于 2010-4-19 11:38:16 | 显示全部楼层 |阅读模式
本帖最后由 doshowyam 于 2010-4-20 12:09 编辑

在使用皮肤后,如果当前焦点在两edit 控件上时切换标签项到客户端时,当前的焦点控件不能隐藏。而且即使选其它焦点让他们隐藏后切换到客户端之后,用GUICtrlsetData()设置edit 控件数据,此控件也要在客户端标签上显示出来。
请教一下高手怎么解决啊。。在线等!!


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

$skin = ".\Gloss_ST.skf"
$SkinDll = ".\SkinCrafterDll.dll"
Func _SkinGUI($SkincrafterDll, $SkincrafterSkin, $Handle)
        $Dll = DllOpen($SkincrafterDll)
        DllCall($Dll, "int:cdecl", "InitLicenKeys", "wstr", "1", "wstr", "", "wstr", "1@1.com", "wstr", "1")
        DllCall($Dll, "int:cdecl", "InitDecoration", "int", 1)
        DllCall($Dll, "int:cdecl", "LoadSkinFromFile", "wstr", $SkincrafterSkin)
        DllCall($Dll, "int:cdecl", "DecorateAs", "int", $Handle, "int", 25)
        DllCall($Dll, "int:cdecl", "ApplySkin")
EndFunc   ;==>_SkinGUI

$RootWindows = GUICreate("Server -- TCP Talke Server", @DesktopWidth * 0.6, @DesktopHeight * 0.6, @DesktopWidth * 0.2, @DesktopHeight * 0.2)
_SkinGUI($SkinDll, $skin, $RootWindows)

;========================================================================================
;                                                        各控件边界设置
;tab签
$tab_lf = 8
$tab_tp = 10
$tab_wd = @DesktopWidth * 0.6 - 20
$tab_ht = @DesktopHeight * 0.6 - 50
$tab_sty = ""
;接收栏
$RvEdit_lf = 11
$RvEdit_tp = 30
$RvEdit_wd = @DesktopWidth * 0.6 - 26
$RvEdit_ht = @DesktopHeight * 0.6 - 220
$RvEdit_sty = BitOR($ES_MULTILINE, $ES_AUTOVSCROLL, $ES_WANTRETURN, $ES_READONLY, $ws_VSCROLL)
;IP地址
$Ipedit_tp = @DesktopHeight * 0.6 - 180
$Ipedit_lf = 40
$Ipedit_sty = $ES_NUMBER
;发送栏
$SdEdit_tp = @DesktopHeight * 0.6 - 150
$SdEdit_lf = 11
$SdEdit_wd = @DesktopWidth * 0.6 - 26
$SdEdit_ht = 50
$SdEdit_sty = BitOR($ES_MULTILINE, $ES_AUTOVSCROLL, $ES_WANTRETURN, $ws_VSCROLL)
;按钮
$Bu_sd_tp = $SdEdit_tp + $SdEdit_ht + 10
$Bu_sd_lf = @DesktopWidth * 0.15 - 10
$Bu_ext_lf = @DesktopWidth * 0.45 - 150
;
;
;========================================================================================

$tab = GUICtrlCreateTab($tab_lf, $tab_tp, $tab_wd, $tab_ht, $tab_sty) ;创建TAB标签

$tb_Rs = GUICtrlCreateTabItem(" 收发信息 ") ; 收发 tab 标签

$RvEdit = GUICtrlCreateEdit("", $RvEdit_lf, $RvEdit_tp, $RvEdit_wd, $RvEdit_ht, $RvEdit_sty) ; 接收栏

$SdEdit = GUICtrlCreateEdit("", $SdEdit_lf, $SdEdit_tp, $SdEdit_wd, $SdEdit_ht, $SdEdit_sty) ; 发送栏

$Bu_sd = GUICtrlCreateButton("发送[&Enter]", $Bu_sd_lf, $Bu_sd_tp, 113, 25, 0)
$Bu_ext = GUICtrlCreateButton("退出[&Esc]", $Bu_ext_lf, $Bu_sd_tp, 113, 25, 0)
;                        tab 1
;---------------------------------------------------------------------------
$tb_cl = GUICtrlCreateTabItem(" 客户端 ")

$Bu_ext_cl = GUICtrlCreateButton("退出[&Esc]", $Bu_ext_lf, $Bu_sd_tp, 113, 25, 0)

GUICtrlCreateTabItem("") ; TAB 标签结束
GUICtrlSetState($tb_Rs, $GUI_SHOW)
GUISetState(@SW_SHOW)
GUICtrlSetState($RvEdit, $GUI_FOCUS)
GUICtrlSetState($SdEdit, $GUI_FOCUS)

While 1
        $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-4-19 11:51:16 | 显示全部楼层
没人理啊。。自己先顶上去
发表于 2010-4-19 14:22:04 | 显示全部楼层
这个是使用皮肤后的代价,可以换其他皮肤,不过皮肤多少都会有些问题
 楼主| 发表于 2010-4-19 14:25:33 | 显示全部楼层
有没有什么好的解决办法
发表于 2010-4-19 14:31:29 | 显示全部楼层
回复 1# doshowyam

我试了一下 好像没有你说的问题,检查一下你的源码吧
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
$skin = "V-touch.skf"
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 625, 443, 192, 124)
 _SkinGUI("SkinCrafterDll_34.dll", $skin, $Form1 )
$Tab1 = GUICtrlCreateTab(2, 2, 621, 437)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("第一页")
$Edit1 = GUICtrlCreateEdit("", 16, 38, 593, 193)
GUICtrlSetData(-1, "Edit1")
$Edit2 = GUICtrlCreateEdit("", 18, 240, 591, 71)
GUICtrlSetData(-1, "Edit2")
$Button1 = GUICtrlCreateButton("发送", 40, 360, 75, 25)
$Button2 = GUICtrlCreateButton("退出", 124, 362, 75, 25)
$TabSheet2 = GUICtrlCreateTabItem("第二页")
GUICtrlSetState(-1,$GUI_SHOW)
$Button3 = GUICtrlCreateButton("退出", 424, 346, 75, 25)
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

        EndSwitch
WEnd
Func _SkinGUI($SkincrafterDll, $SkincrafterSkin, $Handle) 
   $Dll = DllOpen($SkincrafterDll) 
   DllCall($Dll, "int:cdecl", "InitLicenKeys", "wstr", "SKINCRAFTER", "wstr", "SKINCRAFTER.COM", "wstr", "support@skincrafter.com", "wstr", "DEMOSKINCRAFTERLICENCE") 
   DllCall($Dll, "int:cdecl", "InitDecoration", "int", 1) 
   DllCall($Dll, "int:cdecl", "LoadSkinFromFile", "wstr", $SkincrafterSkin) 
   DllCall($Dll, "int:cdecl", "DecorateAs", "int", $Handle, "int", 25) 
   DllCall($Dll, "int:cdecl", "ApplySkin") 
EndFunc
发表于 2010-4-19 14:57:49 | 显示全部楼层
建议楼主还是不要使用皮肤!
发表于 2010-4-19 19:14:48 | 显示全部楼层
我不建议你使用皮肤
发表于 2010-4-19 19:21:31 | 显示全部楼层
应该是部分皮肤的问题
 楼主| 发表于 2010-4-19 19:55:22 | 显示全部楼层
回复 5# guland


  两个edit 控件要获得输入焦点后再点击第二页就出错了
发表于 2010-4-20 00:15:42 | 显示全部楼层
不要使用皮肤
发表于 2010-4-20 07:38:16 | 显示全部楼层
回复 1# doshowyam


    可以把 这行代码_SkinGUI($SkinDll, $skin, $RootWindows)加入在
GUICtrlCreateTabItem("") 后面.
就像这样
GUICtrlCreateTabItem("") 
_SkinGUI($SkinDll, $skin, $RootWindows)
虽然这样可以解决你的问题,但是这样TAB上就没有皮肤了,没办法,现在的皮肤插件用在AU3上
都有一些问题

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2010-4-20 11:59:53 | 显示全部楼层
回复 11# guland
谢!!已解决!!
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

$skin = "D:\公共\au3\Au3皮肤\Skin\Gloss_ST.skf"
$SkinDll = "D:\公共\au3\Au3皮肤\Skin\SkinCrafterDll.dll"
Func _SkinGUI($SkincrafterDll, $SkincrafterSkin, $Handle)
        $Dll = DllOpen($SkincrafterDll)
        DllCall($Dll, "int:cdecl", "InitLicenKeys", "wstr", "1", "wstr", "", "wstr", "1@1.com", "wstr", "1")
        DllCall($Dll, "int:cdecl", "InitDecoration", "int", 1)
        DllCall($Dll, "int:cdecl", "LoadSkinFromFile", "wstr", $SkincrafterSkin)
        DllCall($Dll, "int:cdecl", "DecorateAs", "int", $Handle, "int", 25)
        DllCall($Dll, "int:cdecl", "ApplySkin")
EndFunc   ;==>_SkinGUI

$RootWindows = GUICreate("Server -- TCP Talke Server", @DesktopWidth * 0.6, @DesktopHeight * 0.6, @DesktopWidth * 0.2, @DesktopHeight * 0.2)
_SkinGUI($SkinDll, $skin, $RootWindows)

;========================================================================================
;                                                        各控件边界设置
;tab签
$tab_lf = 8
$tab_tp = 10
$tab_wd = @DesktopWidth * 0.6 - 20
$tab_ht = @DesktopHeight * 0.6 - 50
$tab_sty = ""
;接收栏
$RvEdit_lf = 11
$RvEdit_tp = 30
$RvEdit_wd = @DesktopWidth * 0.6 - 26
$RvEdit_ht = @DesktopHeight * 0.6 - 220
$RvEdit_sty = BitOR($ES_MULTILINE, $ES_AUTOVSCROLL, $ES_WANTRETURN, $ES_READONLY, $ws_VSCROLL)
;IP地址
$Ipedit_tp = @DesktopHeight * 0.6 - 180
$Ipedit_lf = 40
$Ipedit_sty = $ES_NUMBER
;发送栏
$SdEdit_tp = @DesktopHeight * 0.6 - 150
$SdEdit_lf = 11
$SdEdit_wd = @DesktopWidth * 0.6 - 26
$SdEdit_ht = 50
$SdEdit_sty = BitOR($ES_MULTILINE, $ES_AUTOVSCROLL, $ES_WANTRETURN, $ws_VSCROLL)
;按钮
$Bu_sd_tp = $SdEdit_tp + $SdEdit_ht + 10
$Bu_sd_lf = @DesktopWidth * 0.15 - 10
$Bu_ext_lf = @DesktopWidth * 0.45 - 150
;
;
;========================================================================================

$tab = GUICtrlCreateTab($tab_lf, $tab_tp, $tab_wd, $tab_ht, $tab_sty) ;创建TAB标签

$tb_Rs = GUICtrlCreateTabItem(" 收发信息 ") ; 收发 tab 标签

$RvEdit = GUICtrlCreateEdit("", $RvEdit_lf, $RvEdit_tp, $RvEdit_wd, $RvEdit_ht, $RvEdit_sty) ; 接收栏

$SdEdit = GUICtrlCreateEdit("", $SdEdit_lf, $SdEdit_tp, $SdEdit_wd, $SdEdit_ht, $SdEdit_sty) ; 发送栏

$Bu_sd = GUICtrlCreateButton("发送[&Enter]", $Bu_sd_lf, $Bu_sd_tp, 113, 25, 0)
$Bu_ext = GUICtrlCreateButton("退出[&Esc]", $Bu_ext_lf, $Bu_sd_tp, 113, 25, 0)
;                        tab 1
;---------------------------------------------------------------------------
$tb_cl = GUICtrlCreateTabItem(" 客户端 ")

$Bu_ext_cl = GUICtrlCreateButton("退出[&Esc]", $Bu_ext_lf, $Bu_sd_tp, 113, 25, 0)

GUICtrlCreateTabItem("") ; TAB 标签结束
GUICtrlSetState($tb_Rs, $GUI_SHOW)
GUISetState(@SW_SHOW)
GUICtrlSetState($RvEdit, $GUI_FOCUS)
GUICtrlSetState($SdEdit, $GUI_FOCUS)

GUIRegisterMsg($WM_SETFOCUS, "MSG_WM_SETFOCUS")
While 1
        $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
        If $msg = $tab Then tabhide()

WEnd

Func tabhide()
        Switch GUICtrlRead($tab, 1)
                Case $tb_Rs
                        GUICtrlSetState($RvEdit, $GUI_SHOW + $GUI_ENABLE + $GUI_FOCUS)
                        GUICtrlSetState($SdEdit, $GUI_SHOW + $GUI_ENABLE + $GUI_FOCUS)
                Case $tb_cl
                Case Else
                        Return
        EndSwitch
EndFunc   ;==>tabhide



Func MSG_WM_SETFOCUS($hWnd, $msg, $wParam, $lParam)        
        Local $sel_tab = GUICtrlRead($tab, 1)        
        If $sel_tab <> $tb_Rs And ($wParam = GUICtrlGetHandle($SdEdit) Or $wParam = GUICtrlGetHandle($RvEdit)) Then
                        GUICtrlSetState($tb_Rs, $GUI_SHOW + $GUI_FOCUS)
                        GUICtrlSetState($sel_tab, $GUI_SHOW + $GUI_FOCUS)
        EndIf
        Return $GUI_RUNDEFMSG
EndFunc   ;==>MSG_WM_SETFOCUS
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 11:58 , Processed in 0.092215 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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