Una colección de componentes VCL/LCL para Delphi 2009 - 11.0 Alexandria y Lazarus
JPPACK es una pequeña colección de componentes VCL para componentes de Delphi y LCL para Lázaro y CodetyPhon.
Versiones compatibles de Delphi: 2009 , 2010 , xe , xe2 , xe3 , xe4 , xe5 , xe6 , xe7 , xe8 , 10.0 Seattle , 10.1 Berlín , 10.2 Tokio , 10.3 Río , 10.4 Sydney , 11.0 Alexandria .
Lázaro : versión FPC requerida 3.0.4 3.2.0 o más nuevo (probado en Lazarus 2.0.10 + FPC 3.2.0, Lazarus 2.2.0 + FPC 3.2.2 y Lazarus 2.2.2 + FPC 3.2.2). CodetyPhon : Probado en CodetyPhon 7.7 R2202141933 con FPC 3.3.1 R2202141933

Estos componentes se crearon en unos pocos años, se modificaron, mejoraron repetidamente y se extendieron con las funciones necesarias en la implementación de proyectos específicos. En general, hay un pequeño caos, pero creo que todo funciona bien (¡espero!).
No soy un experto en escribir componentes VCL y me ayudé a mí mismo analizando los códigos de origen (y usando fragmentos) de varios componentes Delphi gratuitos, especialmente componentes de Cindy y componentes PNG.
Algunas de las funciones y procedimientos relacionados con el procesamiento de gráficos se tomaron de los componentes de Cindy . Las rutinas relacionadas con el gradiente se tomaron casi por completo de este paquete (archivo VCL.cyGraphics.pas ).
El autor de Cindy Component S es Júlio Maurício Antunes Piao. Las fuentes están disponibles en https://sourceforge.net/projects/tcyComponents/ En los archivos de origen en los que uso funciones escritas por Júlio, he agregado información relevante con un enlace a su página.
Después de largas y feroces batallas con varios botones de diferentes paquetes de componentes para Delphi (comercial y gratuito), finalmente encontré las que muestran los archivos PNG correctamente: TPNGBITBTN y TPNGSpeedButton del paquete PNGComponents . Nunca he tenido problemas con ellos, a diferencia de muchos, muchos otros. Por esta razón, en la implementación de mis botones, decidí confiar en el código de este paquete.
El autor original del paquete PNGComponents es Martijn Saly ( www.thany.org ). El proyecto es actualmente mantenido por Uwe Raabe. Las fuentes están disponibles en https://github.com/uweraabe/pngcomponents
En la carpeta de terceros, puede encontrar el archivo zip con los componentes PNG ver. 1.4.1. Esta es la última versión de los componentes PNG disponibles al escribir este documento y funciona bien con el JPPack .
2020.08.31 - La versión de GitHub también funciona bien.
Cada componente visual en el paquete JPPACK admite el anclaje de componentes externos utilizando la propiedad AnchoredControls .
Puede anclar componentes externos a cualquier borde. Cuando cambia el tamaño o la posición del componente principal, la posición de los componentes anclados se actualizará automáticamente.

La mayoría de los componentes en el paquete JPPack tienen la propiedad TagExt . Aquí puede almacenar un valor entero ( IntValue ), string ( StrValue ), número de flotación ( RealValue ), puntero ( PointerValue ) y fecha ( DateValue ). Los primeros tres valores están disponibles en el Inspector de Objetos y en el código, los dos últimos, solo en el código.
Valores predeterminados:
| Propiedad | Valor predeterminado |
|---|---|
TagExt.IntValue | 0 |
TagExt.StrValue | '' (cadena vacía) |
TagExt.RealValue | 0 |
TagExt.PointerValue | nil |
TagExt.DateValue | Now |
Un panel altamente personalizable. TCustomPanel descendiente. Fue escrito sobre la base de uno de los paneles incluidos en el paquete de componentes Cindy (pero no recuerdo exactamente cuál).

El panel se divide en dos partes: superior e inferior. Para cada uno de ellos puede definir colores (gradiente o sólido) por separado.
Todos los bordes de panel están configurados por separado. Puede establecer diferentes colores, grosor, estilo, visibilidad para cada borde.
El panel tiene un soporte incorporado para la colección ilimitada de subtítulos. Cada título tiene su propia Font: TFont , y puede centrarse o colocarse en relación con las esquinas del panel.
Además, el TJppPanel tiene un soporte incorporado para la colección ilimitada de líneas horizontales, líneas verticales y barras horizontales.
Más información ...
Una versión truncada del TJppPanel . No tiene colecciones incorporadas de subtítulos, líneas verticales, líneas horizontales y barras horizontales.
Una versión truncada del TJppBasicPanel . DrawTopBorder solo DrawLeftBorder gradiente, todos DrawBottomBorder bordes tienen DrawRightBorder Appearance color ( Appearance.BorderColor .
Este panel es excelente para crear un diseño básico de UI.
Panel colapsible altamente personalizable basado en el panel TJvRollOut del paquete JVCL https://github.com/project-jedi/jvcl/blob/master/jvcl/run/jvrollout.pas
Licencia original: MPL 1.1
Mis modificaciones: dominio público

Puede colocar paneles alineados en la ScrollBox para simular CategoryPanelGroup de Delphi.
TCustomPanel descendiente
Panel estándar con soporte de anclaje de componentes.
Actualmente solo para Delphi .
TJppPngButton es un botón TPngBitBtn extendido desde el paquete PNGComponents .

El botón puede estar en uno de los cinco estados : normal , caliente , hacia abajo (presionado), enfocado y deshabilitado . Para cada estado, puede establecer una gama completa de parámetros de visualización: gradiente superior e inferior/color sólido (de manera similar al TJppPanel ), color del borde, estilo y ancho, parámetros de fuente (color, nombre, tamaño, estilo).
Si desea que se muestre el botón en los colores del sistema, establezca Appearance.DefaultDrawing la propiedad. DefaultDrawing a True (todos los colores personalizados definidos en la Appearance.<STATES> será ignorado).
El número de todos los colores para todos los estados de botones es realmente grande, por lo que decidí facilitar la administración de los colores mostrados utilizando esquemas de color listos para usar (mapas de color).
He creado 36 esquemas de color diferentes para TJppPngButton . Para cambiar el esquema de color activo, seleccione uno de los esquemas disponibles en la propiedad ColorMapType en el inspector de objetos .
Los esquemas de color se pueden editar con el programa TJppPngButton Color Maps Designer , que se encuentra en el repositorio en el directorio demos .
Más información ...
Actualmente solo para Delphi .
Este botón es una versión ligeramente truncada del TJppPngButton . Tiene solo un gradiente para cada estado de botón y no admite esquemas de color.
Actualmente solo para Delphi .
Similar a TJppBasicPngButton pero con soporte para la subcaptación.

Este botón es muy similar a TJppBasicPngButton , pero se basa en TGraphicControl , por lo que no se enfoca (no tiene un estado enfocado ).
TCustomComboBox descendiente.
Propiedades adicionales:
AnchoredControlsBoundLabel - Etiqueta interna.Flash - Opciones intermitentes. Para encender el flasheo, llame al método FlashBackground en el código.ShowLabel - Show / Hide Bound Etiqueta.TagExt TCustomComboBoxEx Descendente.
Se corrigió el error de altura del artículo en versiones de Delphi más antiguas.

Propiedades adicionales:
AnchoredControlsBoundLabel - Etiqueta interna.Flash - Opciones intermitentes. Para encender el flasheo, llame al método FlashBackground en el código.ShowLabel - Show / Hide Bound Etiqueta.TagExtItemIndex publicadoActualmente solo para Delphi .
Combobox altamente personalizable basado en TFlatComboBox
https://github.com/jackdp/flatstyle/blob/master/source/tflatcomboBoxunit.pas

Un Combobox altamente personalizable que muestra una lista de colores predefinidos y/o definidos por el usuario.




TJppColorComboBox tiene 4 componentes incorporados: una etiqueta y 3 botones para cambiar, copiar y pegar color.
Los colores se pueden mostrar en tres formatos: RGB INT (por ejemplo, 051,102,255), RGB Hex (por ejemplo, #3366FF) y BGR HEX (por ejemplo, $ 00FF6633). Si necesita mostrar el color en un formato diferente, puede hacerlo en el controlador de eventos OnGetColorStrValue .
Además de los elementos estándar (que muestra color) también puede agregar separadores y elementos de Changecolor .
Cada color seleccionado por el usuario, pero aún no en la lista de color, se puede agregar automáticamente al final o la parte superior de la lista. Gracias a esto, el usuario de su aplicación tiene acceso al historial de colores previamente seleccionados.
Más información ...
Un cuadro de lista altamente personalizable que muestra una lista de colores predefinidos y/o definidos por el usuario.


Es muy similar a TJppColorComboBox , pero no tiene componentes incorporados.
TJPPColorSWatch es un componente que muestra el color y su valor (código) en dos formatos.

Consiste en tres partes: un rectángulo que muestra el color (a la izquierda) y dos rectángulos con los códigos del color seleccionado. Cada parte se puede ocultar, por lo que puede, por ejemplo, mostrar solo un rectángulo con un color o solo el código de color en el formato seleccionado.
Formatos de color disponibles:
| Formato | Ejemplo |
|---|---|
ctBgr | 128,064,032 |
ctCmyk | 075,050,000,050 |
ctCppHex | 0x00804020 |
ctHslCss | 220,60%,31% |
ctHslWin | 146,144,075 |
ctHtml | #204080 |
ctPascalHex | $00804020 |
ctPascalInt | 8405024 |
ctRgb | 032,064,128 |
ctRgbPercent | 13%,25%,50% |
Si desea mostrar el código de color en algún otro formato, puede hacerlo en el controlador de eventos OnGetTopColorStrValue (para el código de color superior) y OnGetBottomColorStrValue (para la parte inferior).
TJPPColorSWatchex es una versión extendida del TJPPColorSWatch . Tiene una etiqueta incorporada ( BoundLabel ) y tres botones: ButtonChangeColor , ButtonCopyColor y ButtonPasteColor .
BoundLabel es una etiqueta estándar (descendiente TCustomLabel ) y se puede mostrar a la izquierda, derecha, arriba o debajo del componente. Los botones se heredan de la clase TJppBasicSpeedButton , por lo que puede establecer libremente los colores para todos los estados de botón (normal, caliente, abajo, desactivado) y el icono PNG.
Una barra de progreso altamente personalizable basada en JVSpecialProgress del paquete JVCL, pero con muchas de mis modificaciones. https://github.com/project-jedi/jvcl/blob/master/jvcl/run/jvspecialprogress.pas

Mis modificaciones:
Apariencia
Aquí puede modificar muchos parámetros relacionados con la apariencia del control: el color de la barra de fondo y el progreso (sólido o gradiente), color y tamaño del borde, fuentes (para el estado normal y discapacitado), alineación de texto (superior izquierda, top-top, superior derecho, izquierda, centro ...), prefijo y postfix, sombra de texto y más. A diferencia de la barra de progreso estándar, TJPPProgressBar también le permite establecer los colores que se muestran cuando el componente está deshabilitado.
Endmarker: un rectángulo dibujado al final de la barra de progreso.
TextDisplayMode: posición, porcentaje, posición en píxeles, subtítulos o ninguno.
Etapas: Medio y final: puede hacer correcciones de color aquí.
ProgressBarVisible: aquí puede bloquear la barra de progreso para mostrar y solo mostrar el texto.
Controlos anclados
Puede fijar un control externo (por ejemplo, Tbutton, TEDIT) a cada borde de un componente.
BoundLabel - Etiqueta interna
UpdatePositionIfDisable: aquí puede decidir si actualiza la barra de progreso cuando el componente está deshabilitado.
OnProgressChanged
Activado cuando cambia la posición actual. Puede realizar algunas acciones adicionales aquí.
Tagext
Actualmente solo para Delphi .
Un componente de pista HTML ligero para Delphi (en Lázaro se compila pero no funciona).

Este componente fue creado combinando dos unidades Pascal:
TflathIntunit.pas del paquete FlatStyle
https://github.com/jackdp/flatstyle/blob/master/source/tflathintunit.pas
Licencia: GRATIS (sin información adicional)
Hthint.pas del paquete jvcl https://github.com/project-jedi/jvcl/blob/master/jvcl/install/jvclinstall/helpers/hthint.pas
Licencia: MPL 1.1
Licencia para mis modificaciones: sin licencia (dominio público)
TJPPHTMLHINT no es un componente HTML con todas las funciones. Este es un componente liviano y muy simple con soporte para solo unas pocas etiquetas HTML, además, con una sintaxis ligeramente inusual.
Etiquetas compatibles:
B - <b>bold text</b>
I - <i>italic</i>
U - <u>underline</u>
S - <s>strike out</s>
C : Color - Color de texto, EG: <c:clRed>text</cl> , <cl:Red>text</c> , <c:#FF0000>text</c> , <c:255,0,0>RGB color</c>
BG : Color - Color de fondo, por ejemplo. <bg:clYellow>yellow background</bg>
IND : X - EMBARDO DE LA POSICIÓN ACTUAL. eg. <ind:10>
Aind : x - sangría absoluta, por ejemplo. <aind:20>
FS : X - Tamaño de fuente, por ejemplo. <fs:12>some text</fs> , <fs:+4>text</fs>
FN : Nombre - Nombre de la fuente, por ejemplo. <fn:Verdana>text</fn> , <fn:Courier New>text</fn> , <fn:default>restore default font</fn>
Metacolor (o colores de modo): colores tomados de la Appearance.DarkModeColors Darkmodecolors o Appearance.LightModeColors
Ejemplo: <c:mclDarkBlue><bg:mclLightGray>dark blue text on light gray background</bg></c>
Entidades HTML: consulte la función ReplaceHtmlEntities en el archivo JPP.HtmlHint.pas .
TCustomLabel descendiente.
Propiedades adicionales: AnchoredControls, TAGEXT.
Basado en TJppLabel .
Propiedades adicionales: Sombra para estado habilitado y deshabilitado, color de subtítulos deshabilitados, borde (color, tamaño, estilo), relleno.

TCustomLabel descendiente.
Etiqueta con fuentes adicionales ( TFont ) para 5 estados: normales , visitados normales , calientes , visitados y discapacitados .
Después de hacer clic, puede abrir la URL en el navegador predeterminado, ejecutar el archivo con ShellExecute o realizar una acción desde TactionList .
Más información ...
Un componente de etiqueta compuesto por 3 partes:
Caption de la propiedad)RightCaption )Basado en tpegtoPlinelabel de componentes comunes de PEGTOP escritos por Jens Gruschel (http://www.pegtop.net/delphi/components/common/index.htm).



Mis modificaciones:
Annex renombrado a RightCaptionJpp La RightCaption tiene su propia fuente, fondo y color de borde. La RightCaption se puede colocar verticalmente por RightCaptionPosDeltaY . La línea se puede colocar verticalmente por LinePosDeltaY . La longitud de la línea se puede modificar mediante LineSizeDeltaX1 y LineSizeDeltaX2 . Si AutoHeight = True , la altura del componente se calculará y aplicará automáticamente.
Un componente de etiqueta simple compuesto por 2 subtítulos: izquierda ( Caption de propiedad) y derecha (propiedad RightCaption ).

El espacio entre los subtítulos se puede modificar utilizando la propiedad Spacing . Basado en TJPPDOOBLELINELABEL .
Un componente de edición derivado de TCustomEdit .

Propiedades adicionales:
AnchoredControlsAppearance : aquí puede establecer el fondo y el color de la fuente para cuatro estados: normal, caliente, enfocado, discapacitado.BoundLabel - Etiqueta internaFlash - FlashColor , FlashCount , FlashInterval . Para encender el flashing, llame al método FlashBackground . Esta función se puede usar para indicar al usuario de un valor incorrecto.ShowLabel - Show / Hide Bound Etiqueta.TagExt - Etiqueta extendida. Actualmente solo para Delphi .
Similar a TJppEdit , pero también tiene la capacidad de definir los colores del borde.
Métodos de dibujo de borde basados en TFlatEdit del paquete plano https://sourceforge.net/projects/flatstyle/

TCustomMemo descendiente.
Propiedades adicionales:
AnchoredControlsAppearance : aquí puede establecer el fondo y el color de la fuente para cuatro estados: normal, caliente, enfocado, discapacitado.BoundLabel - Etiqueta internaFlash - FlashColor , FlashCount , FlashInterval . Para encender el flashing, llame al método FlashBackground . Esta función se puede usar para indicar al usuario de un valor incorrecto.ShowLabel - Show / Hide Bound Etiqueta.Text - Fácil acceso a Lines.TextTagExt - Etiqueta extendida. Similar a TJppMemo , pero también tiene la capacidad de definir los colores del borde.
Métodos de dibujo de borde basados en TFlatMemo del paquete plano https://sourceforge.net/projects/flatstyle/

Una TCheckBox estándar con el soporte TagExt y AnchoredControls .
Un TRadioButton estándar con el soporte TagExt y AnchoredControls .
Un TDateTimePicker estándar con el soporte de BoundLabel , TagExt y AnchoredControls .
Solo Windows
Lázaro y Delphi x2 o más nuevo.
Selector de estilo GDI+ Hatch altamente personalizable con BoundLabel y AnchoredControls .

Una caja combinada altamente personalizable con una lista de estilos de pincel.

El estilo actual se puede leer/establecer utilizando la propiedad Selected .
El nombre de la pantalla de estilo de pincel se puede cambiar en el controlador de eventos OnGetDisplayName .
El TJPPBRUSHStyLecomboBox tiene una etiqueta incorporada ( BoundLabel ).
Un cuadro combinado altamente personalizable con una lista de estilos de lápiz.

El estilo actual se puede leer/establecer utilizando la propiedad Selected .
El nombre de la pantalla de estilo de la pluma se puede cambiar en el controlador de eventos OnGetDisplayName .
El TJPPPenStylecomboBoBOX tiene una etiqueta incorporada ( BoundLabel ).
Un componente TTimer estándar con algunas propiedades y métodos adicionales:
RepeatCountLimit Propiedad. Aquí puede establecer cuántas veces se puede alcanzar el intervalo de tiempo especificado en la propiedad Interval . El valor 0 significa que no hay límite.Counter . Cada vez que el intervalo de tiempo especificado en la propiedad Interval expira, la propiedad Counter se incrementa en 1. Cuando el Counter alcanza el valor de RepeatCountLimit , se detiene el temporizador y se desencadena el controlador de eventos OnRepeatCountLimitReached (si se asigna).ClearCounterOnStart Propiedad. Si se establece en True , entonces el método Start restablece el Counter .Start . Conjuntos Enabled para True . Si ClearCounterOnStart se establece en True , el Start establece la propiedad Counter en 0 .Stop . Establece el Enabled en False .OnRepeatCountLimitReached : disparado cuando el Counter alcanza el valor de RepeatCountLimit . Ejemplo: Mostrar el mostrador cada segundo. Muestre el mensaje después de 10 segundos y apague el Timer .
procedure TForm1.FormCreate (Sender: TObject);
begin
JppTimer1.Interval := 1000 ;
JppTimer1.RepeatCountLimit := 10 ; // JppTimer1 will stop automatically after 10 seconds.
JppTimer1.Start;
end ;
procedure TForm1.JppTimer1Timer (Sender: TObject);
begin
Label1.Caption := JppTimer1.Counter.ToString;
end ;
procedure TForm1.JppTimer1RepeatCountLimitReached (Sender: TObject);
begin
ShowMessage( ' 10 seconds elapsed! ' );
end ; Un componente no visual que puede almacenar cualquier cantidad de imágenes PNG. Puede asociarse con un componente de tiempo externo.
A diferencia de Timagelist , cada imagen puede tener un tamaño diferente. Las imágenes se almacenan internamente como PNG, no mapas de bits, lo que reduce el tamaño del archivo DFM. Por supuesto, suponiendo que las imágenes PNG se compriman.
Las imágenes PNG se pueden agregar en el Inspector de Objetos o en el código utilizando AddPngImage , AddImageFromFile o Items.Insert Métodos de Insert:
...
var
Png: TPngImage;
begin
Png := TPngImage.Create;
try
Png.LoadFromFile( ' C:image.png ' );
JppPngCollection.AddPngImage(Png);
// OR
// JppPngCollection.AddPngImageFromFile('C:image.png');
finally
Png.Free;
end ;
end ; El método AddPngImage agrega una copia de la imagen PNG, por lo que usted es responsable de liberar el objeto Png en el ejemplo anterior.
Para recuperar una imagen PNG de una colección, puede usar los métodos: GetPngImage , GetPngImageByName o Items[Index].PngImage .
Hay propiedades adicionales asociadas con cada imagen de PNG en la colección:
Name : string;
Description: string;
Tag: integer;
Enabled: BooleanY leer solo propiedades:
Width: integer;
Height: integer; ¡Importante! Los objetos TPNGIMage se crean automáticamente al crear elementos de recolección. Si desea verificar si algún elemento de la colección tiene una imagen PNG asignada, no puede hacerlo comparando con NIL . Debe usar el método TPngImage.Empty :
// Improperly
if JppPngCollection.Items[ 0 ].PngImage <> nil then ... // <-- Always returns True // Properly
if not JppPngCollection.Items[ 0 ].PngImage.Empty then ... // OK, image assigned TJppStorageCtrl es un componente no visual que le permite almacenar información de diferentes tipos en la recopilación. Cada elemento de la colección almacena los siguientes datos:
Los elementos son accesibles del inspector de objetos utilizando la propiedad StorageCollection . Los valores de cada elemento de la colección, excepto los punteros, también se pueden establecer en el inspector de objetos . Los valores del puntero solo se pueden establecer en el código y se inicializan de forma predeterminada a nil .
Para acceder a los elementos de la colección en el código, puede usar la propiedad Items , por ejemplo:
JppStorageCtrl.Items[ 0 ].IntValue1 := 1 ;
JppStorageCtrl.Items[ 0 ].PointerValue1 := SomePointer; Pero, dado que Items están configurados como la propiedad predeterminada , puede escribirla simplemente:
JppStorageCtrl[ 0 ].IntValue1 := 1 ;
JppStorageCtrl[ 0 ].PointerValue1 := SomePointer;Este componente puede ser útil si desea tener acceso a algunos datos globales, y no desea crear variables globales.
A veces uso este componente en las primeras etapas de las aplicaciones de escritura. En etapas posteriores, una mejor manera de almacenar y administrar datos es diseñar registros especializados, clases, matrices, contenedores genéricos/de puntero, etc.
Un componente no visual que le permite almacenar la recopilación de cadenas con datos adicionales. Cada elemento de la colección tiene las siguientes propiedades:
ItemName: string;
Value : string;
Enabled: Boolean;
Tag: integer;Antes de instalar el paquete JPPACK , primero debe instalar los siguientes paquetes:
Si ha instalado los componentes PNG utilizando el Administrador de paquetes GetIT , probablemente tendrá que cambiar el nombre PngComponents a PngComponentsD en el archivo jppack.dpk .
En la carpeta de paquetes puede encontrar paquetes de instalación para todas las versiones de Delphi de Delphi 2009 a 10.4 Sydney . Vaya a la subcarpeta con el nombre de su versión de Delphi (por ejemplo, Delphi_XE7 para la versión XE7) y abra el archivo JPPack.dproj o JPPack.dpk . En el administrador del proyecto , haga clic con el botón derecho en el archivo JPPack.bpl , luego seleccione Install en el menú emergente. Después de un corto tiempo, debe aparecer un mensaje que muestra información sobre la instalación correcta del paquete y con la lista de componentes recién instalados. Todos los componentes pueden encontrar en la página JPPACK en la paleta de herramientas .
También puede compilar el paquete para el objetivo Win64 .
Después de instalar el paquete, es mejor agregar la carpeta source a la ruta de la biblioteca :
Tools de menú -> Options .Environment Options -> Delphi Options -> Library .; (Semicolon) y la ruta al directorio source . Primero, instale el paquete JPLIB en https://github.com/jackdp/jplib
En Windows, también instale el igdiplusmod desde https://github.com/jackdp/igdiplusmod
Abra el archivo de paquete ( packagesLazarusjppacklcl.lpk ) en el IDE Lazarus. Haga clic en Compile del botón y luego Use -> Install y reconstruir IDE. Todos los componentes pueden encontrar en la página JPPACKLCL en la paleta de componentes .
Instale el paquete JPLIB en https://github.com/jackdp/jplib
En Windows, también instale el igdiplusmod desde https://github.com/jackdp/igdiplusmod
Abra el archivo de paquete ( packagesCodeTyphonjppacklcl.ctpkg ) en el IDE Typhon. Haga clic en Compile package botones (botón 2-ND en la barra de herramientas) luego haga clic en el botón 3-RD, seleccione Install y reconstruir IDE. Todos los componentes pueden encontrar en la página JPPACKLCL en la paleta de componentes .
La licencia para mi trabajo: dominio público. Puedes hacer con mi código lo que quieras sin limitaciones.
Pero, en algunas unidades, uso el código de otros proyectos de código abierto, por lo que debe ver los archivos de origen PAS y la licencia de los autores de estos proyectos para obtener más información.