Diferencia entre revisiones de «TprxScrollBox»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
(Página creada con «=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. . miniaturadeimagen|no|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…»)
 
Sin resumen de edición
Línea 142: Línea 142:
   end;
   end;
</pre>
</pre>
=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:
[[Archivo:20250523 1536 ADD TITLE.png|miniaturadeimagen|no|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 [[TprxDBEditDateTime]]de 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.

Revisión del 20:46 23 may 2025

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.

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.