TprxDBEdit
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 Tfva_campos_item.EDIT_SELECT.
procedure MostrarMaestro(Sender: TObject)
Procedimiento que muestra el maestro de datos correspondiente al control de edición del campo que estamos editando, este procedimiento se vincula al botón que hace de título del control de edición.

El código usado para asignar el procedimiento al botón es (en TprxScrollBox):
// Asocia el OnClick del botón a la consulta al maestro del dato actual... if aControl is TprxDBEdit then begin if (TprxDBEdit(aControl).DataControl = 'clase') or (aDefaultButton) then vTextB.OnClick := TprxDBEdit(aControl).MostrarMaestro; end;
Este procedimiento tiene distintos comportamientos según el tipo de campo asociado, y funciona con MostrarMaestroDo.
procedure MostrarCamposCalculadosForm(Sender: TObject)
Muestra el form para administrar los campos calculados durante la edición de un campo de una clase (en catalogo):

procedure MostrarSuscripcionEvaluacionesForm(Sender: TObject)
Muestra el form para suscribir evaluaciones durante la edición de un campo asociado (en catálogo).

procedure SeleccionarPartidas(Sender: TObject)
Abre el form para seleccionar partidas de stock, durante la edición de un registro.
Uso
Es el control de edición más usado en la aplicación.