Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 16805|回复: 13

lazarus汉字输入解决方案(相对完美)

[复制链接]

该用户从未签到

发表于 2009-8-3 13:56:22 | 显示全部楼层 |阅读模式
(请看3楼相对完美的解决方案。)
1,用lazarus打开“SourceEditor.pp”(在/usr/share/lazarus/ide下,也可能因为安装版本不同有所差异)。
2,在界面下方放下一个memo,顶端放下两个button(自己取名和加caption),适当安排界面(比如把memo1.align设置成albottom等,和调整按钮位置,还可以放下一个splitter,align也设置成albottom等,用于调整memo的高度)
3,分别双击两个button,分别输入以下语句:
 
  1. SourceNotebook.Memo1.Lines.Clear;
  2.   SourceNotebook.Memo1.Lines.Assign(SourceNotebook.GetActiveEditor.Lines);
复制代码
  1. if application.MessageBox('将要覆盖源代码!按“确定”继续。','请确定',mb_okcancel)=idok then
  2.   begin
  3.     SourceNotebook.GetActiveEditor.Lines.Clear;     
  4.    SourceNotebook.GetActiveEditor.Lines.Assign(SourceNotebook.Memo1.Lines);
  5.   end;
复制代码

还可以再加上一个字体选择对话框,和第三个按钮,加上以下语句:
  1.   if SourceNotebook.FD.Execute then
  2.   SourceNotebook.Memo1.Font.Assign(SourceNotebook.FD.Font);
复制代码
作用是调整memo的字体和字号。
4,重新编译lazarus。
这样,SourceEditor窗口多出来两个按钮和一个memo,这个memo里面可以输入汉字。

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

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x

评分

参与人数 1威望 +5 收起 理由
猫工 + 5 优秀文章

查看全部评分

回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-8-6 08:28:01 | 显示全部楼层
昨天又研究了一个新方案:按钮对应语句写成:
  1. procedure TSourceNotebook.Button4Click(Sender: TObject);
  2. var ss,ss1,ss2:ansistring;
  3.     i,i1,i2:integer;
  4. begin
  5.   for i:=1 to SourceNotebook.Memo1.Lines.Count do
  6.   begin
  7.     ss:=SourceNotebook.Memo1.Lines[i-1];
  8.     ss1:=ss[1]+ss[2]+ss[3]+ss[4]+ss[5];
  9.     i2:=strtoint(ss1)-1;
  10.     ss2:='';
  11.     for i1:=6 to length(ss) do
  12.        ss2:=ss2+ss[i1];
  13.     SourceNotebook.GetActiveEditor.Lines[i2]:=SourceNotebook.GetActiveEditor.Lines[i2]+ss2
  14.   end;
  15. end;   
复制代码

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

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-8-9 10:38:31 | 显示全部楼层
更完美的方案:
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);
在这一行下面加上一行:
  1. procedure InsertKeyword(const AKeyWord: string);
复制代码

f3继续找,会找到这么一个procedure:
procedure TSourceEditor.InsertCVSKeyword(const AKeyWord: string);
begin
  if ReadOnly then Exit;
  FEditor.InsertTextAtCaret('$'+AKeyWord+'$'+LineEnding);
end;
复制他们,在下面粘贴,改成:
  1. procedure TSourceEditor.InsertKeyword(const AKeyWord: string);
  2. begin
  3.   if ReadOnly then Exit;
  4.   FEditor.InsertTextAtCaret(AKeyWord);
  5. end;
复制代码

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

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

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

使用道具 举报

该用户从未签到

发表于 2009-9-12 17:29:04 | 显示全部楼层
引用第1楼ljj2009于2009-08-06 08:28发表的  :
昨天又研究了一个新方案:按钮对应语句写成:
[code]procedure TSourceNotebook.Button4Click(Sender: TObject);
var ss,ss1,ss2:ansistring;
    i,i1,i2:integer;
begin
.......
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2009-9-12 17:29:15 | 显示全部楼层
引用第2楼ljj2009于2009-08-09 10:38发表的  :
更完美的方案:
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”,会先找到这么一行:

.......
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-10-21 22:02:38 | 显示全部楼层
这个方法非常好,我在ubuntu10.4下面成功了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-1-21 17:23:13 | 显示全部楼层
这个方法非常好~!thx
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-1-26 22:51:45 | 显示全部楼层
我打开的只是源码,怎么放面板panel?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-6-30 17:16:51 | 显示全部楼层

回 7楼(wylton) 的帖子

按F12不就是窗体了吗
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-8-2 00:23:09 | 显示全部楼层
楼主的方法确实不错,这是目前能找到的完美解决方法,谢谢。我在ubuntu11.04上实现了。
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 09:39 , Processed in 0.036975 second(s), 11 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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