TprxScrollBox

De Pragma Wiki
Revisión del 17:47 27 may 2025 de Luciano Carou (discusión | contribs.) (→‎Uso)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

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

Scroll box en la pantalla de cuentas.

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:

Dos paneles en una factura.

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:

Títulos en la pantalla de artículos.

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: