如何给image控件加上键盘响应事件?????????????????????????? 本人做了个可控界面,即在image上画图操作。在做图的过程中,我想通过键盘来作一些快捷操作,如:esc取消选择等等,但是image没有该键盘响应事件,我该如何处理?用什么消息事件可以解决,请明示! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 image本来就有键盘事件的啊,你只要加以判断就可以的啊 简单的演示下: TForm6 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } Fimg: TImage; public { Public declarations } end;var Form6: TForm6;implementation{$R *.dfm}type TBudded = class(TImage) private { private declarations } FHandle: HWND; protected { protected declarations } procedure WndProc(var Msg: TMessage); virtual; procedure WMChar(var Message: TWMChar); public { public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { published declarations } end;{ TBudded }constructor TBudded.Create(AOwner: TComponent);begin inherited; FHandle := AllocateHWnd(WndProc); Canvas.TextOut(10, 10, 'Budded');end;destructor TBudded.Destroy;begin DeallocateHWnd(FHandle); inherited;end;procedure TBudded.WMChar(var Message: TWMChar);begin Canvas.TextOut(10, 25, Char(Message.CharCode));end;procedure TForm6.FormCreate(Sender: TObject);begin Fimg := TBudded.Create(Self); with TBudded(Fimg) do Parent := Self;end;procedure TBudded.WndProc(var Msg: TMessage);begin if Msg.Msg = wm_char then WMChar(TWMChar(msg)) else with Msg do Result := DefWindowProc(FHandle, Msg, wParam, lParam);end;procedure TForm6.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin SendMessage(TBudded(Fimg).FHandle, wm_char, Key, 0);end; 简单的演示下: TForm6 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } Fimg: TImage; public { Public declarations } end;var Form6: TForm6;implementation{$R *.dfm}type TBudded = class(TImage) private { private declarations } FHandle: HWND; protected { protected declarations } procedure WndProc(var Msg: TMessage); virtual; procedure WMChar(var Message: TWMChar); public { public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { published declarations } end;{ TBudded }constructor TBudded.Create(AOwner: TComponent);begin inherited; FHandle := AllocateHWnd(WndProc); Canvas.TextOut(10, 10, 'Budded');end;destructor TBudded.Destroy;begin DeallocateHWnd(FHandle); inherited;end;procedure TBudded.WMChar(var Message: TWMChar);begin Canvas.TextOut(10, 25, Char(Message.CharCode));end;procedure TForm6.FormCreate(Sender: TObject);begin Fimg := TBudded.Create(Self); with TBudded(Fimg) do Parent := Self;end;procedure TBudded.WndProc(var Msg: TMessage);begin if Msg.Msg = wm_char then WMChar(TWMChar(msg)) else with Msg do Result := DefWindowProc(FHandle, Msg, wParam, lParam);end;procedure TForm6.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin SendMessage(TBudded(Fimg).FHandle, wm_char, Key, 0);end;---------------------------------------------同意楼上 有没有哪个函数可以查字符串中一个字符出现的次数? 短信平台 如何集成到 三方的mis系统里 有没有好的解决方案 ? 請教TADOQuery方面的問題 用QUICKREPORT如何时间这样的打印,SQL语言能实现吗?急等 大家来看看这个帖子,BS楼主这种行为! 急:如何得到 Internet 网上一个页面的 Html 源码 ? 怎样找出程序中内存泄漏的地方?有没有相关软件可以监测? 开发vcl控件问题! 如何在internet上实现c/s结构!如何连接! delphi为PB编写的DLL调用出错!高手请进!急! 求文件格式分析思路 TfcTreeView谁用过?
TForm6 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ Private declarations }
Fimg: TImage;
public
{ Public declarations }
end;var
Form6: TForm6;implementation{$R *.dfm}type
TBudded = class(TImage)
private
{ private declarations }
FHandle: HWND;
protected
{ protected declarations }
procedure WndProc(var Msg: TMessage); virtual;
procedure WMChar(var Message: TWMChar);
public
{ public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ published declarations }
end;{ TBudded }constructor TBudded.Create(AOwner: TComponent);
begin
inherited;
FHandle := AllocateHWnd(WndProc);
Canvas.TextOut(10, 10, 'Budded');
end;destructor TBudded.Destroy;
begin
DeallocateHWnd(FHandle);
inherited;
end;procedure TBudded.WMChar(var Message: TWMChar);
begin
Canvas.TextOut(10, 25, Char(Message.CharCode));
end;procedure TForm6.FormCreate(Sender: TObject);
begin
Fimg := TBudded.Create(Self);
with TBudded(Fimg) do
Parent := Self;
end;procedure TBudded.WndProc(var Msg: TMessage);
begin
if Msg.Msg = wm_char then
WMChar(TWMChar(msg))
else
with Msg do Result := DefWindowProc(FHandle, Msg, wParam, lParam);
end;procedure TForm6.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
SendMessage(TBudded(Fimg).FHandle, wm_char, Key, 0);
end;
TForm6 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ Private declarations }
Fimg: TImage;
public
{ Public declarations }
end;var
Form6: TForm6;implementation{$R *.dfm}type
TBudded = class(TImage)
private
{ private declarations }
FHandle: HWND;
protected
{ protected declarations }
procedure WndProc(var Msg: TMessage); virtual;
procedure WMChar(var Message: TWMChar);
public
{ public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ published declarations }
end;{ TBudded }constructor TBudded.Create(AOwner: TComponent);
begin
inherited;
FHandle := AllocateHWnd(WndProc);
Canvas.TextOut(10, 10, 'Budded');
end;destructor TBudded.Destroy;
begin
DeallocateHWnd(FHandle);
inherited;
end;procedure TBudded.WMChar(var Message: TWMChar);
begin
Canvas.TextOut(10, 25, Char(Message.CharCode));
end;procedure TForm6.FormCreate(Sender: TObject);
begin
Fimg := TBudded.Create(Self);
with TBudded(Fimg) do
Parent := Self;
end;procedure TBudded.WndProc(var Msg: TMessage);
begin
if Msg.Msg = wm_char then
WMChar(TWMChar(msg))
else
with Msg do Result := DefWindowProc(FHandle, Msg, wParam, lParam);
end;procedure TForm6.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
SendMessage(TBudded(Fimg).FHandle, wm_char, Key, 0);
end;---------------------------------------------
同意楼上