思考过这个问题了,读了一遍imm和controls的源码,结论是——
很不好意思,结论是不能在非Twincontrol上出现输入法。
(
因为从关于Twincontrol类的程序中可以看到,实现输入法的程序都
需要一个handle,而非Twincontrol是没有handle的。(TCanvas的
handle实际是一个hDC,申请后会马上被释放掉的,不信可以读源码)
如果使用imm的函数,应该可以实现,但太累,无异于写输入法!!
下面有一个变通的方法,我试过,可以做到呢。——不过,还有一
部分程序要你去写。
====================
type
TForm1 = class(TForm)
...
procedure MyKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
private
...
end;
...
implementation
type
TMyWin = class(TWinControl)
public
property Text;
property onKeyDown;
end;
var aWin : TmyWin;
procedure TForm1.MyKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_return then
aWin.Free;
end;
procedure TForm1.Image1Click(Sender: TObject);
begin
aWin := GetAComp(self,TmyWin,'myHideEdit',Label1.left,Label1.top,0,0) as TmyWin;
aWin.onKeyDown := MyKeyDown;
end;
end.
============
这里已经有输入法了,而且看起来象是image控制的一样,剩下的
就是在Text中填入字符串值了。这些你可以参考TCustomEdit来写。
路漫漫其修远兮,汝将上下而求索。^-^