Forum > Spanish

Intro en un DBGrid.

(1/1)

critter:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---TForm1.DBGridOnKeyPress(Sender: TObject; var Key = char);begin  if Key = #13 then Button1.Click;end;

garlar27:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---uses lclType;....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:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---unit Unit1; {$mode objfpc}{$H+} interface uses  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, DBGrids,  StdCtrls; type   { TForm1 }   TForm1 = class(TForm)    Button1: TButton;    DBGrid1: TDBGrid;    procedure FormCreate(Sender: TObject);    procedure FormKeyPress(Sender: TObject; var Key: char);  private   public   end; var  Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject);begin  { Esto puedes hacerlo también en el Inspector de Objetos;    lo pongo aquí y así para que se vea :-) }  KeyPreview := True;end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);{Si necesitas un control más "fino", usa OnKeyDown/OnKeyUP }begin  if (Key = #13) and (Form1.ActiveControl = DBGGrid1) then begin    Key := #00;    Button1.Click.  end;end; end.

garlar27:

--- Quote from: 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:

--- End quote ---

Yo probé eso una vez pero no funcionó. Parece que el TDBGrid tiene algo "raro" con los eventos del teclado.

GAN:
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.

Navigation

[0] Message Index

Go to full version