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.
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.