找回密码
 加入
搜索
楼主: kk_lee69

[系统综合] 有办法像EXCEL一样单元格内容与显示格式 可以不一样吗??数字的千分号

  [复制链接]
发表于 2017-9-11 08:22:57 | 显示全部楼层
回复 30# kk_lee69


    遗憾,尝试截获消息。然后自绘,可是失败了。也许是我技术不够?!!
发表于 2017-9-12 14:16:20 | 显示全部楼层
本帖最后由 minidick 于 2017-9-12 14:18 编辑

回复 30# kk_lee69

按照我的理解,GUIRegisterMsg截获的是主窗口的Msg队列,不能截获特定控件的Msg队列。
ListView实现了CustomDraw特性,所以会向主窗口发送WM_NOTIFY,然后主窗口去响应,实现自绘
Button可以设置BS_OWNERDRAW,所以会向主窗口发送WM_DRAWITEM,然后主窗口去响应,实现自绘
Edit(Input)没有上述属性,也不会把自己的WM_PAINT发送给主窗口(WM_KILLFOCUS等会以WM_COMMAND的形式发给主窗口)。所以没法截获WM_PAINT来自绘。更复杂的是,Edit(Input)控件因为有交互功能,除了WM_PAINT会重绘,还会在WM_SETSEL,WM_KILLFOCUS下重绘,都需要截获。
 楼主| 发表于 2017-9-12 14:42:10 | 显示全部楼层
回复 32# minidick


    所以理論上是困難嚕

那我可以再請教一下嗎??

INPUT 控件應該是一種特殊的EDIT控件
EDIT 控件  會發送 WM_COMMAND

但是 WM_COMMAND 只有
Case $EN_ALIGN_LTR_EC ; 發送 使用者改變編輯控制項方向為左到右消息
Case $EN_ALIGN_RTL_EC ; 發送 使用者改變編輯控制項方向為右到左消息
Case $EN_CHANGE ; 發送使用者修改編輯控制項文本消息
Case $EN_ERRSPACE ; 發送記憶體分配不足的消息
Case $EN_HSCROLL ; 發送使用者點擊水平捲軸消息
Case $EN_KILLFOCUS ; 發送控制項失去鍵盤焦點消息
Case $EN_MAXTEXT ; 發送當前文本插入超過編輯控制項指定字元數消息
Case $EN_SETFOCUS ; 發送編輯控制項接收鍵盤焦點消息
Case $EN_UPDATE ; 發送編輯控制項即將更新消息
Case $EN_VSCROLL ; 發送使用者點擊編輯控制項的垂直捲動條,或使用者在編輯控制項滾動滑鼠滾輪消息

這些消息   

上面的這些消息是  要不是太過頻繁檢查  就是 無法確定檢查的到

不像  我們 使用了  $EDTE1=GUICtrlCreateInput(........)  
只要在後面使用  case $EDIT1   這樣不管是我們按下 ENTER 或者 失去焦點 都會檢查一次

使用  WM_COMMAND   我可以做一次 就好 不用 每個控件都做一次
但是 使用 case $EDIT1    的方法 就需要每個控件都得要做一次

有辦法在  WM_COMMAND    得到 如同 case $EDIT1     的效果嗎??
发表于 2017-9-12 16:11:06 | 显示全部楼层
回复 32# minidick


    可以获取wm_paint,,用setwindowlong,
    但是问题是,如果完全重绘,,其实就不是input,而是你的自绘控件了。。所有都得重做。。。就好像是一般的label一样,什么都没有了。。所以我没思路了
发表于 2017-9-12 16:15:19 | 显示全部楼层
回复 33# kk_lee69


    不明白你说的意思。。。。

啥意思来着?
上面的這些消息是  要不是太過頻繁檢查  就是 無法確定檢查的到

不像  我們 使用了  $EDTE1=GUICtrlCreateInput(........)  
只要在後面使用  case $EDIT1   這樣不管是我們按下 ENTER 或者 失去焦點 都會檢查一次

使用  WM_COMMAND   我可以做一次 就好 不用 每個控件都做一次
但是 使用 case $EDIT1    的方法 就需要每個控件都得要做一次

有辦法在  WM_COMMAND    得到 如同 case $EDIT1     的效果嗎??
 楼主| 发表于 2017-9-12 16:24:03 | 显示全部楼层
回复 35# yamakawa

#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
GUICreate("我的?入框 GUI", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1); 接受拖?文件 WS_EX_ACCEPTFILES
$EDTE1 = GUICtrlCreateInput("", 10, 5, 300, 20)
$EDTE2=GUICtrlCreateInput("", 10, 35, 300, 20)
$EDTE3=GUICtrlCreateInput("", 10, 65, 300, 20)
$EDTE4=GUICtrlCreateInput("", 10, 95, 300, 20)


GUISetState()
        
While 1

        Switch GUIGetMsg()
                Case -3
                        ExitLoop
                Case $EDTE1
                        MsgBox(0,$EDTE1,"你輸入的是"&GUICtrlRead($EDTE1))
                        
                Case $EDTE2
                        MsgBox(0,$EDTE2,"你輸入的是"&GUICtrlRead($EDTE2))

                Case $EDTE3
                        MsgBox(0,$EDTE3,"你輸入的是"&GUICtrlRead($EDTE3))

                Case $EDTE4
                        MsgBox(0,$EDTE4,"你輸入的是"&GUICtrlRead($EDTE4))
        EndSwitch
        
WEnd


上面例子  MsgBox 只會在兩種情況啟動

1. 在 INPUT 輸入完畢後 按下 回車
2. 失去焦點

反觀
Case $EN_ALIGN_LTR_EC ; 發送 使用者改變編輯控制項方向為左到右消息
Case $EN_ALIGN_RTL_EC ; 發送 使用者改變編輯控制項方向為右到左消息
Case $EN_CHANGE ; 發送使用者修改編輯控制項文本消息
Case $EN_ERRSPACE ; 發送記憶體分配不足的消息
Case $EN_HSCROLL ; 發送使用者點擊水平捲軸消息
Case $EN_KILLFOCUS ; 發送控制項失去鍵盤焦點消息
Case $EN_MAXTEXT ; 發送當前文本插入超過編輯控制項指定字元數消息
Case $EN_SETFOCUS ; 發送編輯控制項接收鍵盤焦點消息
Case $EN_UPDATE ; 發送編輯控制項即將更新消息
Case $EN_VSCROLL ; 發送使用者點擊編輯控制項的垂直捲動條,或使用者在編輯控制項滾動滑鼠滾輪消息

這裡面只有 失去焦點 是一樣的  沒有回車事件   其他的那些正在改變的  在打字的時候就會觸發  不適合用來 檢查使用這輸入的資料是否正確
发表于 2017-9-12 16:29:21 | 显示全部楼层
本帖最后由 yamakawa 于 2017-9-12 16:40 编辑

回复 36# kk_lee69


好像理解错了。。。。你是不想随时检查?而是你做了某个特定操作后才触发?


再看一下你的代码。。。哈哈,,,
Opt("GUIOnEventMode", 1)
然后下面用guigetmsg。。。
 楼主| 发表于 2017-9-12 16:40:17 | 显示全部楼层
可以 你RUN 看看不就知道
 楼主| 发表于 2017-9-12 16:40:31 | 显示全部楼层
回复 37# yamakawa

可以 你RUN 看看不就知道
 楼主| 发表于 2017-9-12 16:44:40 | 显示全部楼层
回复 37# yamakawa

修正一下

Opt("GUIOnEventMode", 1)
這行拿掉就可以 RUN
发表于 2017-9-12 16:45:03 | 显示全部楼层
回复 39# kk_lee69


    我特意run了下不行才那么说。。。然后才反应过来,不对啊,应该有反应才对。。。。然后再看了下你代码。。哈哈。。上面注册Opt("GUIOnEventMode", 1)
,后面用guigetmsg,,所以才没反应的。。

这个不管,小错误

问题是,你想实现的是什么?用wm command实现的千分位显示,我上面给了一个例子了。那个不行?$EN_KILLFOCUS和$EN_SETFOCUS 切换显示
 楼主| 发表于 2017-9-12 16:46:00 | 显示全部楼层
回复 37# yamakawa

哈  測試的   稍微修改了一下 就發了  沒想到忘了拿掉 Opt("GUIOnEventMode", 1)
发表于 2017-9-12 16:53:21 | 显示全部楼层
回复 42# kk_lee69


    其实你说的listview自绘那个有点像我用的两个input控件,listview可以相应custdraw消息,所以可以在上面贴一层画布,然后在上面随便写我们要的东西,但是input没有,所以我就拿另外一个input放那上面,然后在这个input上写你要的东西。。。原理来说不是一样的么?这样你以后写入数据库什么都不用改动,,因为原来那个input只是被隐藏了。。上面的数据其实都在
发表于 2017-9-15 14:11:09 | 显示全部楼层
回复 36# kk_lee69

我测试下来GUIGetMsg对Input控件只响应了$EN_CHANGE事件。失去焦点时,并不会弹出你的测试对话框。
发表于 2017-9-15 14:13:19 | 显示全部楼层
回复 43# yamakawa
我的理解是我们在尝试一题多解,探索下不同的技术。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-3-29 07:38 , Processed in 0.071997 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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