Lazarus

Other Languages => Spanish => Topic started by: critter on December 17, 2018, 01:40:11 pm

Title: Intro en un DBGrid.
Post by: critter on December 17, 2018, 01:40:11 pm
Tras multiples pruebas  no encuentro solución, ya que al pulsar la tecla Enter en un DBGrid  de solo lectura con la RowSelect = True, silencia dicha tecla en el evento OnKeypress. ¿ Existe alguna solución para poder capturar dicha tecla ?


Code: Pascal  [Select][+][-]
  1. TForm1.DBGridOnKeyPress(Sender: TObject; var Key = char);
  2. begin
  3.   if Key = #13 then Button1.Click;
  4. end;
Title: Re: Intro en un DBGrid.
Post by: garlar27 on December 17, 2018, 03:28:28 pm
Tenés que ir al inspector de objetos y destildar la opción dgEditing.
Aún así podés tener problemas para capturar las teclas presionadas. Vas a tener que usar el evento OnKeyDown y preguntar
Code: Pascal  [Select][+][-]
  1. uses lclType;
  2. ....
  3. if Key = VK_RETURN  then DoSometing;
Si aún no podés capturar la tecla, entonces debe haber otra propiedad que captura el evento y te lo esconde.
Title: Re: Intro en un DBGrid.
Post by: lucamar on December 17, 2018, 05:27:57 pm
En última instancia, podrías activar KeyPreview y capturar la tecla en el manejador del evento OnKeyPress del formulario. Algo así como esto:

Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, DBGrids,
  9.   StdCtrls;
  10.  
  11. type
  12.  
  13.   { TForm1 }
  14.  
  15.   TForm1 = class(TForm)
  16.     Button1: TButton;
  17.     DBGrid1: TDBGrid;
  18.     procedure FormCreate(Sender: TObject);
  19.     procedure FormKeyPress(Sender: TObject; var Key: char);
  20.   private
  21.  
  22.   public
  23.  
  24.   end;
  25.  
  26. var
  27.   Form1: TForm1;
  28.  
  29. implementation
  30.  
  31. {$R *.lfm}
  32.  
  33. { TForm1 }
  34.  
  35. procedure TForm1.FormCreate(Sender: TObject);
  36. begin
  37.   { Esto puedes hacerlo también en el Inspector de Objetos;
  38.     lo pongo aquí y así para que se vea :-) }
  39.   KeyPreview := True;
  40. end;
  41.  
  42. procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
  43. {Si necesitas un control más "fino", usa OnKeyDown/OnKeyUP }
  44. begin
  45.   if (Key = #13) and (Form1.ActiveControl = DBGGrid1) then begin
  46.     Key := #00;
  47.     Button1.Click.
  48.   end;
  49. end;
  50.  
  51. end.
Title: Re: Intro en un DBGrid.
Post by: garlar27 on December 17, 2018, 06:46:24 pm
En última instancia, podrías activar KeyPreview y capturar la tecla en el manejador del evento OnKeyPress del formulario. Algo así como esto:

Yo probé eso una vez pero no funcionó. Parece que el TDBGrid tiene algo "raro" con los eventos del teclado.
Title: Re: Intro en un DBGrid.
Post by: GAN on December 17, 2018, 08:34:12 pm
Probablemente al estar como read only no capture las teclas, de todas formas al tener row select en true puedes prescindir del read only y probar.

TinyPortal © 2005-2018