TprxScrollBox
Descripción
El objeto TprxScrollBox (Panel de controles de edición) es un panel con barras de desplazamiento verticales y laterales para agregar controles de edición en cualquier pantalla. .

En este ejemplo, el scrollbox es el panel sobre el que se crean los controles de edición:
- Codigo.
- Descripcion.
- Alias.
- Rubro.
Cada uno de esos controles se arma en un panel horizontal:
- A la izquierda se ubica el nombre del campo, cuando el campo tiene clave foránea sobre otro ese título pasa a ser un botón.
- A la derecha se ubica el control de edición del campo.
Identidad
- Ancestro: TScrollBox
- Carpeta: C:\DevelopPrx\library
- Archivo: prxScrollBox.pas
Declaración
Primero se define un record en el que se guardan los campos agregados al panel.
type TprxDBScrollBoxField = record Title: String; DataSource: TDataSource; FieldName: String; LogicalName: String; DefaultButton: Boolean; NombreCampo: String; end;
Luego se declara un record para guardar los paneles que se agregan al scrollbox. Por ejemplo, la pantalla CUENTA tiene un solo panel, pero una factura usa dos:

A la izquierda hay un panel donde se agregan los controles de edición relacionados con el tipo de comprobante, a la derecha hay un panel en el que se agregan los campos relacionados con el proveedor.
La declaración del record es:
type TprxScrollBoxPanel = record FieldName: String; LogicalName: String; NumeroPanel: Integer; Leido: Boolean; Panel: TPanel; Text: TStaticText; TextB: TprxSpeedButton; Button: TprxSpeedButton; ImageIndex: Integer; DefaultButton: TprxSpeedButton; DefaultImageIndex: Integer; Control: TWinControl; end;
Finalmente, se declara el scrollbox:
type TprxScrollBox = class(TScrollBox) private FTitleWidth: Integer; FReadOnly: Boolean; FQuery: TprxADOQuerySelect; FQueryAUX: TprxADOQuerySelect; FDrawImages: Boolean; FTitlesInBold: Boolean; FControlParentColor: Boolean; FFields: array[1..TprxDBScrollBoxFieldMax] of TprxDBScrollBoxField; FFieldsCount: Integer; FValidatingFieldNbr: Integer; FShortFieldNames: Boolean; protected procedure Loaded; override; function Images: TImageList; procedure SendDisableMessage(aControl: TControl; aFieldName: String); procedure AddControl(aFieldName: String; aControl: TWinControl; aImageIndex: Integer; aDefaultButton: Boolean = False); procedure SetTitlesInBold(aValue: Boolean); procedure SetControlParentColor(aValue: Boolean); procedure SetReadOnly(aValue: Boolean); procedure SetDrawImages(aValue: Boolean); procedure SetShortFieldNames(aValue: Boolean); property ValidatingFieldNbr: Integer read FValidatingFieldNbr write FValidatingFieldNbr; public Panels: array[1..TprxScrollBoxPanelMax] of TprxScrollBoxPanel; PanelCount: Integer; constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure AddTitle(aFieldName: String); procedure AddStringField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False); procedure AddFilenameField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False); procedure AddFoldernameField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False); procedure AddIntegerField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False); procedure AddFloatField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False); procedure AddMemoField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False); procedure AddComboBoxField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean); procedure AddDateField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False); procedure AddTimeField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False); procedure AddBooleanField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False); procedure AddTitleArray(aTitle: String); procedure AddFieldArray(aDataSource: TDataSource; aFieldName: String; aLogicalName: String; aDefaultButton: Boolean = False); function FindInArray(aFieldName: String): Boolean; procedure ApplyArray(aFocusFirst: Boolean = False); function MaxHeight: Integer; procedure FocusFirstControl; procedure FocusFieldName(aFieldName: String); procedure EnablePanels(aEnabled: Boolean); function PanelNumber(aControl: TWinControl): Integer; property Query: TprxADOQuerySelect read FQuery write FQuery; property QueryAUX: TprxADOQuerySelect read FQueryAUX write FQueryAUX; property FieldsCount: Integer read FFieldsCount; published property ppTitleWidth: Integer read FTitleWidth write FTitleWidth; property ppTitlesInBold: Boolean read FTitlesInBold write SetTitlesInBold; property ppControlParentColor: Boolean read FControlParentColor write SetControlParentColor; property ppReadOnly: Boolean read FReadOnly write SetReadOnly; property ppDrawImages: Boolean read FDrawImages write SetDrawImages; property ppShortFieldNames: Boolean read FShortFieldNames write SetShortFieldNames; end;
Implementación
procedure AddControl(aFieldName: String; aControl: TWinControl; aImageIndex: Integer; aDefaultButton: Boolean = False)
Agrega un control de edición al panel activo, los argumentos son:
- aFieldName es el nombre del campo.
- aControl es el control de edición que estamos agregando.
- Índice de la imágen, si la usa.
- aDefaultButton indica si debe agregarle un botón a la derecha del control de edición.
Esta función es usada desde dentro del mismo componente.
Agregado de controles de edición estándar
Estos procedimientos corresponden al armado estándar de un scrollbox.
procedure AddTitle(aFieldName: String)
Agrega un título al panel, por ejemplo:

procedure AddStringField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False)
Agrega un control de edición TprxDBEdit para un campo de tipo VARCHAR, usa el procedimiento AddControl.
procedure AddFilenameField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False)
Agrega un control de edición TprxDBEdit para un campo con comportamiento FILENAME, es decir que permite elegir el nombre de un archivo.
procedure AddFoldernameField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False)
Agrega un control de edición TprxDBEdit para un campo con atributo igual a pFOLDERNAME, es decir que permite elegir el nombre de una carpeta.
procedure AddIntegerField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False)
Agrega un control de edición TprxDBEdit para un campo de tipo enteros.
procedure AddFloatField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False)
Agrega un control de edición TprxDBEdit para un campo de tipo FLOAT o NUMERIC.
procedure AddMemoField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False)
Agrega un control de edición TprxDBMemo para un campo de tipo MEMO.
procedure AddComboBoxField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean)
Agrega un control de edición TprxDBComboBox para un campo.
procedure AddDateField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False)
Agrega un control TprxDBEditDateTimede edición de fechas.
procedure AddTimeField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False)
Agrega un control TprxDBEditDateTime de edición de tipo hora.
procedure AddBooleanField(aDataSource: TDataSource; aFieldName: String; DefaultButton: Boolean = False)
Agrega un control de edición {{TprxDBCheckBox]] para un campo de tipo BIT.
Agregado de controles de edición por array
En el agregado por array los controles se agregan a una lista (el array) y luego son creados, es el esquema usado en los frames.
procedure AddTitleArray(aTitle: String)
Agrega un título al array.
procedure AddFieldArray(aDataSource: TDataSource; aFieldName: String; aLogicalName: String; aDefaultButton: Boolean = False)
Agrega un campo al array.
function FindInArray(aFieldName: String): Boolean
Busca un campo en el array, retorna True si lo encuentra y False si no.
procedure ApplyArray(aFocusFirst: Boolean = False)
Crea los controles del array, para cada registro verifica qué tipo de control crear y lo hace.
Si el argumento aFocusFirst está seteado a True entonces al terminar enfoca el primer control.
Funciones de apoyo
procedure FocusFirstControl
Enfoca el primer control disponible.
procedure FocusFieldName(aFieldName: String)
Setea el foco al control del campo informado en el argumento.
procedure SendDisableMessage(aControl: TControl; aFieldName: String)
Envía un mensaje de deshabilitación a un control.
Uso
Este componente se usa en cualquier forms o frames que necesiten crear controles de edición, estos son:
- TTfvsDBClientFrameGridConsultas, el panel prxScrollBoxCRITERIOS.
- TTfvsDBClientFrameMasterClases, los paneles prxScrollBox_Comentarios y prxScrollBox_Totales.
- TTfvsDBClientFrameScrollBox , paneles prxScrollBoxIZQUIERDO y prxScrollBoxDERECHO.