Diferencia entre revisiones de «TprxDBEdit»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
Línea 140: Línea 140:


===TprxDBEdit.Seleccionar(Sender: TObject)===
===TprxDBEdit.Seleccionar(Sender: TObject)===
Llama directamente a la función [[Tva_campo_item]].EDIT_SELECT.
Llama directamente a la función [[Tva_campos_item]].EDIT_SELECT.

Revisión del 16:48 23 may 2025

Descripción

El objeto TprxDBEdit (Control de edición DB de campos alfanuméricos.) es el control de edición usado para todos los tipos de campo que no sean:

  • Lógicos.
  • Combos.
  • Fechas.
  • Memos.

Es el control de edición más usado en la aplicación.

Identidad

  • Ancestro: TDBEdit
  • Carpeta: C:\DevelopPrx\library
  • Archivo: prxDBEdit.pas

Declaración

type
  TprxDBEdit = class(TDBEdit)
  private
    FFieldXTD: Tfva_campos_item;

    FDataType: TprxEditDataType;
    FDataControl: String;

    FOnEnterField: TprxADOOnEnterField;
    FOnExitField: TprxADOOnExitField;

    FImages: TImageList;

    procedure   CMEnter(var Message: TCMEnter); message CM_ENTER;
    procedure   CMExit(var Message: TCMExit); message CM_EXIT;
    procedure   CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
    procedure   FieldMessage(var Message: TprxADODataSetMessage); message MSG_PRXADODATASETMESSAGE;
  protected
    property    FieldXTD: Tfva_campos_item read FFieldXTD write FFieldXTD;

    procedure   SetImages(aValue: TImageList);

    procedure   LocalKeyPress(Sender: TObject; var Key: Char);

    procedure   MostrarCamposCalculadosForm(Sender: TObject);
    procedure   MostrarSuscripcionEvaluacionesForm(Sender: TObject);
    procedure   MostrarMaestroDo(Sender: TObject);
    procedure   SeleccionarPartidas(Sender: TObject);
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
    procedure   Loaded; override;

    procedure   AssignDataSource(aDataSource: TDataSource; aDataField: String);

    procedure   Seleccionar(Sender: TObject);
    procedure   MostrarMaestro(Sender: TObject);

    property    DataType: TprxEditDataType read FDataType write FDataType;
    property    DataControl: String read FDataControl write FDataControl;

    property    Images: TImageList read FImages write SetImages;
  published
    property    OnEnterField: TprxADOOnEnterField read FOnEnterField write FOnEnterField;
    property    OnExitField: TprxADOOnExitField read FOnExitField write FOnExitField;
  end;

FFieldXTD: Tfva_campos_item

Propiedad que guarda referencia al campo del dataset asociado al control de edición.

FDataType: TprxEditDataType

Guarda el tipo de dato: edtCombo, edtAlpha, edtInteger, edtFloat o edtBoolean.

FOnEnterField: TprxADOOnEnterField

Permite definir una referencia al procedimiento que debe manejar el OnEnter.

FOnExitField: TprxADOOnExitField

Permite definir una referencia al procedimiento que debe manejar el OnExit.

Implementación

function TprxDBEditCreate(AOwner: TComponent; aDataSource: TDataSource; aFieldName: String; aImages: TImageList = nil): TprxDBEdit

Esta función está definida fuera de la clase y sirve para crear un nuevo control de edición directamente.

procedure Loaded

El procedimiento Loaded se ejecuta cuando un form ya se ha instanciado y está listo para mostrarse al usuario, inicializa algunas de las propiedades.

Inicializa el campo Tfva_campos_item al que está asociado:

FieldXTD := TprxADODataSetEdit(DataSource.Dataset).FieldsXtdList.FieldByName(DataField);

TprxADODataSetEdit(DataSource.Dataset).FieldsXtdList.AssignEditControl(DataField, Self);

Suscribe a los mensajes de dataset:

TprxADODataSetEdit(DataSource.Dataset).Messages.Subscribe(Self, DataField);

Inicializa OnEnter y OnExit a los definidos en el TprxADODataSetEdit:

OnEnterField := TprxADODataSetEdit(DataSource.Dataset).OnEnterFieldXtd;
OnExitField  := TprxADODataSetEdit(DataSource.Dataset).OnExitFieldXtd;

Si el campo es requerido lo pinta de verde:

if FieldXTD.Requerido then
   Self.Color := clMoneyGreen;

procedure CMEnter(var Message: TCMENTER)

Ejecutado en el OnEnter del control de edición, normalmente cuando se recibe el mensaje TCMENTER.

Antes que nada, ejecuta el procedimiento asociado a OnEnterField, luego sigue con su propia programación que no es mucha.

procedure CMExit(var Message: TCMExit)

Ejecutado en el OnExit del control de edición, normalmente cuando se recibe el mensaje TCMEXIT.

Una de las cosas más relevantes es llamar a la función de validación del campo, esa función está en Tva_campos_item.EDIT_VALIDATE.

Finalmente llama al procedimiento asociado a OnExitField.

procedure CNKeyDown(var Message: TWMKeyDown)

Ejecutado cuando el usuario presiona una tecla, atrapa las siguientes (sino deja que el código fluya):

  • VK_RETURN (la tecla ENTER) y acciona un VK_TAB para avanzar al siguiente campo.
  • VK_F5 (la tecla F5) llama a la función de Seleccionar.
  • VK_F9 (la tecla F9) muestra la pantalla de maestro asociada al campo enfocado (por ejemplo: si estamos en la pantalla de artículos, sobre el campo familia, si presionamos F9 iremos directo a la pantalla de familias de artículos).

procedure FieldMessage(var Message: TprxADODataSetMessage)

Recibe y procesa mensajes de la aplicación, los mensajes son:

  • msgInsert el dataset se pode en modo insert para ingresar un nuevo registro.
  • msgEnable habilita (o deshabilita) un control según el estado que tenía.:
  • msgScroll cambia el registro, no hace nada.
  • msgDisable deshabilita el control.
  • msgFocus pone el foco sobre el control (si el control lo admite).
  • msgFindFocus si el control puede enfocar lo hace.
  • msgTabStop indica al conmtrol de edición que el control puede ser enfocado.

procedure LocalKeyPress(Sender: TObject; var Key: Char)

Procesa el teclado previo a cualquier otra función, hace limpieza de caracteres según el tipo de dato (por ejemplo: si el dato es numérico impide cualquier caracter que no sea un número).procedure

TprxDBEdit.Seleccionar(Sender: TObject)

Llama directamente a la función Tva_campos_item.EDIT_SELECT.