Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Algun motivo por el cual no se ejecute GetEditText, en un grid (https://www.clubdelphi.com/foros/showthread.php?t=69677)

Livey 01-09-2010 18:35:19

Algun motivo por el cual no se ejecute GetEditText, en un grid
 
Hola de nuevo
Estoy trabajando con Delphi 7, con un grid cuyas columnas son check, el cual se encuentra en un tabsheet, pero se me esta presentando el problema de que no ejecuta el evento GetEditText.
Me prodrian orientar a saber que puede afectar para que no se ejecute el evento, en el la forma como tal tengo keypreview en true, no se si eso puede ayudar en algo.

Livey 01-09-2010 19:41:41

Cita:

Empezado por Livey (Mensaje 375233)
Hola de nuevo
Estoy trabajando con Delphi 7, con un grid cuyas columnas son check, el cual se encuentra en un tabsheet, pero se me esta presentando el problema de que no ejecuta el evento GetEditText.
Me prodrian orientar a saber que puede afectar para que no se ejecute el evento, en el la forma como tal tengo keypreview en true, no se si eso puede ayudar en algo.

Pregunto.
Acaso el evento no se ejecuta si las columnas son check?
Por que si la columna es para editar texto si se ejecuta.

ecfisa 01-09-2010 20:18:05

Hola Livey.

¿ Redefiniste el método en la clase TStringGrid para hacer pública la función ?

Código Delphi [-]
uses Grids;

type
  TStringGrid = class(Grids.TStringGrid)
  public
     function GetEditText(ACol,ARow: Longint):string; override;
  end;
 ....

implementation

function TStringGrid.GetEditText(ACol, ARow: Integer): string;
begin
  Result := InHerited GetEditText(ACol,ARow);
end;
...

Saludos.

Livey 01-09-2010 20:54:53

Recuerda que utilizo Delphi 7

gracias.;)

ecfisa 01-09-2010 21:13:20

Cita:

Empezado por Livey (Mensaje 375257)
Recuerda que utilizo Delphi 7

gracias.;)

No lo sabía, pero no te preocupes... yo también :)

Dame un minuto y te pongo el ejemplo completo.

ecfisa 01-09-2010 21:18:52

Aca está.
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TstringGrid = class(Grids.TStringGrid)
  public
    function GetEditText(ACol,ARow: Longint):string; override;
  end;

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

{ TstringGrid }
function TstringGrid.GetEditText(ACol, ARow: Integer): string;
begin
  Result := Inherited GetEditText(ACol,ARow);
end;

{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Cells[1,1]:= 'Prueba de GetEditText';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(StringGrid1.GetEditText(1,1));
end;
end.

Funciona perfecto (Delphi 7).

Saludos. :)

ecfisa 01-09-2010 21:38:47

Es más Livey, al ser GetEditText un método de la clase TCustomGrid, podés redefinir el método para cualquiera de sus descendientes...

Así podés hacer:
Código Delphi [-]
uses DBGrids;

type
 TDBGrid = class(DBGrids.TDBGrid)
  public
    function GetEditText(ACol,ARow: Longint):string; override;
  end;

 TForm1 = class(TForm)
    DBGrid1: TDBGrid;
 public
 private
 end;
....
implementation

function TDBGrid1.GetEditText(ACol, ARow: Integer): string;
begin
  Result := Inherited GetEditText(ACol,ARow);
end;
con el mismo resultado.


Saludos. :)

Livey 01-09-2010 23:26:00

Ok,
lo que no entiendo es porque no pasa por el evento GetEditText, cuando hago click en la columna.

Ahora esas columnas tienen la propiedad de que son check, por lo que no se ejecuta el GetTexEdit, pero si la columna es para editar texto si se ejecuta.
Quisiera me aclaran si al ser la columna tipo check, no ejecuta dicho evento.
Te explico lo que necesito es capturar lo que tiene la columna antes de que aplique el check, debido a que realizo algunas validaciones y dependiendo de eso aplica o no el check en la columna, entonces si la validación no permite aplicar el check, necesito que la columna regrese a su estado anterior para lo cual realizo lo siguente(o al menos asi lo solucioné):

Código Delphi [-]
procedure TFOrdenes.GrTipoMBeforeSelect(Sender: TObject; ACol,   ARow: Integer; var Continue: Boolean);
begin
    If not TMBCGrid(Sender).FromValDatos Then
       ValorAntes :=TMBCGrid(Sender).Cells[ACol,ARow]; 
end;

donde ValorAntes es el valor que toma la columna cuando la validación me retorna false, de manera que regresa al estado anterior.
En el Grid.OnvalidDato
Código Delphi [-]
Grid.Cells[ACol,ARow] :=ValorAntes;

ecfisa 02-09-2010 00:14:59

Hola Livey.


Ahora si !! GetEditText no es un evento... es una función.:)

El evento a que te referís es OnGetEditText... en ese caso la respuesta la dá la ayuda de Delphi:
"OnGetEditText does not occur unless the Options property includes goEditing"

Para tu propósito... ¿ No te sirve el evento OnSelectCell ?
Primero tiene que posicionarse, para despues aplicar el check...

Saludos.

Livey 02-09-2010 00:57:06

Tienes razon omiti el "On", disculpa.

Bueno yo lo solucione con OnBeforeSelect, y me funciona correctamente, para mi propósito.

Y muuuchas gracias por la ayuda.

ecfisa 02-09-2010 02:17:46

De nada Livey, me alegro que lo solucionaras :)


Saludos.


La franja horaria es GMT +2. Ahora son las 01:32:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi