如何控制输入法中“选择文字”的提示框的位置。

努力偷懒 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;
...全文
705 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
努力偷懒 2010-09-17
  • 打赏
  • 举报
回复
这个问题我好像自己解决了,我找下代码再粘贴上来!
laivoiqwer. 2009-11-03
  • 打赏
  • 举报
回复
晕 没看全问题
laivoiqwer. 2009-11-03
  • 打赏
  • 举报
回复
你输入的时候肯定有一个输入框

然后下边有一个选择框

应该是先确定输入框的位置
然后得到输入框的top 和高度

在确定选择框的位置吧
wuhenghuan 2009-11-03
  • 打赏
  • 举报
回复
路过,进来灌水
雄牛 2009-08-06
  • 打赏
  • 举报
回复

~~~路过~~~

~~~友情UP~~~
hiboys 2009-06-09
  • 打赏
  • 举报
回复
用工具确定那个输入法窗口的注册类名或窗体名。
再用findwindow找其句柄。
然后,。。。。
C#源码大集合 01(共3卷)之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)├─C#源码第一部分│ ├─第1章 控件操作│ │ ├─实例1 如何使用错误提醒控件│ │ ├─实例10 如何使用列表视图控件│ │ ├─实例11 如何使用多选列表框控件│ │ ├─实例12 如何使用图像控件│ │ ├─实例13 如何使用窗体分隔控件│ │ ├─实例2 如何使用信息提示控件│ │ ├─实例3 如何使用菜单控件│ │ ├─实例4 如何使用工具栏控件│ │ ├─实例5 如何使用状态栏控件│ │ ├─实例6 如何使用托盘控件│ │ ├─实例7 如何使用标签页控件│ │ ├─实例8 如何使用进度条控件│ │ └─实例9 如何使用树视图控件│ ├─第2章 文件管理│ │ ├─实例14 如何获取程序文件信息│ │ ├─实例15 如何获取指定文件的根信息│ │ ├─实例16 如何获取当前程序所在的文件夹│ │ ├─实例17 如何获取指定文件夹下的所有文件│ │ ├─实例18 如何获取指定文件夹下的所有文件夹│ │ ├─实例19 如何获取和设置文件属性│ │ ├─实例20 如何获取和设置文件夹属性│ │ ├─实例21 如何判断文件或文件夹是否存在│ │ ├─实例22 如何创建和删除多层文件夹│ │ ├─实例23 如何监视文件和文件夹系统变化情况│ │ ├─实例24 如何加解密文件│ │ ├─实例25 如何切分组合文件│ │ ├─实例26 如何以流式方式读写文本文件│ │ ├─实例27 如何直接打印文件│ │ ├─实例28 如何操作帮助文件│ │ ├─实例29 如何操作WORD文件│ │ ├─实例31 如何播放MP3文件│ │ ├─实例32 如何播放VCD文件│ │ ├─实例33 如何播放DVD文件│ │ ├─实例34 如何播放Flash文件│ │ └─实例35 如何播放RealPlayer文件│ ├─第3章 程序设置│ │ ├─实例36 如何创建椭圆形窗体│ │ ├─实例37 如何创建文字形窗体│ │ ├─实例38 如何创建不规则窗体│ │ ├─实例39 如何创建移动的窗体│ │ ├─实例40 如何创建无标题栏窗体│ │ ├─实例41 如何拖动无标题栏窗体│ │ ├─实例42 如何制作自绘式菜单│ │ ├─实例43 如何制作图形组合框│ │ ├─实例44 如何设置窗体的透明度│ │ ├─实例45 如何设置窗体启动位置│ │ ├─实例46 如何设置窗体最前端显示│ │ ├─实例47 如何实现精灵提示│ │ ├─实例48 如何实现打印预览│ │ ├─实例49 如何实现剪贴板循环│ │ ├─实例50 如何实现菜单历史列表│ │ ├─实例51 如何实现程序互斥运行│ │ ├─实例52 如何屏蔽鼠标消息│ │ ├─实例53 如何模拟键盘输入│ │ ├─实例54 如何使用消息提示框│ │ ├─实例55 如何使用系统API函数(INI)│ │ ├─实例56 如何获取和设置输入法│ │ ├─实例57 如何在程序启动其他程序│ │ ├─实例58 如何在程序关闭其他程序│ │ ├─实例59 如何在开机时自动启动程序│ │ ├─实例60 如何启动电话拨号程序│ │ ├─实例61 如何启动屏幕保护程序│ │ ├─实例62 如何启动系统控制面板程序│ │ ├─实例63 如何编写多线程程序│ │ ├─实例64 如何编写DLL服务端程序│ │ ├─实例65 如何编写DLL客户端程序│ │ ├─实例66 如何编写用户控件程序│ │ └─实例67 如何给程序打包│ ├─第4章 系统维护│ │ ├─实例68 如何获取系统基本信息│ │ ├─实例69 如何获取系统服务信息│ │ ├─实例70 如何获取系统进程信息│ │ ├─实例71 如何获取系统日期时间│ │ ├─实例72 如何获取系统所有驱动器│ │ ├─实例73 如何获取系统驱动器信息│ │ ├─实例74 如何获取系统计数器信息│ │

16,743

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧