Archivo

Archivo del autor

Ya disponible la versión 12.3 Athens de Delphi!

lunes, 24 de marzo de 2025 2 comentarios
Share Button

Desde hace unos días (voy un poco tarde, ya lo se… ;-) ) ya está disponible la versión 12.3 (Athens) de Delphi para su descarga. Bastantes novedades y enfocado como en las últimas, en las mejoras y en la estabilidad del IDE.

Un recorrido rápido por la novedades que nos podemos encontrar en esta versión pasa por lo siguiente:

IDE de 64 bits.

Nosotros llevábamos tiempo pidiéndolo y Embarcadero lleva tiempo trabajando en él. Con el IDE de 64 bits desaparecen muchos de los problemas y limitaciones que nos encontramos con el actual IDE de 32 bits. Hay que tener en cuenta que es una primera versión y es una «Initial Release». No debemos perderlo de vista, pero es un comienzo para lo que será una de las mejoras más importante de las últimas versiones. Ahora al acabar la instalación, en el escritorio, nos aparecerá un segundo icono muy similar al de siempre, pero con la marca de 64 bits.

Android target API Level 35

Para los que desarrollan para Android, esta versión incluye la API level 35 y la instalación por defecto añade el NDK 27.1

BLE y Bluetooth

La versión 12.3 se centra en mejorar la calidad de nuestra compatibilidad con Bluetooth en todas las plataformas compatibles.

Smart CodeInsight

Mejoras sobre todo en la integración de modelos de IA en el CodeInsight (nuevo motor que se introdujo en la versión 12.2). A continuación podéis ver  una imagen con las nuevas opciones de configuración para los modelos de IA disponibles.

Mejoras y ampliación de la funcionalidad de la ventana de chat del Smart CodeInsight.

Compilador

El compilador de la versión 12.3 es más rápido y eficiente. Según la documentación las pruebas muestran que esta versión es hasta un 15 % más rápido en tareas comunes. Si formateas los archivos fuente como UTF-8 con BOM, puedes aumentar la velocidad del compilador entre un 5-6 % más. Aunque los resultados pueden variar, podrías ver una mejora de hasta un 20 % en la velocidad de compilación con esta versión.

WebStencils

Mejoras en WebStencils; La biblioteca de plantillas HTML introducida en RAD Studio 12.2, se ha ampliado con nuevas funcionalidades:

  • Permite usar la misma sintaxis para acceder a subtablas en conjuntos de datos anidados.
  • El procesamiento del símbolo «@» es más flexible cuando no está relacionado con una directiva WebStencils.
  • Esta versión mejora la gestión de caracteres UTF8 en RAD Server.

Hay más novedades y podéis consultarlas directamente en la web de Embarcadero.

Además en la wiki de Embarcadero tenéis una lista de errores y correcciones más importantes, para esta versión.

IMPORTANTE!!
Por cierto, todavía estáis a tiempo si queréis registraros en el evento online por parte de Danysoft (partner de Eembarcadero en la península) que se celebra mañana día 25 de Marzo.
«Mira lo que viene en RAD Studio 12.3 Athens» (registro)
Día 25 de marzo de 2025. Hora: 12:00 h CET.

Lo presenta Antonio Zapater, consultor de Embarcadaero y MVP.

Otros artículos relacionados…

Si queréis leer más al respecto, además de la documentación oficial, os dejo links de otras web y blogs relacionados con el lanzamiento.

Un saludo y hasta la próxima.

Función OutputDebugString: Un avance en tu código

miércoles, 12 de marzo de 2025 2 comentarios
Share Button

Muchos de vosotros seguro que ya habéis utilizado esta función de Windows durante el desarrollo y prueba de nuestros programas. Para los que no la habéis utilizado, la definición formal podría ser la siguiente:

«OutputDebugString es una función de la API de Windows que permite enviar mensajes de depuración al visor de depuración de Windows. Estos mensajes pueden ser utilizados para realizar depuración y diagnóstico de aplicaciones en tiempo de ejecución.»

Seguro que todos, en algún momento de nuestra vida como programadores, hemos utilizado un ShowMessage en nuestro programa para mostrar una información de debug (o de log) por pantalla. Esto tiene sus inconvenientes y riesgos, como que en un momento dado se nos haya escapado uno de esos ShowMessage y haya acabado en un cliente final Decepcionado .

Para evitar esos posibles problemas podemos utilizar la función OutputDebugString. Desde Delphi basta con añadir la unit Windows a nuestro código para poder utilizarla.

Por ejemplo, si creamos un proyecto de consola como este y lo ejecutamos:

program Project1;
 
{$APPTYPE CONSOLE}
 
{$R *.res}
uses
  Windows, System.SysUtils;
 
begin
  var i:integer;
  while i < 10 do begin
    OutputDebugString(PChar(' ==» Mensaje ' + i.ToString + ' **'));
    Inc(i);
  end;
end.

Aparentemente al ejecutar nuestro programa no pasa nada, y no vemos nada en pantalla, pero si activamos la ventana de Eventos en el IDE (View / Debug Windows / Events  CTRL+ALT+V) debería salir algo como esto:


En el IDE de Delphi disponemos de muchas herramientas para depurar/debuggar nuestros programas y esta es una de ellas, pero ¿qué pasa cuando no disponemos del IDE? (por ejemplo, porque necesitamos probar un programa en un cliente y obtener información de lo que está pasando).

Podemos utilizar alguna de estas herramientas que nos permiten ver los mensajes de debug (generados con OutputDebugString):

La visualización que obtenemos con esta herramientas es la siguiente:

Dentro de las opcines del IDE (Tools/Options/Debugger) podemos realizar modificaciones en lo que se refiere a los mensajes de debug que podemos visualizar dentro de la ventana de Event log.

Por último una recomendación personal. Para evitar que nuestros mensajes de Debug puedan llegar a una versión de cliente, es buena práctica utilizar condicionales en el código, de esta forma podemos asegurarnos que en nuestros ejecutables compilados en DEBUG, sí aparecen los mensajes, pero los compilador en RELEASE (copias finales de cliente) no aparecen.

Símplemente debéis crear un procedimiento como el siguiente:

procedure _DebugStr(const aMensaje:string);
begin
{$IFDEF DEBUG}
  OutputDebugString(PChar(aMensaje));
{$ENDIF}
end;

 

Hasta aquí esta entrada, que está centrada en el uso de la función y en cómo sacarle partido. Más adelante veremos cómo generar código para capturar estos mensajes y mostrarlos donde nos interese, e incluso una aplicación «a medida» que se ajuste a lo que necesitamos.

Referencias:

Un saludo y hasta la próxima.

 

 

Categories: API, Código, Debug, Delphi, OOP Tags: , , , ,

Componente TFormTabsBar en Delphi (aplicaciones con interfaz de pestañas)

miércoles, 12 de febrero de 2025 2 comentarios
Share Button

Interfaz en pestañasTFormTabsBar es un componente que ha llegado en la versión 12 de Delphi y que nos va a permitir generar nuestra aplicación con una interfaz basada en pestañas como patrón de diseño (además de otras opciones). Este componente del que ya he hablado anteriormente en la entrada que trataba los proyectos con Interfaz MDI. En esta ocación me voy a centrar en una característica que vimos de pasada en aquel artículo, pero que es aplicable a todas nuestras aplicaciones (no sólo las de interface MDI). Aunque posiblemente después de aquella entrada nos haya quedado la sensación de que sólo podemos sacarle partido en los formularios MDI (embarcadero ha creado de nuevo el soporte para este tipo de interface), este componente se puede usar también con aplicaciones SDI.

Para nosotros y de cara a nuestros proyectos, digamos que este componente nos facilita el trabajo de albergar multiples formularios en un interface de usuario basado en pestañas (el exponente más claro de esto son los navegadores actuales).

Leer más…

2 – Descargando una Imagen y creando un contenedor (Docker)

jueves, 17 de octubre de 2024 Sin comentarios
Share Button

Empezamos a trabajar…

En esta segunda entrada de esta serie vamos a ver cómo descargar nuestra primera imagen (SQL Server) y cómo crear un contenedor a partir de ella. Partimos de la entrada anterior donde al acabar ya teníamos instalada nuestra aplicación «Docker Desktop», preparada para empezar.

Os dejo aquí la lista de links a las entradas de la serie, que iré completando a medida que vayan saliendo…

Descargar una imagen

Como he comentado antes, yo voy a utilizar Docker para virtualizar un SQLServer en varias de sus versiones (2107, 2019 y 2022), de esa forma podré «arrancar» un contenedor con cualquiera de estas versiones para probar mi aplicación con ellas.

Esto me evitará tener en mi máquina instaladas estas tres versiones, con el consiguiente espacio de disco ocupado y la consiguiente memoria ocupada (por ejemplo, por los servicios de SQL Server). En general, de esta forma (utilizando contenedores) conseguimos tener nuestra máquina más «limpia».

Aquí os dejo este link con información de las versiones de SQL Server para descargar (Ubuntu).

Para descargar nuestra imagen accederemos a la ventana de Terminal desde Docker y escribiremos el siguiente comando (pedimos la última imagen disponible de mssql 2017):

docker pull mcr.microsoft.com/mssql/server:2017-latest

 

 

Una vez finalizada la descarga deberíamos tener disponible nuestra imagen descargada. Con los datos de tamaño y un pequeño menú a la derecha con algunas opciones básicas.

Todavía no podemos trabajar con nuestro SQLServer, para poder hacerlo necesitamos crear, al menos, un contenedor/instancia a partir de la imagen descargada.

Crear un contenedor a partir de una imagen

Para crear un contenedor o instancia de una imagen y trabajar con ella, necesitamos (o podemos hacerlo) utilizando el comando run. Vamos a ver el comando desde la pantalla de Terminal o la opción visual que nos ofrece Docker.

Si volvemos al link anterior de Microsoft sobre las imágenes de SQLServer, veremos que hay una lista de «variables de entorno» (o parámetros) que debemos usar a la hora de crear nuestro contenedor. No están todas (la lista completa está aquí), pero si las mínimas para funcionar. En este caso tenemos las siguientes:

  • ACCEPT_EULA: Nos permite confirmar la licencia de usuario del producto (usaremos el valor Y -yes-).
  • MSSQL_SA_PASSWORD: Nos permite definir el password para el usuario sa (lo usaremos luego para conectarnos).
  • MSSQL_PID: Nos permite «modificar» la versión con la que se creará el contenedor a partir de la imagen (Evaluation, Developer, Express, Web, Standard, Enterprise (*), EnterpriseCore (*), A product key).

Podemos crear y arrancar nuestro contenedor desde la pantalla de Terminal utilizando el siguiente comando (run); Y posteriormente he lanzado «Docker ps» para ver los contenedores en marcha y en la imagen inferior véis la respuesta:

docker run -p 1433:1433 --name SQLSERVER2017 -e SA_PASSWORD=MiP@assword8888 -e ACCEPT_EULA=Y -e MSSQL_PID=Express -d mcr.microsoft.com/mssql/server:2017-latest

Ahí podéis ver las variables de entorno SA_PASSWORD, ACCEPT_EULA, MSSQL_PID y los valores que les he asignado.

Si queremos hacer lo mismo desde Docker Desktop, basta con pulsar el botón de RUN que hay junto a la imagen y rellenar los parámetros (variables de entorno) en la pantalla que aparece.

El resultado en ambos casos debería ser el mismo, si nos vamos a la sección de [Containers] de la aplicación deberíamos ver nuestro nuevo contenedor de SQL Server 2017 versión Express, en marcha.

Voy además a arrancar una segunda instancia, en este caso con la versión «Developer«; Necesito cambiar el puerto para que no colisionen y además le voy a poner un nombre diferente; Para ello utilizaré el siguiente comando:

docker run -p 14333:1433 --name SQLSERVER2017d -e SA_PASSWORD=MiP@assword8888 -e ACCEPT_EULA=Y -e MSSQL_PID=Developer -d mcr.microsoft.com/mssql/server:2017-latest

Ahora ya tengo las 2 instancias en marcha.

NOTA: Cuando he escrito el artículo he generado las 2 instancias en Inglés, pero posteriormente realizando otras pruebas he añadido el parámetro MSSQL_LCID con el valor 3082 y con eso se consigue tener el servidor en español.

  -e MSSQL_LCID=3082

Conectar a las instancias de SQL Server

Sólo nos queda conectar a las 2 instancias (contenedores) de SQL Server que hemos arrancado, como si estuvieran instalador en nuestro equipo. Para ello voy a hacerlo desde el «Management Studio» como lo hago habitualmente para conectarme a otros servidores y al mio en local.

Utilizaré los siguientes parámetros para conectarme a ambas instancias; Estos para la primera:

.

Y los mismos, pero cambiando el puerto de conexión para la segunda:

.
Ahora que ambas están conectadas podemos ver las propiedades y ver que ambos coinciden con las configuraciones que hemos definido al arrancar nuestros contenedores. Los puertos son el 1433 y el 14333 y las versiones son la Express y la Developer del SQL Server 2017 (versión interna 14.0).

 

Ahora ya podemos conectar nuestra aplicación a cualquiera de nuestras instancias.

Hasta aquí esta segunda entrada. Espero que os haya sido útil. Como siempre los comentarios, sugerencias y críticas son bienvenidas.

Hasta la próxima.

1 – Introducción a Docker. ¿Qué es y cómo nos puede ayudar?

lunes, 30 de septiembre de 2024 2 comentarios
Share Button

Introducción

La idea es crear una serie de entradas para exponer desde cero, qué es Docker, cómo nos puede ayudar a nosotros como desarrolladores y explicar todo el proceso desde cero hasta poderlo utilizar. Empezaré por la instalación y posteriormente veremos cómo configurar un par de ejemplos diferentes (desde la instalación hasta su utilización).

Para todo esto necesitaremos varias entradas. Os iré completando la lista de links a medida que vaya escribiendo cada una de ellas.

¿Qué es Docker?

Hay muchas definiciones en internet sobre docker, si las revisamos incluyen palabras como, contenedores, virtualización, opensource, plataforma, aplicaciones, imágenes,… Todas ellas tienen que ver con el concepto, pero para empezar a entenderlo tal vez son demasiadas…

Al final, si lo tengo que definir con mis propias palabras de la forma más sencilla posible(y seguramente no será la más correcta), sería algo así como:

«Es una plataforma que me permite ejecutar aplicaciones de forma virtualizada. Sería equivalente a tener una máquina virtual, pero sólo para una aplicación.»

Leer más…

Disponible Delphi 12.1 en Versión Community!!!

martes, 6 de agosto de 2024 Sin comentarios
Share Button

La versión Community de Delphi 12,.1 ya está disponible
.

 


Eventos en España

Hace poco tuvimos las presentaciones de Delphi 12 en Madrid y Barcelona por parte de Danysoft y con la presencia de Antonio Zapater de Embarcadero.

Os dejo los links a los eventos de este año, por si queréis saber más y ver algunas fotos.

En ambos eventos salió el tema de que Embarcadero debería hacer el esfuerzo e intentar hacer que la versión Community, estuviera a la par con la última versión de Delphi existente en el mercado. Es una petición que ya llevamos tiempo haciendo desde la comunidad de desarrolladores.

Enlaces

Entiendo que Embarcadero ha tomado nota y un poco después dela salida de la versión 12, ya tenemos la «Community Edition» con la versión 12.1
Aquí os dejo el link al anuncio oficial por parte de Marco Cantú.
Os dejo los 2 links de descarga (tanto para Delphi como para C++ Builder):

Os dejo también los links a la lista de novedades de la versión 12 Atenas y la release 12.1, que no son pocas, por si queréis echarles un vistazo.

Importante

Ya lo he comentado otras veces y no está de más recordarlo. La versión «Community» es una versión prácticamente completa del producto, con la que incluso podéis desarrollar y vender vuestros programas, pero tiene una restricciones en cuanto a licencia e instalación. Antes de instalarla, leedlas atentamente y decicid si debéis y podéis instalarla y utilizarla.

Aquí os dejo el enlace a las preguntas y respuestas en castellano, sobre esta versión:
https://www.embarcadero.com/es/products/delphi/starter/faq

(leed sobre todo el apartado de Licencias y Versiones).

Como siempre los comentarios, sugerencias, aportaciones y críticas son bienvenidas.

Hasta la próxima.

Controlador de Previsualización (PreviewHandler) para imágenes (v.1.0)

lunes, 10 de junio de 2024 3 comentarios
Share Button

ShellPreviewImagesFiles es un controlador de vista previa (PreviewHandler) para las últimas versiones de Windows que admite los tipos de imágenes más habituales actualmente.

Esta herramienta está basada en la serie de entradas que puedes encontrar en este mismo blog sobre la creación de Previews Handler en Delphi.

Los sistemas Windows traen por defecto algunas previsualizaciones incluidas, pero no todos los ficheros de tipos habituales traen una previsualización «de fábrica». Esto pasa con algunos ficheros de imágenes. Esta extensión permite ver previsualizaciones de las siguientes imágenes en el panel de Vista Previa del Explorador de Windows.

Permite trabajar con los siguientes formatos/extensiones:

Extensiones Descripción
.bmp Imagenes de mapas de bits
.jpg, .jpeg Imágenes jpg (Joint Photographic Experts Group)
.png Portable Network Graphics
.gif Graphics Interchange Format
.ico Ficheros de iconos
.wmf, .emf Windows metafiles y Enhanced Windows Metafiles
.tif, .tiff Tagged Image File Format
.svg Gráficos vectoriales (Scalable Vector Graphics)

Para algunas imágenes hacemos un tratamiento especial.

En el caso de las SVG, dado que son imágenes vectoriales que internamente se almacenan como archivos de texto (XML), la previsualización nos permite verlas como imagen (opción por defecto y más habitual), pero si es necesario también como texto.

Debajo se ve una imagen con las 2 previsualizaciones disponibles para un fichero,

En el caso de los ficheros de iconos ICO, que pueden almacenar varias imágenes en diferentes resoluciones, también reciben un comportamiento especial. Se muestra en la previsualización las diferentes imágenes incluida en el fichero de icono, junto con las dimensiones de cada uno de ellos.

Debajo de este texto se ve una imagen de la previsualización de un fichero de icono que incluye dentro varias imágenes de diferentes dimensiones.

Por ahora no necesita librerías de terceros y está totalmente programada utilizando Delphi.

Es de uso libre.

Os aquí el instalador para descarga. Por defecto la instalación se realiza sobre el directorio:
«c:\Program Files (x86)\ShellPreviewExtFiles\»

Download instalador (Windows 32b)

Cualquier duda, comentarios, error,… me lo podéis dejar en los comentarios.

 

 

IV – Instalador para PreviewHandler de imágenes/texto (Inno Setup)

lunes, 3 de junio de 2024 Sin comentarios
Share Button

Continuando con las entradas anteriores, en esta última vamos a crear una extensión para visualizar los tipos de imágenes más habituales y usados en Windows. Además vamos a «redistribuir»  un poco nuestro esqueleto inicial para reorganizar las clases (tal y como comentamos en entradas anteriores); Y finalmente vamos a crear un instalador para poder ofrecer esta extensión de una forma más profesional.

Os adjunto los links de todas las entradas de esta serie, como he hecho en las anteriores:

  1. Crear una Previsualización de ficheros en Windows
  2. «Registros» de una DLL de previsualización
  3. Generando previsualización funcional (PreviewHandler)
  4. Instalador para PreviewHandler de imágenes/texto (Inno Setup)

.

INTRODUCCION

Con todo los visto hasta ahora en las entradas anteriores, vamos a crear una DLL para imágenes de diferentes formatos, modificando un poco el esqueleto del proyecto que teníamos hasta ahora.

Vamos a tratar las extensiones más comunes con las que trabajamos:  bmp, jpg, jpeg, png, gif, ico, wmf, emf, tif, tiff

Además vamos a generar un instalador con Inno Setup que instale (y desinstale cuando sea necesario) nuestra DLL de previsualización. Inno Setup, para los que no lo conozcáis, es un generador de instalaciones para Windows muy potente y totalmente gratuito. En otras ocasiones ya he hablado de él, y a día de hoy es un estándar en generar programas de instalación.

Además de ser sencillo de utilizar, hay multitud de scripts predefinidos y de ejemplo por la web, que podéis utilizar, modificar y adaptar a vuestras necesidades. Para lo que necesitamos nosotros veréis que es sumamente sencillo y fácil.

Leer más…

El Día de los Desarrolladores Delphi y C++ llega a Barcelona

viernes, 31 de mayo de 2024 Sin comentarios
Share Button

Desde Danysoft, organizan de nuevo un evento presencial para la comunidad Delphi/C++Builder donde se hablará sobre las novedades de la última versión, y se presentarás temas de interés y casos de éxito relacionado sobre nuestras herramientas favoritas de Embarcadero.

Después de unos años de eventos online, se hace un esfuerzo para retomar los eventos presenciales. El acceso al registro y a la agende prevista la tenéis en este link. Asisten ponentes de Danysoft, Antonio Zapater de Embarcadero y gente de la comunidad Delphi; Además de una conexión en directo con David Millington (Product Manager de Embarcadero para RADStudio).

 

.

Aquí Los detalles del evento adjunto la Agenda por si queréis echarle un vistazo.
.

Agenda

  • 9:00h: Registro 
  • 9:20h: Presentación y bienvenida
    Bienvenida, presentación de los ponentes y de Danysoft.
  • 9:30h: Novedades de RAD Studio 12.1
    Antonio Zapater, Embarcadero.
    RAD Studio 12.1 es una versión que destaca por la cantidad de mejoras que se incorporan a la extensa lista de herramientas incluidas en Delphi, C++Builder y RAD Server. Realizaremos un recorrido por las principales novedades para conocer de qué forma se han potenciado nuestras capacidades de desarrollo. 
  • 10:15h: El nuevo toolchain de C++Builder
    David Millington, Embarcadero.
    David, Product Manager de C++Builder, se conectará para hablarnos del nuevo entorno de herramientas para C++, y las sinergias del IDE con Delphi. 
  • 10:30h: Dockering BD. ¡Cocina tus datos con Delphi al estilo Heisenberg!
    Jorge Cangas, Danysoft.
    En esta sesión te mostraremos de qué manera Docker facilita el desarrollo de aplicaciones compatibles con diversos entornos de bases de datos, evitando la necesidad de instalar y desinstalar software en tu PC. ¡Una receta digna del propio Heisenberg! 
  • 11:15h: Desarrollo de aplicaciones modernas con RAD Studio 12.1
    Emilio Pérez, Danysoft.
    Hay quien dice que Delphi es antiguo. Pero a lo largo de esta sesión vamos a descubrir muchas “modernidades” que quizás no conocías en Rad Studio 12 y que van a hacer que tu cabeza explote. Durante la sesión veremos términos como Agile, DevOps, Microservicios, Contenedores, Cloud-Native, Automatización, backend-frontend, APIs, seguridad, escalabilidad, experiencia de usuario, accesibilidad y muchos más que referencian al desarrollo de aplicaciones modernas y todo ello haciendo uso de Rad Studio 12.1. 
  • 12:00h: Café
    Un buen momento para charlar con los ponentes, Danysoft y con otros profesionales. 
  • 12:30h: Caso de éxito. Delphi en grandes equipos, GLOBALIA HANDLING
    Victor García Velasco, Responsable Equipo desarrollo Globalia Handling.
    Conoceremos más sobre el equipo de operaciones de Globalia Handling, que nos mostrará un caso de uso real en un proyecto con un gran equipo, y cómo idean el futuro al que dirigirse, todo ello con Delphi como recurso para el desarrollo. 
  • 12:50h: Mesa de expertos
    Antonio Zapater, Emilio Pérez, Jorge Cangas, Germán Estévez (Neftalí), Xavier Martinez (Cadetill).
    Disfrutaremos de la presencia de destacados MVPs de Delphi para conversar sobre los productos de RAD Studio en base a las dudas y consultas de los asistentes. 
  • 13:55h: Cierre y Despedida

Un saludo y para los que podáis asistir, nos vemos allí!!!

III-Generando una previsualización funcional (PreviewHandler)

lunes, 27 de mayo de 2024 Sin comentarios
Share Button

INTRODUCCIÓN

Continuamos con el tema de las 2 últimas entradas. Visto el esqueleto del proyecto y probado que funciona (la carga, descarga y registro de la DLL) ahora nos queda generar una previsualización funcional. Hasta ahora hemos visto que podemos mostrar un formulario «vacío», ahora nos toca programar realmente la carga del fichero (según su tipo).

Os adjunto los links de todas las entradas de esta serie, que iré completando a medida que avance:

  1. Crear una Previsualización de ficheros en Windows
  2. «Registros» de una DLL de previsualización
  3. Generando previsualización funcional (PreviewHandler)
  4. Instalador para PreviewHandler de imágenes/texto (Inno Setup)

.

PROGRAMAR REALMENTE LA PREVISUALIZACIÓN

Con la estructura que tenemos del proyecto anterior, lo único que tenemos que hacer ahora es programar la carga y visualización de la información del fichero en el formato que queramos ofrecerla al usuario.
Para este primer ejemplo vamos a empezar con algo sencillo.
Realizaremos una previsualización de ficheros de log (*.LOG) que vamos a tratar como ficheros de texto plano.

Leer más…