在cxGrid中禁用ESC,我试过keydown,keypress ,但在触发这里的代码时就已经被ESC了,望高手相助!

解决方案 »

  1.   

    可以用消息捕获:type
      TMainFrm = class(TForm)
      protected
        procedure WndProc(var Mess: TMessage); override;
      end;procedure TMainFrm.WndProc(var Mess: TMessage);
    begin
      if (Mess.wParam = VK_END) then  //你要的键值
      begin
        exit;
      end;
      inherited;
    end;
      

  2.   


    type
      TShipProForm= class(TForm)
      protected
        procedure OnEsc(var Msg: TMsg; var Handled: Boolean);
      end;procedure TShipProForm.OnEsc(var Msg: TMsg; var Handled: Boolean);
    begin
      if (Msg.message = VK_END) and ((Screen.ActiveForm.ActiveControl is TDBGrid)) then
      begin
        //do nothing
      end;
    end;
      

  3.   

    我不是要在消息上禁用ESC,比如cxGrid中原来的值是A,现输入了B,按ESC后会单元格中的内容会变回A,这2个值都是非法的,变回A后会跳过检查可以保存成功,所以现在我想禁止这样的操作; 我现在的做法是:按ESC时重新赋值;
    procedure TSalSOFrm.gdDetailViewKeyPress(Sender: TObject; var Key: Char);
    begin
      inherited;
      //在重复记录时,防止按ESC跳过Post的重复记录检查;
      if (Key=#27) and (dsHead.dataSet.State in [dsInsert,dsEdit]) then
      begin
        with SalSODM.cdsDetail do
        begin
          Edit;
          FieldByName('item').AsString :=FieldByName('item').AsString;
        end;
      end;end;