Recent

Author Topic: Intro en un DBGrid.  (Read 2514 times)

critter

  • New member
  • *
  • Posts: 14
Intro en un DBGrid.
« 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;

garlar27

  • Hero Member
  • *****
  • Posts: 594
Re: Intro en un DBGrid.
« Reply #1 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.

lucamar

  • Hero Member
  • *****
  • Posts: 1538
Re: Intro en un DBGrid.
« Reply #2 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.
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus 1.8.4 & 2.0.2 w/FPC 3.0.4 on:
(K|L)Ubuntu 12..16, Windows XP SP3, various DOSes.

garlar27

  • Hero Member
  • *****
  • Posts: 594
Re: Intro en un DBGrid.
« Reply #3 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.

GAN

  • Full Member
  • ***
  • Posts: 211
Re: Intro en un DBGrid.
« Reply #4 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.

Lazarus 1.6 FPC 3.0.0 Linux Mint Mate 17.2 x86_64 GTK-2
Zeos 7.1.3 - Sqlite 3.8.2

Foro Lazarus en español http://forum.lazarus.freepascal.org/index.php/board,73.0.html