全民打字爆改版

光庆 1月前 379

抄袭网友AMO的创意,用godking.paint库重写了一下,主要是解决输入字符时界面闪烁问题。

简单版对按键的识别进行了简单处理,还不是很全面,没有判断shift的情况,一般字符输入没问题了。

附件中的1.6版本的功能就比较完善了。


简单版:

Code AardioLine:147复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
    • import win.ui;
    • import console;
    • /*DSG{{*/
    • winform = win.form(text="全民打字高手1.4";right=615;bottom=470;bgcolor=0x4D582E;border="dialog frame";max=false)
    • winform.add({
    • next1={cls="plus";text="下一个字";left=16;top=8;right=592;bottom=48;bgcolor=0xF0FBFF;clipBk=false;color=0xFF0000;font=LOGFONT(h=-16;name='Consolas';weight=700);textPadding={top=7};z=1};
    • plus_key={cls="plus";left=16;top=272;right=596;bottom=447;background="\全民打字高手1.4\res\kb.bmp";repeat="tile";z=3};
    • plus_showkeys={cls="plus";left=16;top=56;right=596;bottom=256;bgcolor=0xFFFFFF;z=2}
    • })
    • /*}}*/
    • import godking.paint
    • var getKeysRect=function(){
    • var keysRect,w,h={},40,35;
    • var str="`1234567890-=";
    • var x1,y1=0,0;
    • for(i=1;#str;1){
    • keysRect[str[[i]]]=::RECT(x1+w*(i-1),y1,x1+w*i,y1+h);
    • }
    • str="qwertyuiop[]\";
    • x1,y1=60,35;
    • for(i=1;#str;1){
    • keysRect[str[[i]]]=::RECT(x1+w*(i-1),y1,x1+w*i,y1+h);
    • }
    • str="asdfghjkl;'";
    • x1,y1=70,70;
    • for(i=1;#str;1){
    • keysRect[str[[i]]]=::RECT(x1+w*(i-1),y1,x1+w*i,y1+h);
    • }
    • str="zxcvbnm,./";
    • x1,y1=90,105;
    • for(i=1;#str;1){
    • keysRect[str[[i]]]=::RECT(x1+w*(i-1),y1,x1+w*i,y1+h);
    • }
    • var t1 = /***`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./***/
    • var t2 = /***~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?***/
    • for(i=1;#t1;1){
    • keysRect[t2[[i]]] = keysRect[t1[[i]]];
    • }
    • keysRect['\n']=::RECT(510,70,580,105);
    • keysRect[" "]=::RECT(180,140,400,175);
    • return keysRect;
    • }
    • var keysRect = getKeysRect();
    • var bmp = ..gdip.bitmap("\res\kb.bmp");
    • var bk = bmp.clone(0,0,580,175);
    • var fg = bmp.clone(0,175,580,175);
    • bmp.dispose();
    • var text = "python print input float int if elif else
    • range list append pop insert sort reverse remove
    • take me to your heart, take me to your soul
    • give me your hand before I am old
    • show me what love is haven't got a clue
    • show me that wonders can be true
    • they say nothing lasts forever, we're only here today
    • love is now or never! bring me far away. well done!"
    • var inputkeys = {};
    • var showKeyPos=function(){
    • var key = text[[#inputkeys+1]]
    • winform.next1.text = "下一个:" ++ key;
    • if !keysRect[key] {
    • var bmp = winform.plus_key.setForeground(bk.clone());
    • if bmp bmp.dispose();
    • return ;
    • }
    • var paint = godking.paint.fromBitmap(bk.clone());
    • paint.clip.set(keysRect[key],0/*半径*/,0/*_GdipCombineMode*/);
    • paint.drawImage( 0/*x1*/,0/*y1*/,0/*x2*/,0/*y2*/,fg/*图片*/,/*透明度或图片属性*/,/*保持比例*/);
    • var bmp = winform.plus_key.setForeground(paint.bitmap.clone());
    • if bmp bmp.dispose();
    • paint.close();
    • }
    • var showkeys = function(){
    • var line,pos = 0,0;
    • var paint = godking.paint(580,200);
    • var font = ::LOGFONT(name="宋体";h=16;color=0xFF888888;brush=null);
    • var fontred = ::LOGFONT(name="宋体";h=16;color=0xFFFF0000;brush=null);
    • var fontgreen = ::LOGFONT(name="宋体";h=16;color=0xFF00FF00;brush=null);
    • var w,h = 10,18;
    • var inputnum = #inputkeys;
    • var returnchar = "↲";
    • for(i=1;#text;1){
    • var char = text[[i]];
    • if char === '\n' char=returnchar;
    • var rect = ::RECT(pos*w,line*h,(pos+1)*w+2,(line+1)*h);
    • paint.drawText( rect, char, font,0/*格式*/,0/*水平*/,0/*垂直*/,false/*截短*/)
    • if i<=inputnum {
    • var inputchar = inputkeys[[i]];
    • if inputchar === '\n' inputchar=returnchar;
    • if inputchar===char {
    • paint.drawText( rect,inputchar,fontgreen,0/*格式*/,0/*水平*/,0/*垂直*/,false/*截短*/)
    • } else {
    • paint.fillRect( rect /*绘制范围RECT*/,0xFF0000FF)
    • paint.drawText( rect,inputchar,fontred,0/*格式*/,0/*水平*/,0/*垂直*/,false/*截短*/)
    • }
    • }
    • if char = returnchar {
    • line++;
    • pos=0;
    • } else {
    • pos++;
    • }
    • }
    • winform.plus_showkeys.setForeground(paint.bitmap.clone());
    • paint.close();
    • }
    • import key
    • var pushkey = function(wParam,lParam){
    • if wParam>222 or wParam==0x10/*_VK_SHIFT*/ or wParam==0x12/*_VK_ALT*/ or wParam== 0x11/*_VK_CTRL*/ return ;
    • if wParam === 8 {
    • table.pop(inputkeys);
    • } elseif wParam===10 {
    • table.push(inputkeys,'\n')
    • } else {
    • var char = key.VK_NAME[wParam]
    • if !char return ;
    • if char == "QUOTE" char="'";
    • elseif char == "SPACE" char=' ';
    • elseif #char>1 return ;
    • else char=string.lower(char);
    • table.push(inputkeys,char)
    • }
    • showkeys();
    • showKeyPos();
    • }
    • winform.onOk = function(){
    • pushkey(10);
    • }
    • winform.wndproc = function(hwnd,message,wParam,lParam){
    • if message === 0x100/*_WM_KEYDOWN*/ {
    • pushkey(wParam,lParam);
    • }
    • }
    • showkeys()
    • showKeyPos()
    • winform.show()
    • return win.loopMessage();

    优化进阶版:

    Code AardioLine:175复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
    • import win.ui;
    • import console;
    • /*DSG{{*/
    • winform = win.form(text="全民打字高手1.4";right=615;bottom=470;bgcolor=5068846;border="dialog frame";max=false)
    • winform.add(
    • next1={cls="plus";text="下一个字";left=16;top=8;right=592;bottom=48;bgcolor=15793151;clipBk=false;color=16711680;font=LOGFONT(h=-16;name='Consolas';weight=700);textPadding={top=7};z=1};
    • plus_key={cls="plus";left=16;top=272;right=596;bottom=447;background="\全民打字高手1.4\res\kb.bmp";repeat="tile";z=3};
    • plus_showkeys={cls="plus";left=16;top=56;right=596;bottom=256;foreRepeat="tile";z=2}
    • )
    • /*}}*/
    • import godking.paint
    • //定义键盘按键对应的字符
    • var getKeysRect=function(){
    • var keysRect,w,h={},40,35;
    • var str="`1234567890-=";
    • var x1,y1=0,0;
    • for(i=1;#str;1){
    • keysRect[str[[i]]]=::RECT(x1+w*(i-1),y1,x1+w*i,y1+h);
    • }
    • str="qwertyuiop[]\";
    • x1,y1=60,35;
    • for(i=1;#str;1){
    • keysRect[str[[i]]]=::RECT(x1+w*(i-1),y1,x1+w*i,y1+h);
    • }
    • str="asdfghjkl;'";
    • x1,y1=70,70;
    • for(i=1;#str;1){
    • keysRect[str[[i]]]=::RECT(x1+w*(i-1),y1,x1+w*i,y1+h);
    • }
    • str="zxcvbnm,./";
    • x1,y1=90,105;
    • for(i=1;#str;1){
    • keysRect[str[[i]]]=::RECT(x1+w*(i-1),y1,x1+w*i,y1+h);
    • }
    • var t1 = /***`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./***/
    • var t2 = /***~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?***/
    • for(i=1;#t1;1){
    • keysRect[t2[[i]]] = keysRect[t1[[i]]];
    • }
    • keysRect['\n']=::RECT(510,70,580,105);
    • keysRect[" "]=::RECT(180,140,400,175);
    • return keysRect;
    • }
    • var keysRect = getKeysRect();
    • //处理键盘图片
    • var bmp = ..gdip.bitmap("\kb.bmp");
    • var bk = bmp.clone(0,0,580,175);
    • var fg = bmp.clone(0,175,580,175);
    • bmp.dispose();
    • //定义要输入的文字
    • var text = "python print input float int if elif else
    • range list append pop insert sort reverse remove
    • take me to your heart, take me to your soul
    • give me your hand before I am old
    • show me what love is haven't got a clue
    • show me that wonders can be true
    • they say nothing lasts forever, we're only here today
    • love is now or never! bring me far away. well done!"
    • //预处理全部文字底图及每个文字区域
    • var dpi = godking.paint.getDpi();
    • var font = ::LOGFONT(name="宋体";h=16*dpi;bold=true;color=0xFF888888;brush=null);
    • var fontred = ::LOGFONT(name="宋体";h=16*dpi;bold=true;color=0xFFFF0000;brush=null);
    • var fontgreen = ::LOGFONT(name="宋体";h=16*dpi;bold=true;color=0xFF00FF00;brush=null);
    • var getInitBitmapAndRects = function(text){
    • var rects = {};
    • var line,pos = 0,0;
    • var paint = godking.paint(580*dpi,200*dpi);
    • paint.clear(0xFFFFFFFF);
    • paint.textAntiAlias = true
    • var w,h = 10*dpi,18*dpi;
    • var returnchar = "↲";
    • for(i=1;#text;1){
    • var char = text[[i]];
    • if char === '\n' char=returnchar;
    • var rect = ::RECT(pos*w,line*h,(pos+1)*w+2*dpi,(line+1)*h);
    • table.push(rects,rect);
    • paint.drawText( rect, char, font,0/*格式*/,0/*水平*/,0/*垂直*/,false/*截短*/)
    • if char = returnchar {
    • line++;
    • pos=0;
    • } else {
    • pos++;
    • }
    • }
    • var bmp = paint.bitmap.clone();
    • paint.close();
    • return bmp,rects;
    • }
    • var textbmp,rects = getInitBitmapAndRects(text);
    • var inputkeys = {};
    • //处理下一字符按键显示界面
    • var KeyPosPaint = godking.paint.fromBitmap(bk.clone());
    • KeyPosPaint.saveBitmapToCache()
    • var showKeyPos=function(){
    • var key = text[[#inputkeys+1]]:"";
    • winform.next1.text = "下一个:" ++ key;
    • if !keysRect[key] {
    • return winform.plus_key.setForeground(bk);
    • }
    • KeyPosPaint.loadBitmapFromCache()
    • KeyPosPaint.clip.set(keysRect[key],0/*半径*/,0/*_GdipCombineMode*/);
    • KeyPosPaint.drawImage( 0/*x1*/,0/*y1*/,0/*x2*/,0/*y2*/,fg/*图片*/,/*透明度或图片属性*/,/*保持比例*/);
    • winform.plus_key.setForeground(KeyPosPaint.bitmap);
    • }
    • //处理输入字符显示界面
    • var keyspaint = godking.paint.fromBitmap(textbmp.clone());
    • keyspaint.textAntiAlias = true
    • winform.plus_showkeys.foreground = keyspaint.bitmap;
    • var returnchar = "↲";
    • var showkeys = function(delete){
    • var i = #inputkeys;
    • if delete {
    • i++;
    • var char = text[[i]];
    • keyspaint.fillRect( rects[i] /*绘制范围RECT*/,0xFFFFFFFF);
    • keyspaint.drawText( rects[i],char,font,0/*格式*/,0/*水平*/,0/*垂直*/,false/*截短*/);
    • } elseif i {
    • var char = text[[i]];
    • if char === '\n' char=returnchar;
    • var inputchar = inputkeys[[i]];
    • if inputchar === '\n' inputchar=returnchar;
    • if inputchar===char {
    • keyspaint.drawText( rects[i],inputchar,fontgreen,0/*格式*/,0/*水平*/,0/*垂直*/,false/*截短*/);
    • } else {
    • keyspaint.fillRect( rects[i] /*绘制范围RECT*/,0xFF0000FF);
    • keyspaint.drawText( rects[i],inputchar,fontred,0/*格式*/,0/*水平*/,0/*垂直*/,false/*截短*/);
    • }
    • }
    • winform.plus_showkeys.redraw();
    • }
    • //处理按键消息
    • import key
    • var pushkey = function(wParam){
    • if wParam>222 or wParam==0x10/*_VK_SHIFT*/ or wParam==0x12/*_VK_ALT*/ or wParam== 0x11/*_VK_CTRL*/ return ;
    • if wParam === 8 {
    • table.pop(inputkeys);
    • return showkeys(true):showKeyPos();
    • } elseif #inputkeys=#text {
    • return ;
    • } elseif wParam===10 {
    • table.push(inputkeys,'\n')
    • } else {
    • var char = key.VK_NAME[wParam]
    • if !char return ;
    • if char == "QUOTE" char="'";
    • elseif char == "SPACE" char=' ';
    • elseif #char>1 return ;
    • else char=string.lower(char);
    • table.push(inputkeys,char)
    • }
    • showkeys();
    • showKeyPos();
    • }
    • winform.onOk = function(){
    • pushkey(10);
    • }
    • winform.wndproc = function(hwnd,message,wParam,lParam){
    • if message === 0x100/*_WM_KEYDOWN*/ {
    • pushkey(wParam);
    • }
    • }
    • //初始化界面
    • showkeys()
    • showKeyPos()
    • winform.show()
    • return win.loopMessage();


    上传的附件:
    最新回复 (0)
    返回