当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [原创]lazarus汉字输入相对完美解决方案
帖子发表于 : 2009-08-03 14:02 
头像

注册: 2007-09-16 8:29
帖子: 14252
送出感谢: 172
接收感谢: 271
(请看4楼相对完美的方案)

lazarus汉字输入临时解决方案
现在lazarus(类似delphi的pascal ide)不支持汉字输入,特别是Source Editor窗口,根本打不开输入法。
现在有一个临时解决方案:
1,用lazarus打开“SourceEditor.pp”(在/usr/share/lazarus/ide下,也可能因为安装版本不同有所差异)。
2, 在界面下方放下一个memo,顶端放下两个button(自己取名和加caption),适当安排界面(比如把memo1.align设置成 albottom等,和调整按钮位置,还可以放下一个splitter,align也设置成albottom等,用于调整memo的高度)
3,分别双击两个button,分别输入以下语句:

代码:
  SourceNotebook.Memo1.Lines.Clear;
   SourceNotebook.Memo1.Lines.Assign(SourceNotebook.GetActiveEditor.Lines);


代码:
 if application.MessageBox('将要覆盖源代码!按“确定”继续。','请确定',mb_okcancel)=idok then
  begin
    SourceNotebook.GetActiveEditor.Lines.Clear;   
   SourceNotebook.GetActiveEditor.Lines.Assign(SourceNotebook.Memo1.Lines);
  end;



还可以再加上一个字体选择对话框,和第三个按钮,加上以下语句:
代码:
  if SourceNotebook.FD.Execute then
       SourceNotebook.Memo1.Font.Assign(SourceNotebook.FD.Font);


作用是调整memo的字体和字号。
4,重新编译lazarus。
这样,SourceEditor窗口多出来两个按钮和一个memo,这个memo里面可以输入汉字。

开发时先不输入汉字,只写指令部分,需要输入汉字的地方先空着。写完指令部分,点击第一个按钮把程序代码从上面全部拷贝到下面,然后补充进汉字部分,再点击第二个按钮,把指令从下面拷贝回上面去,即可。

有个缺陷:因为lazarus整体还不支持输入法,我用的fictx输入法,直接ctrl-空格切换输入状态的话,按下一个字母,输入法里面跳出几个字母来这个问题比较严重,如果用鼠标点输入法切换到汉字输入状态则基本正常。

(今天编程误按了第二个按钮,结果把上面的代码覆盖乱了,所以我改进了一下,加了一个提示。)


附件:
2.png
2.png [ 49.68 KiB | 被浏览 1247 次 ]



_________________
闻到死太贵, 麦克价更高。 有了笨笨兔, 二者皆可抛。
+ 我的六轮折腾
+ 折腾6轮的结果(对40余种WM的测试和分析,多种DE和WM并存的方案)
+ 折腾的中间成果:可以独立运行的一个Wharf(图标化的启动菜单)
+ 强烈推荐----折腾的终极成果:一个自己开发的DE环境
+ 签名空闲链接位置招租
页首
 用户资料  
 
2 楼 
 文章标题 : Re: [原创]lazarus汉字输入临时解决方案
帖子发表于 : 2009-08-04 16:00 

注册: 2008-01-28 18:05
帖子: 17
送出感谢: 0 次
接收感谢: 0 次
我是来支持你的。我的9。04也装了lazarus。 :em09


页首
 用户资料  
 
3 楼 
 文章标题 : Re: [原创]lazarus汉字输入临时解决方案
帖子发表于 : 2009-08-06 8:34 
头像

注册: 2007-09-16 8:29
帖子: 14252
送出感谢: 172
接收感谢: 271
昨天又研究了一个新方案:按钮对应语句写成:
代码:
procedure TSourceNotebook.Button4Click(Sender: TObject);
var ss,ss1,ss2:ansistring;
    i,i1,i2:integer;
begin
  for i:=1 to SourceNotebook.Memo1.Lines.Count do
  begin
    ss:=SourceNotebook.Memo1.Lines[i-1];
    ss1:=ss[1]+ss[2]+ss[3]+ss[4]+ss[5];
    i2:=strtoint(ss1)-1;
    ss2:='';
    for i1:=6 to length(ss) do
       ss2:=ss2+ss[i1];
    SourceNotebook.GetActiveEditor.Lines[i2]:=SourceNotebook.GetActiveEditor.Lines[i2]+ss2
  end;
end;   


实际用时,memo1内写成类似“00001测试”这样的内容,前五位是上面的行号,后面的汉字是内容。可以写多行。
点击按钮以后,汉字会自动添加到源代码指定行的末尾。


_________________
闻到死太贵, 麦克价更高。 有了笨笨兔, 二者皆可抛。
+ 我的六轮折腾
+ 折腾6轮的结果(对40余种WM的测试和分析,多种DE和WM并存的方案)
+ 折腾的中间成果:可以独立运行的一个Wharf(图标化的启动菜单)
+ 强烈推荐----折腾的终极成果:一个自己开发的DE环境
+ 签名空闲链接位置招租


页首
 用户资料  
 
4 楼 
 文章标题 : Re: [原创]lazarus汉字输入临时解决方案
帖子发表于 : 2009-08-09 10:26 
头像

注册: 2007-09-16 8:29
帖子: 14252
送出感谢: 172
接收感谢: 271
更完美的方案:
1,用lazarus打开“SourceEditor.pp”(在/usr/share/lazarus/ide下,也可能因为安装版本不同有所差异)。
2, 在界面下方放下一个panel(面板,.align设置成 albottom),面板里面放下一个memo,一个button(自己取名和加caption),适当安排界面(比如把memo1.align设置成 alclient等,按钮设置成alright)
3,源码里面ctrl-home,然后ctrl-f(查找),查找“InsertCVSKeyword”,会先找到这么一行:
引用:
procedure InsertCVSKeyword(const AKeyWord: string);

在这一行下面加上一行:
代码:
procedure InsertKeyword(const AKeyWord: string);


f3继续找,会找到这么一个procedure:
引用:
procedure TSourceEditor.InsertCVSKeyword(const AKeyWord: string);
begin
if ReadOnly then Exit;
FEditor.InsertTextAtCaret('$'+AKeyWord+'$'+LineEnding);
end;

复制他们,在下面粘贴,改成:
代码:
procedure TSourceEditor.InsertKeyword(const AKeyWord: string);
begin
  if ReadOnly then Exit;
  FEditor.InsertTextAtCaret(AKeyWord);
end;


这样,就给TSourceEditor增加了一个叫“InsertKeyword”的过程,作用是可以通过编程语句在光标所在位置添加指定字符串。

4,双击界面上新加的button,输入以下语句:
代码:
procedure TSourceNotebook.Button1Click(Sender: TObject);
var i:integer;
begin
  if SourceNotebook.Memo1.Lines.Count<=1 then
    SourceNotebook.GetActiveSE.InsertKeyword(SourceNotebook.Memo1.Lines[0])
  else
  begin
    for i := 1 to SourceNotebook.Memo1.Lines.Count do
      SourceNotebook.GetActiveSE.InsertKeyword(SourceNotebook.Memo1.Lines[i-1]+LineEnding);
  end;
  SourceNotebook.Memo1.Lines.Clear;
  SourceNotebook.FocusEditor;
end;


这样,需要输入汉字时转到下面输入,然后点一下按钮,就自动添到上面源程序光标所在位置,并且将输入焦点转到上面源程序里面。
终于相对圆满的解决了lazarus中文输入问题。


_________________
闻到死太贵, 麦克价更高。 有了笨笨兔, 二者皆可抛。
+ 我的六轮折腾
+ 折腾6轮的结果(对40余种WM的测试和分析,多种DE和WM并存的方案)
+ 折腾的中间成果:可以独立运行的一个Wharf(图标化的启动菜单)
+ 强烈推荐----折腾的终极成果:一个自己开发的DE环境
+ 签名空闲链接位置招租


页首
 用户资料  
 
5 楼 
 文章标题 : Re: [原创]lazarus汉字输入相对完美解决方案
帖子发表于 : 2009-08-15 11:58 
头像

注册: 2006-06-06 11:14
帖子: 125
地址: 四川成都
送出感谢: 0 次
接收感谢: 0 次
真的不错,顶一下楼主

以前从来没想到过增加代码的方式来修改编辑框(忘了开源的优势),这使我想到了编辑框编码的问题

有空了我也看看lazarus编辑框的代码,看能不能有所改变


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译