这个插入字符功能如何实现(50分)

  • 主题发起人 主题发起人 boby
  • 开始时间 开始时间
B

boby

Unregistered / Unconfirmed
GUEST, unregistred user!
在应用程序中为了使用户输入方便,我单独做了一个插入字符的form,上有一个grid,
里面包含针对应用的常用而键盘上无法直接输入的字符,就是word中插入字符功能中的小
部分字符,但是如何做到象word一样,点插入,就能将字符插入光标所在的地方,在我的
应用程序中,接受输入的无非是edit,memo等,在输入过程中,随时都有可能要调出插入
字符的窗口,调出该窗口后应该如何记住刚才光标所在的地方而正确插入所选的字符呢?
 
edit1.selstart就是光标所在位置,
用一个全局变量记录一下就行了。
 
假设你得form1上又memo1,form2上有grid,那么在form2中调form1.memo1.xxx行了呀!
或者在show form2之前用以全局变量保存光标位置
 
向TRichEdit中输入“★●◆■▲※♂♀√∵∴”等特殊符号
procedure TForm1.RichEdit1KeyDown(...);
const
s: array ['a'..'k'] of string[2] =
('★', '●', '◆', '■', '▲', '※', '♂', '♀', '√', '∵', '∴');
begin
if Key in ['a'..'k'] then begin
Key := #0;
RichEdit1.Perform(WM_CHAR, Ord(s[Key][1]), 0);
RichEdit1.Perform(WM_CHAR, Ord(s[Key][2]), 0);
end;
end;
 
但是在调出插入字符窗口前,用户在信息录入窗体中光标如果在一个edit或memo上,比如说
已经输入内容abcde ,但要在c和d之间插入字符,我怎么能够知道光标落在c和d之间
 
比如:你双击那个GRID的单元格的时候,可以将它的内容放入剪切板里,直接粘在你的输入
窗体的当前控件里,这个是可以实现的。
 
但是那样应该只能将字符添加到edit或memo中已有字符串的尾部,而不能插入到字符串的中间
 

对于memo:
SendMessage(Memo1.Handle,EM_LINEFROMCHAR, Memo1.SelStart,0)返回行号
SendMessage(Memo1.Handle, EM_LINEINDEX, lineNumber, 0)返回列号
剩下的就不用我说了吧。
 
看看能否满足你的要求.
TCustomEdit.SetSelTextBuf(PChar(Text));
 
后退
顶部