Diferencia entre revisiones de «TprxDBComboBox»
(Página creada con «=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. miniaturadeimagen|no|Combobox en la pantalla de cuentas. 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…») |
|||
Línea 68: | Línea 68: | ||
===function TprxDBComboBoxCreate(aOwner: TComponent; aDataSource: TDataSource; aFieldName: String): TprxDBComboBox=== | ===function TprxDBComboBoxCreate(aOwner: TComponent; aDataSource: TDataSource; aFieldName: String): TprxDBComboBox=== | ||
Función definida fuera de la clase usada para crear componentes de este tipo. | 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: | |||
<pre> | |||
TprxADODataSetEdit(DataSource.Dataset).Messages.Subscribe(Self, DataField); | |||
TprxADODataSetEdit(DataSource.Dataset).FieldsXtdList.AssignEditControl(DataField, Self); | |||
</pre> | |||
Inicializa OnEnter y OnExit a los definidos en el [[TprxADODataSetEdit]]: | |||
<pre> | |||
OnEnterField := TprxADODataSetEdit(DataSource.Dataset).OnEnterFieldXtd; | |||
OnExitField := TprxADODataSetEdit(DataSource.Dataset).OnExitFieldXtd; | |||
</pre> | |||
Finalmente carga los elementos del combo: | |||
<pre> | |||
if TprxADODataSetEdit(DataSource.Dataset).FieldsXtdList.FieldByName(DataField) <> nil then | |||
begin | |||
CargarElementos(False); | |||
end; | |||
</pre> | |||
===procedure CMEnter(var Message: TCMENTER)=== | |||
Llama al '''OnEnterField''' y poco más. | |||
===procedure CMExit(var Message: TCMExit)=== | |||
Llama al '''OnExitField''', si el resultado es True sigue normalmente, sino vuelve a setear foco en el control. | |||
===procedure FieldMessage(var Message: TprxADODataSetMessage)=== | |||
Recibe y procesa mensajes de la aplicación, los mensajes son: | |||
*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. | |||
===procedure CNKeyDown(var Message: TWMKeyDown)=== | |||
Atrapa la tecla VK_RETURN (ENTER) y avanza al siguiente control. |
Revisión del 19:31 23 may 2025
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 CMEnter(var Message: TCMENTER)
Llama al OnEnterField y poco más.
procedure CMExit(var Message: TCMExit)
Llama al OnExitField, si el resultado es True sigue normalmente, sino vuelve a setear foco en el control.
procedure FieldMessage(var Message: TprxADODataSetMessage)
Recibe y procesa mensajes de la aplicación, los mensajes son:
- 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.
procedure CNKeyDown(var Message: TWMKeyDown)
Atrapa la tecla VK_RETURN (ENTER) y avanza al siguiente control.