Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Interpretar como usar esto: (https://www.clubdelphi.com/foros/showthread.php?t=79830)

ElMug 13-08-2012 22:20:40

Interpretar como usar esto:
 
Hola amigos,

El KDBGrid tiene esta facilidad:

procedure DefaultEditorCreate(ACol, ARow: Integer; var AEditor: TWinControl); override;

y solicito sugerencias/ayuda en cuanto a interpretar su uso, pensando que tal vez alguien haya visto un uso similar.

Creo que es para llamar al editor default del sistema, y editar datos en el, mas no he logrado interpretar como mandar los parametros.

website de KDBGrid:
http://www.tkweb.eu/en/delphicomp

Toda sugerencia o explicacion es bienvenida, para probarla.

Gracias de antemano.

Neftali [Germán.Estévez] 14-08-2012 09:56:11

Sin tener ni idea del componente y sin haberlo visto nunca, diría que ese procedimiento puede servir para crear un componente de edición personalizado en una celda del Grid.

Código Delphi [-]
procedure DefaultEditorCreate(ACol, ARow: Integer; var AEditor: TWinControl); override;

Si tienes el código fuente del componente revisa dónde se llama este procedimiento y cómo se usa.

Podrías probar a llamarlo con una referencia de fila y columna y pasando como el parámetro AEditor, un control edit que ya exista en el form.

CSIE 14-08-2012 15:13:08

Ejemplo de uso:

Código Delphi [-]
procedure TFieldFrm.GridFieldEditorCreate(Sender: TObject; ACol, ARow: Integer;
  var AEditor: TWinControl);
begin
  if ACol=1 then
    case ARow of
    2, 3, 4, 6, 12, 18, 21, 25: AEditor := TCheckBox.Create(nil);
    1, 27:
      begin
        AEditor := TMemo.Create(nil);
        TMemo(AEditor).ScrollBars:= ssVertical;
      end;
    7, 8, 9, 19, 26: begin
        AEditor:= TComboBox.Create(nil);
        if (ARow <> 9) and (ARow <> 26) then TComboBox(AEditor).Style := csDropDownList;
       end;
    10, 13, 14, 15:
      begin
        AEditor:= TSpinEdit.Create(nil);
        TSpinEdit(AEditor).AutoSize := false;
        TSpinEdit(AEditor).OnChange := OnSpinEditChange;
      end;
    else
      AEditor := TEdit.Create(nil);
    end;
end;

ElMug 15-08-2012 04:21:05

Cita:

Empezado por Neftali (Mensaje 439554)
Sin tener ni idea del componente y sin haberlo visto nunca, diría que ese procedimiento puede servir para crear un componente de edición personalizado en una celda del Grid.

Código Delphi [-]procedure DefaultEditorCreate(ACol, ARow: Integer; var AEditor: TWinControl); override;


Si tienes el código fuente del componente revisa dónde se llama este procedimiento y cómo se usa.

Podrías probar a llamarlo con una referencia de fila y columna y pasando como el parámetro AEditor, un control edit que ya exista en el form.

Esto me parece logico.

Si, ya he revisado todo lo que se puede, pero no logro aun poner un TEDit que sea TwinControl en la forma.

Se puede poner uno asi al diseñar la forma?

Trate con codigo, y compila. Mas no se ve nada en la forma. Luego, creo que debe de haber un "handle", mas no me es muy claro lo que he leido. El caso es que el KDBGrid le pase el texto de la celda actual al tal memo (automaticamente, o por medio de un boton?); pienso que seria automaticamente, mas no capto como relacionar esa funcion.

Aun sigo investigando.

Gracias Neftali.

ElMug 15-08-2012 04:28:55

Cita:

Empezado por CSIE (Mensaje 439561)
Ejemplo de uso:

Puse el codigo mostrado en el evento "OnEditorCreate" (Object Inspector) y en una sola linea me marca error, la excluyo, y ya compila:
// TSpinEdit(AEditor).OnChange := OnSpinEditChange;

Pero aun no estoy claro en esto:

1. Que es lo que activaria este procedimiento, pues creo que el simple ponerla "OnEditorCreate" del Object Inspector, nada aun la activa. Aparte no se si esta bien poner el procedure alli.

2. Que es lo que necesito hacer para que el KDBGrid la active automaticamente?

Gracias, CSIE.

CSIE 16-08-2012 10:12:49

Hola,

En este procedimiento lo que determinas es el tipo de control que TKDBGrid va ha utilizar para editar los datos. Si te fijas en el demo verás:


Código Delphi [-]
procedure TMainForm.DBGridEditorCreate(Sender: TObject; ACol, ARow: Integer;
  var AEditor: TWinControl);
begin
  // you have still full control about the inplace editor but
  // here we just use the default handling
  // (if you delete this event the same is used in TKDBGridCell)
  DBGrid.DefaultEditorCreate(ACol, ARow, AEditor);
  // use default handling for other inplace editor events
end;

Lo que hace aqui es usar el procedimiento por defecto de TKDBGrid, donde asigna el TWinControl a utilizar.


Código Delphi [-]
procedure TKCustomDBGrid.DefaultEditorCreate(ACol, ARow: Integer; var AEditor: TWinControl);
begin
  // create custom editors according to table column type
  if Cols[ACol] is TKDBGridCol then
    case TKDBGridCol(Cols[ACol]).DataType of
      ftString, ftWideString, ftInteger, ftSmallInt, ftWord, ftLargeInt, ftFloat, ftCurrency, ftBcd:
      begin
        AEditor := TEdit.Create(nil);
      end;
      ftMemo
    {$IF DEFINED(FPC) OR DEFINED(COMPILER10_UP)}
      , ftWideMemo
    {$IFEND}
        :
      begin
        AEditor := TMemo.Create(nil);
      end;
      ftDate, ftTime, ftDateTime:
      begin
        AEditor := {$IFDEF FPC}TDateEdit{$ELSE}TDateTimePicker{$ENDIF}.Create(nil);
      end;
      ftBoolean:
      begin
        AEditor := TCheckBox.Create(nil);
      end;
    else
      AEditor := nil;
    end
  else
    AEditor := nil;
end;

Pero utilizando la misma técnica del procedimiento anterior, tu puedes personalizar los controles a utilizar. Por ejemplo si te fijas, cuando el DataType es integer, o string utiliza un TEdit estándard:

Código Delphi [-]
case TKDBGridCol(Cols[ACol]).DataType of
      ftString, ftWideString, ftInteger, ftSmallInt, ftWord, ftLargeInt, ftFloat, ftCurrency, ftBcd:
      begin
        AEditor := TEdit.Create(nil);
      end;

Pero tu podrías mejorarlo usando controles específicos para datos numéricos o de texto o memos.

ElMug 16-08-2012 14:43:02

Hola CSIE,

Mucho te agradezco tu valiosa contribucion. Me va a tomar, creo, algo de tiempo revisar esto, pero no dejare de hacerlo.

Es algo bastante importante para mi.

Ya logre usar el KDBGid y terminar mi aplicacion maestra, pero usando un DBMemo.

Me gusto mucho el KDBGrid, peor aun me falta bastante para aprovecharla mas.

De nuevo, gracias!^\||/


La franja horaria es GMT +2. Ahora son las 12:09:50.

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