TprxDBComboBox
Descripción
El objeto TprxDBComboBox (Control de edición DB para enumeraciones.) es un control de edición usando cuando el valor del campo se define en Enumeraciones.

El control tiene una caja de edición, y una lista pull-down en la que están los valores posibles, el valor del campo no se tipea, sino que se elige de la lista.
Identidad
- Ancestro: TDBComboBox
- Carpeta: C:\DevelopPrx\library
- Archivo: prxDBComboBox.pas
Declaración
type TprxDBComboBox_GetItems = procedure (aItems: TStrings) of object; type TprxDBComboBox = class(TDBComboBox) private FEnumeration: String; FOnEnterField: TprxADOOnEnterField; FOnExitField: TprxADOOnExitField; FConstraintItems: TStringList; FAllItems: TStringList; FGetItemsCall: TprxDBComboBox_GetItems; 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 procedure SetEnumeration(aValue: String); property ConstraintItems: TStringList read FConstraintItems write FConstraintItems; property AllItems: TStringList read FAllItems write FAllItems; property GetItemsCall: TprxDBComboBox_GetItems read FGetItemsCall write FGetItemsCall; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Loaded; override; procedure SelectItemPublic; procedure CargarElementos(aOnEnter: Boolean); procedure AssignDataSource(aDataSource: TDataSource; aDataField: String; aEnumeration: String); overload; procedure AssignDataSource(aDataSource: TDataSource; aDataField: String; aGetItems: TprxDBComboBox_GetItems); overload; property Enumeration: String read FEnumeration write SetEnumeration; published property OnEnterField: TprxADOOnEnterField read FOnEnterField write FOnEnterField; property OnExitField: TprxADOOnExitField read FOnExitField write FOnExitField; end;
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 TprxDBComboBoxCreate(aOwner: TComponent; aDataSource: TDataSource; aFieldName: String): TprxDBComboBox
Función definida fuera de la clase usada para crear componentes de este tipo.
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.
Suscribe a los mensajes de dataset:
TprxADODataSetEdit(DataSource.Dataset).Messages.Subscribe(Self, DataField); TprxADODataSetEdit(DataSource.Dataset).FieldsXtdList.AssignEditControl(DataField, Self);
Inicializa OnEnter y OnExit a los definidos en el TprxADODataSetEdit:
OnEnterField := TprxADODataSetEdit(DataSource.Dataset).OnEnterFieldXtd; OnExitField := TprxADODataSetEdit(DataSource.Dataset).OnExitFieldXtd;
Finalmente carga los elementos del combo:
if TprxADODataSetEdit(DataSource.Dataset).FieldsXtdList.FieldByName(DataField) <> nil then begin CargarElementos(False); end;
procedure CargarElementos(aOnEnter: Boolean)
Carga los elementos de la enumeración, lo hace desde las tablas de Enumeraciones.
Además, verifica si no existe un CONSTRAINT definido en TpAUX_CAMPO_CONSTRAINT_unit.
procedure CMEnter(var Message: TCMENTER)
Llama al OnEnterField, además llama al procedimiento CargarElementos por si el tipo de enumeración requiere de un refresco en el OnEnter (sql_on_enter).
procedure CMExit(var Message: TCMExit)
Llama al OnExitField, si el resultado es True sigue normalmente, sino vuelve a setear foco en el control.
procedure CNKeyDown(var Message: TWMKeyDown)
Atrapa las teclas:
- VK_RETURN (ENTER) y avanza al siguiente control.
- VK_F5 solo cuando hay una CONSTRAINT definido.
procedure FieldMessage(var Message: TprxADODataSetMessage)
Recibe y procesa mensajes de la aplicación, los mensajes son:
- msgInsert el dataset cambia a inserción.
- msgEdit el dataset cambia a edición.
- msgCancel cancela la inserción o edición.
- msgPost el dataset posteó los cambios.
- msgEnable habilita (o deshabilita) un control según el estado que tenía.
- msgDisable deshabilita el control.
- msgFocus pone el foco sobre el control (si el control lo admite).
- msgFindFocus si el control puede enfocar lo hace.
- msgScroll el dataset cambia de registro.
Uso
Este control se usa cuando el campo elige su valor desde una enumeración, normalmente es instanciado por TprxScrollBox.