设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 11446|回复: 28
打印 上一主题 下一主题

免DLL的输入法``

 关闭 [复制链接]

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

跳转到指定楼层
1
发表于 2008-7-10 03:47:03 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
大概就酱紫...

圆一下以前的想法..哈....

参考于.
http://rpg.blue/viewthread.php?t ... D7%2D9+19%3A46%3A04

  1. #------------------------------------------------------------------------------
  2. # Moonlight INN
  3. # [url]http://cgi.members.interq.or.jp/aquarius/rasetsu/[/url]
  4. # RaTTiE
  5. # [email][email protected][/email]
  6. #------------------------------------------------------------
  7. # EasyConv::s2u(text) : S-JIS -> UTF-8
  8. # EasyConv::u2s(text) : UTF-8 -> S-JIS
  9. #==============================================
  10. module EasyConv
  11. # API梡掕悢掕媊
  12.    CP_ACP = 0
  13.    CP_UTF8 = 65001

  14. #--------------------------------------------------------------------------
  15. # 仠 S-JIS -> UTF-8
  16. #--------------------------------------------------------------------------
  17. def s2u(text)
  18. # API掕媊
  19.    m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  20.    w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')

  21. # S-JIS -> Unicode
  22.    len = m2w.call(CP_ACP, 0, text, -1, nil, 0);
  23.    buf = "\0" * (len*2)
  24.    m2w.call(CP_ACP, 0, text, -1, buf, buf.size/2);

  25. # Unicode -> UTF-8
  26.    len = w2m.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil);
  27.    ret = "\0" * len
  28.    w2m.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil);
  29.    
  30.    return ret
  31. end
  32. # module_function偲偟偰岞奐
  33. module_function :s2u
  34. #--------------------------------------------------------------------------
  35. # 仠 UTF-8 -> S-JIS
  36. #--------------------------------------------------------------------------
  37. def u2s(text)
  38. # API掕媊
  39.    m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  40.    w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')

  41. # UTF-8 -> Unicode
  42.    len = m2w.call(CP_UTF8, 0, text, -1, nil, 0);
  43.    buf = "\0" * (len*2)
  44.    m2w.call(CP_UTF8, 0, text, -1, buf, buf.size/2);

  45. # Unicode -> S-JIS
  46.    len = w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil);
  47.    ret = "\0" * len
  48.    w2m.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil);
  49.    
  50.    return ret
  51. end
  52. # module_function偲偟偰岞奐
  53. module_function :u2s
  54. end

  55. #========================================
  56. # 本脚本来自[url]www.66rpg.com[/url]
  57. #========================================





  58. #==============================================================================
  59. # ■ TextBox
  60. #------------------------------------------------------------------------------
  61. #  设置输入窗口
  62. #==============================================================================
  63. class TextBox
  64. # 获取程序模块
  65. GetModuleHandle = Win32API.new("kernel32", "GetModuleHandle", "p", "l")
  66. # 创建窗口
  67. CreateWindowEx = Win32API.new("user32", "CreateWindowExA", "lppllllllllp", "l")
  68. # 销毁窗口
  69. DestroyWindow = Win32API.new("user32", "DestroyWindow", "l", "l")
  70. # 控制窗口显示
  71. ShowWindow = Win32API.new("user32", "ShowWindow", "ll", "l")
  72. # 设置输入焦点
  73. SetFocus = Win32API.new("user32", "SetFocus", "l", "l")
  74. # 获取活动的窗口
  75. GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, "l")
  76. # 获取控件文字
  77. GetWindowText = Win32API.new("user32", "GetWindowTextA", "lpl", "l")
  78. # 获取控件文字长度
  79. GetWindowTextLength = Win32API.new("user32", "GetWindowTextLength", "l", "l")
  80. # 设置控件文字
  81. SetWindowTextA = Win32API.new("user32", "SetWindowTextA", "lp", "l")
  82. # 刷新窗口
  83. UpdateWindow = Win32API.new("user32", "UpdateWindow", "l", "l")
  84. # 常数
  85. WS_CHILD = 0x40000000
  86. #--------------------------------------------------------------------------
  87. # ● 初始化
  88. #--------------------------------------------------------------------------
  89. def initialize(w, h)
  90.     @wnd = CreateWindowEx.call(1, "Edit", "", WS_CHILD, 0,0,w,h,GetActiveWindow.call,1,GetModuleHandle.call(nil),1)
  91.     SetFocus.call(@wnd)
  92.     ShowWindow.call(@wnd,0)
  93. end
  94. #--------------------------------------------------------------------------
  95. # ● 释放窗口
  96. #--------------------------------------------------------------------------
  97. def dispose
  98.     DestroyWindow.call(@wnd)
  99. end
  100. #--------------------------------------------------------------------------
  101. # ● 获取txt
  102. #--------------------------------------------------------------------------
  103. def txt
  104.     length = GetWindowTextLength.call(@wnd)
  105.     lpstring = Array.new(length+1).pack("C*")
  106.     GetWindowText.call(@wnd, lpstring, length)
  107.     lpstring.delete!("\0")
  108.     t = EasyConv::s2u(lpstring)
  109.     return t
  110. end
  111. #--------------------------------------------------------------------------
  112. # ● 设置txt
  113. #--------------------------------------------------------------------------
  114. def set_txt(txt)
  115.     str = EasyConv::u2s(txt)
  116.     SetWindowTextA.call(@wnd, str)
  117. end
  118. #--------------------------------------------------------------------------
  119. # ● 刷新
  120. #--------------------------------------------------------------------------
  121. def update
  122.     UpdateWindow.call(@wnd)
  123.     SetFocus.call(@wnd)
  124. end
  125. end

  126. t = TextBox.new(320, 24)
  127. v = Viewport.new(160, 228, 320 , 24)
  128. sprite = Sprite.new(v)
  129. sprite.bitmap = Bitmap.new(320,24)
  130. sprite.bitmap.fill_rect(0,0,320,24,Color.new(0,0,0))
  131. sprite.bitmap.fill_rect(1,1,318,22,Color.new(255,255,255))
  132. cou = Sprite.new(v)
  133. cou.bitmap = Bitmap.new(1, 22)
  134. cou.bitmap.fill_rect(0, 0, 1, 22, Color.new(0,255,255))
  135. cou.y = 1
  136. s = t.txt
  137. loop {
  138. Graphics.update
  139. Input.update
  140. t.update
  141. cou.visible = Time.now.sec % 2 == 0
  142. if s != t.txt
  143. cou.visible = true
  144. s = t.txt
  145. sprite.bitmap.clear
  146. sprite.bitmap.font.size = 18
  147. sprite.bitmap.font.color.set(0,0,0)
  148. sprite.bitmap.fill_rect(0,0,320,24,Color.new(0,0,0))
  149. sprite.bitmap.fill_rect(1,1,318,22,Color.new(255,255,255))
  150. sprite.bitmap.draw_text(0,0,320,24,s)
  151. cou.x = 1 + sprite.bitmap.text_size(s).width
  152. end
  153. }

复制代码
-.-

Lv1.梦旅人

梦石
0
星屑
120
在线时间
68 小时
注册时间
2007-12-16
帖子
75
29
发表于 2009-6-3 02:20:12 | 只看该作者
以下引用★_茄孓于2008-7-9 19:52:09的发言:

哇.这输入法不错啊,大力支持
不过我发现了个问题
就是打字的时候,
我打完一个 “我” 字
没有显示出来
然后等我在随便打一个字后 比如说我打了 “是”
但是显示的是“我”,我在随便打一个字
才显示 “是“跟不上顺序

把TextBox中的txt方法用下面的取代就解決了
  1. #--------------------------------------------------------------------------
  2. # ● 获取txt
  3. #--------------------------------------------------------------------------
  4. def txt
  5.     length = GetWindowTextLength.call(@wnd) + 1
  6.     lpstring = "\000" * length
  7.     GetWindowText.call(@wnd, lpstring, length)
  8. #    lpstring.delete!("\000")
  9.     t = EasyConv::s2u(lpstring)
  10.     return t.delete!("\000")
  11. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-8-23
帖子
539
28
发表于 2008-8-6 05:00:30 | 只看该作者
...现在就在用LZ的ARPG系统,还做出了伪·同伴系统和彩虹神剑超动画显示版(简称彩超……)
横版卷轴ARPG制作中... 系统80% 素材95% 剧情1%.... 有脚本问题随时吼我- -(被T出)
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-4
帖子
34
27
发表于 2008-8-4 23:20:19 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
1 小时
注册时间
2008-2-12
帖子
56
26
发表于 2008-7-25 22:07:22 | 只看该作者
怎样才能使输入的东西变成角色名字啊???
请认可我的答案,不要自主结贴就走啊
回复 支持 反对

使用道具 举报

Lv1.梦旅人

逃兵

25
发表于 2008-7-15 18:33:57 | 只看该作者
UTF16霸道!!!
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
10362
在线时间
4446 小时
注册时间
2005-10-22
帖子
7006

开拓者贵宾

24
发表于 2008-7-15 07:18:53 | 只看该作者
以下引用Morin2008于2008-7-14 7:40:33的发言:

我第一眼看这个脚本就发现有一些不太适合中国人使用的地方:
我们中国大陆人用的简体中文是GB2312编码的,而脚本里面的编码转换定义母码却是Shift-JIS(日文编码)[脚本里明文写着呢]。
神思最好自己改改看,否则估计会出现一些譬如乱码等问题。


[本贴由作者于 2008-7-14 7:41:07 最后编辑]


重点是UNICODE 转到 UTF8....
{/lh}
呃...其实石器时代的输入法也用了这个转码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
100
在线时间
11 小时
注册时间
2007-7-1
帖子
327
23
发表于 2008-7-14 20:29:56 | 只看该作者
请问神思可以把这个输入法和人物取名整合一下吗?这样就有用武之地了。
我看来也回来吧~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
100
在线时间
11 小时
注册时间
2007-7-1
帖子
327
22
发表于 2008-7-14 20:23:27 | 只看该作者
虽然不怎么懂,还是进来支持一个~
我看来也回来吧~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

逃兵

21
发表于 2008-7-14 03:37:56 | 只看该作者
赞!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-10 11:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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