如何控制输入法中“选择文字”的提示框的位置。
努力偷懒 2009-05-24 12:47:37 如题所说的,我的意思就是,在输入法状态下点击a时,所提示选择“啊、阿、呵、吖.....”的这个提示框,是如何控制其出现的位置的?
就像edit、memo控件等,它会自动出现在光标的右边。
我现在出现的问题是,我整个窗体都不使用edit这些控件,就比如只有TForm控件,我直接在form里面控制其可以输入。输入的文字直接用form打印出来。现在的问题是,激活了输入法,其输入法的位置和我所显示的光标位置相差好远,我想随便控制这个输入法提示框所在的位置。看了好多API,都没找到我想实现的东西。下面是我如何直接在form中控制光标和控制form作类似编辑器的代码:
var
Form1: TForm1;
str: string;
x1,y1: Integer;
implementation
{$R *.dfm}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
str := '';
DestroyCaret;
CreateCaret(Handle, 0, 0, Canvas.TextHeight('A'));
SetCaretPos(X,Y);
ShowCaret(Handle);
x1 := X;
y1 := Y;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
var
x2: Integer;
begin
HideCaret(Handle);
Repaint;
if Key = #8 then
begin
if Length(str) > 0 then
SetLength(str, Length(str) - 1);
end else str := str + Key;
Text := str;
Canvas.TextOut(x1, y1, str);
x2 := x1 + Canvas.TextWidth(str);
SetCaretPos(x2, y1);
ShowCaret(Handle);
end;