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

Project1

 找回密码
 注册会员
搜索
查看: 11335|回复: 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
星屑
50
在线时间
93 小时
注册时间
2008-5-16
帖子
745
2
发表于 2008-7-10 03:52:09 | 只看该作者
哇.这输入法不错啊,大力支持{/qiang}
不过我发现了个问题
就是打字的时候,
我打完一个 “我” 字
没有显示出来
然后等我在随便打一个字后 比如说我打了 “是”
但是显示的是“我”,我在随便打一个字
才显示 “是“跟不上顺序
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

3
发表于 2009-6-12 08:00:00 | 只看该作者
话说比起以往的有什么优点吗?
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

4
发表于 2008-7-10 04:27:31 | 只看该作者
以下引用越前リョーマ于2008-7-9 20:09:00的发言:

话说比起以往的有什么优点吗?

请不要问如此无聊的问题 {/gg}
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

5
发表于 2008-7-10 04:32:10 | 只看该作者

CreateWindowEx 阿
和我想的一样,但是不知道为什么我总是无法生成窗口
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

6
发表于 2008-7-10 05:39:28 | 只看该作者
以下引用yangff于2008-7-9 20:27:31的发言:


以下引用越前リョーマ于2008-7-9 20:09:00的发言:

话说比起以往的有什么优点吗?


请不要问如此无聊的问题  

如果一点优点都没有的话为什么要写呢……
节省体积?
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

7
发表于 2008-7-10 06:00:56 | 只看该作者
以下引用越前リョーマ于2008-7-9 21:39:28的发言:


以下引用yangff于2008-7-9 20:27:31的发言:


以下引用越前リョーマ于2008-7-9 20:09:00的发言:

话说比起以往的有什么优点吗?


请不要问如此无聊的问题  


如果一点优点都没有的话为什么要写呢……
节省体积?

俄。。。
风吗你不相及/。
节省体积?
搞笑。。。
lz的思路就像你往6r的回复框里输入东西 {/wx}
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

世界坑化协会

梦石
0
星屑
7812
在线时间
1563 小时
注册时间
2007-3-13
帖子
5542

极短23参与极短21参与开拓者贵宾第一届化妆舞会最佳服饰奖

8
发表于 2008-7-10 06:12:55 | 只看该作者
没啥~很支持~~就是LZ的头像吓到我了~
你的肩膀上有肩周炎~♪  秒懂  ☚   \没有
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

9
发表于 2008-7-10 06:59:51 | 只看该作者
话说哪里免dll了... ...
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

10
发表于 2008-7-10 23:01:43 | 只看该作者
以下引用link006007于2008-7-9 22:59:51的发言:

话说哪里免dll了... ...

实话。。。。
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 06:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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