Saltar al contenido

Crear un nuevo componente combinando dos controles (TEdit y TTrackBar) en Delphi VCL

Luego de de una larga compilación de datos dimos con la respuesta este dilema que tienen muchos usuarios. Te regalamos la solución y esperamos resultarte de mucha apoyo.

Solución:

¿Es la creación de un nuevo componente la mejor estrategia para el uso múltiple de dicha entrada deslizante?

No necesariamente true todo el tiempo. (al menos según mis estándares).

¿Cuál es la mejor forma de crear un componente tan nuevo?

Conozco tres formas de resolver tu problema.

Camino número 1:

crear el componente utilizando el asistente de nuevo componente donde crea dinámicamente el TEdit y el TTrackBar subcomponentes en un TGroupBox descendiente.

lo siguiente es cómo haría eso.

unit Combindedittrack;

interface

uses
  System.SysUtils,
  System.Classes,
  Vcl.Controls,
  Vcl.comctrls,
  Vcl.StdCtrls;

type
  TCombindEditTrack = class(TGroupBox)
  private
     Private declarations 
    FEdit: TEdit;
    FTrackBar: TTrackBar;
    procedure EditOnChangeProc(Sender: TObject);
    procedure TrackBaroOnChangeProc(Sender: TObject);
  protected
     Protected declarations 

  public
     Public declarations 
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
     Published declarations 
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TCombindEditTrack]);
end;

constructor TCombindEditTrack.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  SetBounds(0, 0, 250, 50);
  FEdit := TEdit.Create(Self);
  with FEdit do
  begin
    Text := ''; //<-- you control the appearence here
    Top := 10;
    Left := 10;
    Height := 27;
    Width := 50;
    Parent := Self;
    OnChange := EditOnChangeProc; // your Onchange event handler for the Tedit
  end;

  FTrackBar := TTrackBar.Create(self);
  with FTrackBar do
  begin
    Top := 10; //<-- you control the appearence here
    Left := 60;
    Height := 30;
    Width := 50;
    Parent := self;
    Onchange := TrackBaroOnChangeProc; // your Onchange event handler for the Ttrackbar
  end;
end;

destructor TCombindEditTrack.Destroy;
begin
  FTrackBar.Free;
  FEdit.Free;
  inherited;
end;

procedure TCombindEditTrack.TrackBaroOnChangeProc(Sender: TObject);
begin
  // <-- track bar onchange handling here.
end;

procedure TCombindEditTrack.EditOnChangeProc(Sender: TObject);
begin
  // <-- edit onchange handling here.
end;

end.

Camino número 2:

Use marcos como este (estoy en Delphi 10 Seattle).

  1. Archivo -> Nuevo -> Otro -> (busque marcos en archivos delphi).

  2. Ahora agregue la edición y la barra de seguimiento y configure sus eventos de Onchange.

  3. Guarde la unidad.

  4. en la paleta de herramientas (la sección de componentes estándar), haga clic en el componente de marco.

  5. elija el marco que acaba de crear.

Tendrás una réplica del marco cada vez que lo uses.

Camino número 3:

Use una plantilla de componente como esta (nuevamente estoy en delphi 10 seattle)

  1. Seleccione su ya creado y modificado tedit y ttrackbar.

  2. En el "componente" de la barra de herramientas, haga clic en "crear plantilla de componente".

  3. Ponle un nombre a tu plantilla y presiona OK.

  4. Seleccione la paleta Plantilla y luego su plantilla.

Ahora observe que incluso su código (eventos) también se agregan a su proyecto.

Finalmente

Con el nivel que tengo en Delphi y el IDE, realmente no puedo darte una respuesta clara sobre cuál es la mejor manera, pero sin embargo, he compartido todo lo que sé que podría ayudarte.


editar: Dado que muchos comentarios insisten en que la respuesta debe indicar cuál es la mejor manera de hacer esto. esta es la mejor manera basada en lo siguiente.

pongamos algunos de los key punto que debe tenerse en cuenta al elegir

1. Facilidad para modificar los controles combinados si así lo desea (según mi experiencia, lo hará).

2. tiempo necesario para completar esta tarea (significa el tiempo que le llevará completar completamente la tarea con un mínimo de depuración y codificación).

3. legibilidad general del código fuente.

4. utilidad para el futuro de sus proyectos.

Ahora comencemos a criticar los tres métodos basados ​​en esos criterios.

Camino número 1:

C1(criterio número 1): Simplemente modifique la implementación de origen del componente y cada réplica / uso tendrá los mismos efectos y propiedades. Sin embargo, este no es el caso de la vía número 3.

C2: Depende de su conocimiento de la escritura de componentes, pero para este componente me tomó 5 minutos crearlo y solo soy un principiante en Delphi. Para la depuración, si algo salió mal y el problema está en la implementación del componente, solo necesita solucionarlo una vez (consulte C1)

C3: no hay implementación en el código fuente de su formulario (s) para su componente, solo agréguelo a su formulario y todo está oculto (por ejemplo, agregue un tedit y vaya a ver la implementación en su fuente de formularios).

C4: Estás creando un componente, después de todo, esto te abrirá la puerta para que puedas crear tu propio conjunto de componentes, como los componentes de código abierto Flatstyle o Indy. así que la próxima vez que necesite algo como esto, simplemente colóquelo en su diseñador de formularios y listo.

Camino número 2: marcos

C1: Es como la forma número 1 porque está creando un componente, pero esta vez es visualmente. la modificación del marco de origen cambiará los efectos y las propiedades de las réplicas, también puede agregar un manejo adicional a sus réplicas.

el controlador de eventos del evento Onchange de la réplica es así

procedure TForm1.Frame2Edit1Change(Sender: TObject);
begin
  Frame2.Edit1Change(Sender); //<-- this is the original onchange event you setup at the beginning 
  //<-- you can extra handling here if you want one of the replicas to behave differently than the original  
end;

C2: al mismo tiempo y tal vez más rápido que el camino número 1.

C3: sobre todo, tiene el mismo resultado que el camino número 1.

C4: a diferencia de la forma número 1, no puede usar marcos creados en el proyecto A en el proyecto B. Por lo tanto, su codificación y depuración permanecerán en el proyecto A.

Camino número 3: plantilla de componente.

C1: no estás creando un componente estás creando una repleca /macro de los pasos exactos que siguió en su último proyecto. cambiar uno no cambiará los demás, están separados.

C2: al mismo tiempo y tal vez más rápido que el camino número 1.

C3: cada vez que agregue una plantilla a su formulario, se agregará el código de eventos (no es una buena vista si es un código largo de Onchange).

C4: Puede usar plantillas creadas en el proyecto A en el proyecto B. Sin embargo, lo que escribió en el proyecto A estará en el proyecto B (ver c1) incluso las referencias de variables que no existen en el proyecto B (esto puede ser difícil de depurar y engañoso , considerando el período de tiempo entre cada uso de la plantilla).

Conclusión: Cada una de las formas presentadas consumirá tiempo para codificar y depurar y todas harán la tarea. Sin embargo, en aras de la simplicidad y la reutilización con riesgos mínimos, la forma número 1 es la opción segura aquí porque le dará la oportunidad de actualizar y actualizar de forma segura. también depura más rápido.

Lo bueno también de la forma número 1 es que después de un tiempo olvidará la implementación y cómo funcionan las cosas internamente. Lo único que debe tener en cuenta es el propósito del componente porque se convertirá en uno de los varios componentes que use (no sabe cómo Tedit está implementado y no es necesario, pero aún lo usa en cada proyecto que crea).

según los criterios dados, el Camino número 1 es el mejor.

Quizás usar un control de contenedor que contenga ambos controles sea una alternativa más simple. Estoy usando ccpack para esto.

https://sourceforge.net/projects/ccpack/

Custom Containers Pack (CCPack) es una herramienta integrada y una minibiblioteca de componentes para producir y mantener controles compuestos (o simplemente "compuestos") y otros contenedores (formularios, módulos de datos y marcos). El proceso de construcción de componentes compuestos se parece a la creación de ActiveForm y Frame, pero el resultado es el componente VCL nativo. Puede crear nuevos compuestos como formas habituales.

Eres capaz de añadir valor a nuestro contenido informacional colaborando tu veteranía en las reseñas.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 3.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *