本人做了个可控界面,即在image上画图操作。在做图的过程中,我想通过键盘来作一些快捷操作,如:esc取消选择等等,但是image没有该键盘响应事件,我该如何处理?用什么消息事件可以解决,请明示!

解决方案 »

  1.   

    image本来就有键盘事件的啊,你只要加以判断就可以的啊
      

  2.   

    简单的演示下:
      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;
      

  3.   

    简单的演示下: 
      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;---------------------------------------------
    同意楼上