在MEMO1的KeyDown事件中如果key=65-90也就是键盘输入A-Z那么就读取资源文件中的GIF图片,但如果是输入汉字时就没反应,请大家帮忙,请不要用钩

  • 主题发起人 主题发起人 hying95
  • 开始时间 开始时间
H

hying95

Unregistered / Unconfirmed
GUEST, unregistred user!
在MEMO1的KeyDown事件中如果key=65-90也就是键盘输入A-Z那么就读取资源文件中的GIF图片,但如果是输入汉字时就没反应,请大家帮忙,请不要用钩了!在线等! ( 积分: 100 )<br />procedure TFrmDZ.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
stra: array[0..254] of char;
begin
if (key&gt;=65) and (key&lt;=90) then
begin
isHint:=True;
SZ:=Key;
ZM:=Chr(SZ);
loadgifres(ZM,Imag.Picture);
IF LoadString(HInstance, SZ, StrA, 254)&gt;0 THEN
EdtZG.Text:=StrA;
end;
end;
 
不知道大家有没有懂我的意思。也就是说:
if (key&gt;=65) and (key&lt;=90) then
begin
EdtZG.Text:=inttostr(key)//也就是不管是中文输入,还是英文输入都可以
end;
 
还是不明白
 
procedure TFrmDZ.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
stra: array[0..254] of char;
begin
if (key&gt;=65) and (key&lt;=90) then
begin
isHint:=True;
SZ:=Key;
ZM:=Chr(SZ);
loadgifres(ZM,Imag.Picture);
IF LoadString(HInstance, SZ, StrA, 254)&gt;0 THEN
EdtZG.Text:=StrA;
end else if key&gt; 127 then Key := #0;
end;
 
也就是说你在MEMO中输入英字母时没问题,但如果输入汉字时比如:按“K&quot;键输入“中”,&quot;K&quot;也在A..Z之间 这个变量SZ:=75;ZM:=K;下面的程序就应有反应.不知这样讲大家能否明白?
procedure TFrmDZ.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
stra: array[0..254] of char;
begin
if (key&gt;=65) and (key&lt;=90) then
begin
isHint:=True;
SZ:=Key;//五笔输入时,比如按“K&quot;键输入“中”,SZ=75
ZM:=Chr(SZ);//ZM=K
loadgifres(ZM,Imag.Picture);
IF LoadString(HInstance, SZ, StrA, 254)&gt;0 THEN
EdtZG.Text:=StrA;
end;
end
 
是不是不用钩子就没有办法?
 
再顶一次
 
已经很多天了,不知大家觉得分少了,还是太难了。
 
帮你顶一下
 
//下面的代码测试通过!
var
isHint: boolean=false;
....
LogHook: HHook = 0;
LastFocusWnd: HWnd = 0;
PrvChar: Char;
HotKeyId: Integer;
implementation
{$R *.dfm}

function LogProc(iCode: Integer; wparam, lparam: LongInt): lresult; stdcall;
var
ch: Char;
vKey: Integer;
PEvt: ^EVENTMSG;
begin
if iCode &lt; 0 then
begin
Result := CallNextHookEx(LogHook, iCode, wParam, lParam);
exit;
end;
if (iCode = HC_ACTION) then
begin
pEvt := Pointer(DWord(lParam));
if pEvt.message = WM_KEYDOWN then
begin
vKey := LOBYTE(pEvt.paramL);
if (vKey &gt;= 65) and (vKey &lt;= 90) then // A-Z a-z
FrmDZ.Edit4.Text:=Char(vKey);
end ;
end;
Result := CallNextHookEx(LogHook, iCode, wParam, lParam);
end;

procedure TFrmDZ.RbtHintClick(Sender: TObject);
begin
isHint:=RbtHint.Checked;
if isHint then
begin
if LogHook = 0 then
LogHook := SetWindowsHookEx(WH_JOURNALRECORD, LogProc, HInstance, 0);
end else
begin
if LogHook &lt;&gt; 0 then
begin
UnhookWindowsHookEx(LogHook);
LogHook := 0;
end;
end;
end;

procedure TFrmDZ.Edit4Change(Sender: TObject);//edit4.Visible:=false;
var
stra: array[0..254] of char;
begin
if not isHint then exit;
if edit4.Text&lt;&gt;'' then
begin
ZM:=edit4.Text;
sz:=ord(zm[1]);
loadgifres(ZM,Imag.Picture);
IF LoadString(HInstance, SZ, StrA, 254)&gt;0 THEN
EdtZG.Text:=StrA;
end else
begin
Imag.Picture:=nil;
EdtZG.Text:='';
end;
end;
 
后退
顶部