cuaderno de bitácora 8.50

Ya puedes descargar la versión 8.50 de Cuaderno de Bitácora,  mi organizador de libros, discos, videos y direcciones de internet. La principal novedad de esta versión es la incorporación de galerías con las imágenes de las portadas de libros, discos y videos. Los mantenimientos de estas colecciones incorporan una nueva opción llamada ‘Galería de portadas’ que permite mostrar un formulario con todas las portadas de los ejemplares de la colección. En caso de tener un filtro activo solo se muestran las portadas de los ejemplares filtrados que se ordenan por la ordenación vigente en la colección. Al hacer dobleclick sobre una portada se edita el ejemplar correspondiente.

Galería de portadas de libros con filtro por materia y ordenados por fecha de compra.

El número de portadas que aparecen en cada fila de la galería se puede personalizar en la opción de Configuración del programa, dentro de la pestaña ‘Valores por defecto’.

Además he añadido otras nuevas funcionalidades y he corregido todos los errores reportados por los usuarios. Las demás novedades de la versión son las siguientes:

  • Añadido el cantante a cada canción en el fichero de canciones
  • Añadida la opción ‘Ver discos’ a la gestión de canciones
  • Añadido autocompletado en el titulo de la canción y compositor al editar una canción de un disco.

cómo hacer una galería de imágenes con FWH

Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.

Desde hace mucho tiempo he querido incorporar una galería de imágenes a algunos de mis programas. Esto data de mis tiempos de fanboy de Apple, cuando quedé prendado de un programa llamado Delicious Library al que me referí en esta entrada.

El caso es que hace poco estaba dándole vueltas a la cabeza en la manera de hacerlo y pregunté en el foro de FWH. La primera intención fue crear una clase a medida dentro de una ventana, pero esa solución no me valía porqué el flujo del programa es muy complicado de controlar pues las ventanas quedan independientes. Hubo otra propuesta de clase basada en diálogo utilizando la clase TPanel de FWH, y buscando ejemplos de esta clase me topé con la clase TScrollPanel que no conocía y de la que apenas hay documentación. Utilizando esta clase y el código que Mr. Rao había realizado para la clase TAlbum fue muy sencillo implementar la galería de imágenes.

Esta galería de imágenes la puedo utilizar, por ejemplo, para crear una galería de portadas de libros.

Ejemplo de galería de portadas de libros

Lo bueno de esta galería es que muestra las portadas en el orden de la rejilla de libros y si hay algún filtro activo la galería muestra unicamente los libros que aparecen en el filtro.

El código que he utilizado para crear la galería es el siguiente:

Function LiGaleria()
   LOCAL cAlias  := "LI"
   LOCAL nRecno  := ( cAlias )->( RecNo() )
   LOCAL nOrder  := ( cAlias )->( ordNumber() )
   local aImages := {}
   local aLabels := {}
   local aRecno  := {}
   local oDlgAlbum, oAlbum

   LI->(DbGoTop())
   WHILE ! LI->(EOF())
      IF ! Empty(Rtrim(LI->LiImagen))
         AAdd(aImages, Rtrim(LI->LiImagen))
         AAdd(aLabels, Rtrim(LI->LiTitulo))
         AAdd(aRecno, LI->(Recno()))
      ENDIF
      LI->(DbSkip())
   ENDDO
   LI->(DbGoTo(nRecno))

   DEFINE DIALOG oDlgAlbum SIZE oApp():oGrid:nWidth, oApp():oGrid:nHeight PIXEL TRUEPIXEL ;
      TITLE "Galería de portadas de libros - dobleclik para editar un libro"
   oDlgAlbum:SetFont(oApp():oFont)
   //
   oAlbum := TScrollPanel():New( 20, 20, oApp():oGrid:nHeight-50, oApp():oGrid:nWidth-20, oDlgAlbum, .f. )
   oAlbum:SetColor(CLR_WHITE, CLR_WHITE)
   oAlbum:SetFont( oDlgAlbum:oFont )

   @ oApp():oGrid:nHeight-40, oApp():oGrid:nWidth-96 BUTTON "Aceptar" ;
      SIZE 76, 24 PIXEL OF oDlgAlbum ACTION oDlgAlbum:End()

   ACTIVATE DIALOG oDlgAlbum ;
      ON INIT ( LiAlbum( oAlbum, aImages, aRecno, oDlgAlbum ), oDlgAlbum:Center( oApp():oWndMain ) )

   RETURN NIL  

function LiAlbum( oPanel, aPhotos, aRecno, oDlgAlbum )
   local nImgPerRow  := 8
   local nImgWidth   // := 180
   local nImgHeight  // := Int( nImgWidth * 4 / 3 )
   local nHGutter    := 10
   local nVGutter    := 20
   local nCols       := nImgPerRow 
   local nRows, nRow, nCol, x, y, nImage, xMax, nImages := Len( aPhotos )
   local oImage, oSay

   // el ancho del scrollbar es 16
   nImgWidth := INT((oPanel:nWidth-16-(nImgPerRow+1)*nHGutter)/nImgPerRow)
   nImgHeight:= Int( nImgWidth * 4 / 3 )
   nRows    := Ceiling( nImages / nCols )
   xMax     := nCols * ( nImgWidth * nHGutter )
   y        := nVGutter
   nImage   := 1
   do while nImage <= nImages
      x     := nHGutter
      nCol  := 1
      do while nCol <= nCols .and. nImage <= nImages
         // llamo a una funcion para conseguir detached locals
         LiAlbumImage(y, x, nImgWidth, nImgHeight, oPanel, aPhotos, aRecno, nImage, nVGutter, oDlgAlbum)
         nImage++
         nCol++
         x  += ( nImgWidth + nHGutter )
      enddo
      y  += ( nImgHeight + nVGutter )
   enddo
   //::nImgCols  := nCols
   // ::nHeight   := y
   oPanel:SetRange() // call this after defining all controls

return nil

Function LiAlbumImage(y, x, nImgWidth, nImgHeight, oPanel, aPhotos, aRecno, nImage, nVGutter, oDlgAlbum)
   local oImage, oSay, nLiRecno
   nLiRecno := aRecno[nImage]
   @ y, x XIMAGE oImage SIZE nImgWidth, nImgHeight OF oPanel NOBORDER
   oImage:SetSource( If( HB_ISARRAY( aPhotos[ nImage ] ), aPhotos[ nImage, 1 ], aPhotos[ nImage ] ) )
   oImage:nUserControl := 0
   oImage:lBmpTransparent := .f.
   oImage:bLDblClick := { || ( LiForm( oApp():oGrid, "edt", , nLiRecno, oDlgAlbum )) }

   //@ y+nImgHeight+(nVGutter/2), x SAY oSay PROMPT nLiRecno FONT oApp():oFont ;
   //   COLOR CLR_BLACK, CLR_WHITE ;
   //   SIZE nImgWidth, 2*nVGutter CENTER PIXEL OF oPanel
return NIL

En este código estoy utilizando tres funciones:

  • LaGaleria que recorre el fichero de libros para crear 3 arrays donde guardo las portadas, los títulos y los número de registro a que se refiere cada portada. Aquí creo el diálogo y el ScrollPanel.
  • LiAlbum donde recorro el array de imágenes para crear las imágenes dentro del ScrollPanel. Como luego quiero acceder a cada imagen para editar el libro haciendo doble click tengo que crear las imágenes en otra función utilizando la técnica de ‘detached locals’.
  • LiAlbumImage que es donde creo cada una de las imágenes, este código lo realizó Mr. Rao en el foro de FWH.

En una próxima actualización de Cuaderno de Bitácora incluiré galerías con las portadas de libros, discos y videos.

maneras de codificar libros

Tengo todos mis libros catalogados en Cuaderno de Bitácora y hace poco estaba reflexionando sobre la manera de codificar los libros. Antes de continuar diré que no soy experto en catalogación de libros, simplemente utilizo mi programa para catalogar mi propia colección de libros.

Resulta que tengo algunos libros catalogados secuencialmente por la materia, es decir, una abreviación de la materia y un número secuencial, como aparece en la imagen de abajo. La ventaja de esta manera de catalogar es que sabes cuantos libros tienes de cada materia a simple vista. Aunque el programa te permite verlo en la gestión de materias o mediante un filtro por materia, el tener el código secuencial por materia añade una funcionalidad importante y es conocer el orden de catalogación de los libros, que debería coincidir con el de compra si cada vez que compramos un libro lo catalogamos. De esta manera puedes ver qué libro compraste antes que otros o cual ha sido tu evolución en la compra de libros de una determinada materia.

Catalogación de libros por materia y número correlativo

La segunda manera en que tengo catalogados otros libros consiste en un código formado por la abreviatura de la materia, el autor y un número correlativo. Creo que esta manera de catalogar es más académica y parecida al que se utiliza en las bibliotecas. Con este sistema tengo los libros agrupados por materia y autor, pero no tengo una secuencia de libros en el orden que los compré reflejada en el códigos de los libros.

Catalogación de libros por materia, autor y número correlativo

¿ Qué manera es la correcta ? Pues la verdad es que no lo sé. Yo prefiero la primera opción aunque sigo manteniendo los libros catalogados con la segunda con ese código.

Si utilizas alguna otra manera de catalogar tus libros o estás más a favor de una manera o de la otra agradeceré tu comentario.

cuaderno de bitácora 8.40.a

Está disponible para descargar la versión 8.40.a de Cuaderno de Bitácora, mi organizador de libros, discos, videos y direcciones de internet. En esta versión he modificado los formularios de edición de libros, discos, videos y software para hacer más grande la imágen de la portada o carátula, lo que ha hecho que algunos campos se hayan tenido que reubicar en las pestañas de los correspondientes formularios. También he modificado el sistema de préstamos, de manera que ahora el programa almacena un historial de préstamos de cada una de las colecciones. Esta modificación la he hecho a petición de mis amigos del Grup Fotogràfic de Petrer que querían tener un historial de préstamos de su excelente biblioteca.

Los formularios de edición han quedado de la siguiente manera:

Formulario de edición de libros
Formulario de edición de discos
Formulario de edición de videos
Formulario de edición de software

En cuanto al sistema de préstamos, en los formularios de edición hay una pestaña de préstamos donde se pueden anotar:

Subformulario de edición de préstamos

Cuando se anota una devolución el préstamo no se elimina, sino que queda guardado un histórico de préstamos de cada libro/disco/video/software. El histórico de préstamos de todos los ejemplares se puede revisar en la opción Préstamos de cada una de las colecciones.

Histórico de préstamos de libros

La actualización está disponible en la página de descargas.

código de alanit en GitHub

Esta entrada se publicó originalmente en Harbour Magazine, mi publicación sobre el lenguaje de programación Harbour.

He publicado en Github el codigo fuente de algunos de los programas disponibles en mi sitio web https://www.alanit.com. Estos programas están hechos con Harbour y FiveWinHarbour y creo que constituyen un buen punto de partida para cualquier programador que quiera iniciarse o profundizar en el conocimiento de estos lenguajes.

En el blog de mi web personal hay cientos de artículos sobre programación https://www.alanit.com/category/programacion y de aspectos relacionados con mis programas https://www.alanit.com/category/alanit/ que he ido publicando desde el año 2003.

Cuaderno de Bitácora

Imagen de Cuaderno de Bitácora

el Puchero

Findemes

Imagen de Findemes

El código fuente de Colossus, mi programa de gestión de contraseñas, también se encuentra publicado desde hace tiempo en https://github.com/JoseluisSanchez/colossus

nuevas funcionalidades en las ediciones gratuitas

Hasta ahora las diferencias entre las ediciones gratuitas y registradas de los programas eran las detalladas en la siguiente entrada: diferencias entre las ediciones de los programas.

A partir de septiembre de 2018 he eliminado las restricciones de las ediciones gratuitas, que unicamente traen un mensaje de recordatorio de registro que se muestra periódicamente. De esta manera, las diferencias entre las ediciones registrada y gratuita son el nombre del ususario registrado en los distintos listados del programa y el mensaje recordatorio. Nada más.

Por esto, todas las versiones gratuitas añaden desde ahora las siguientes funcionalidades:

  • Selección de claves desde tablas auxiliares. Cuando tienes que introducir una clave desde una tabla auxiliar simplemente haz click en el botón marcado con […] que aparece al lado del campo, selecciona el valor que quieras y se introducirá en el campo.
  • Selección de claves desde tablas auxiliares.

  • Autocompletado de claves auxiliares. Otra manera de completar las claves desdes una tabla auxiliar es simplemente escribiendo en el campo el valor a introducir. Al hacerlo, el programa te mostrará una lista con los posibles valores de las claves que contienen la cadena tecleada y podrás seleccionar el valor que quieras con las flechas de cursor y pulando INTRO.
  • Autocompletado de valores desde tablas auxiliares.
    Autocompletado de valores desde tablas auxiliares.

  • Consulta de ejemplares desde tablas auxiliares. Desde cualquier tabla auxiliar podrás ves los ejemplares de la tabla principal que contienen esa clave, por ejemplo los libros de una materia o las recetas de un cocinero.

Todas las descargas de ediciones gratuitas de los programas se han actualizado con estas nuevas funcionalidades.

Quizá te preguntes ¿ para que quiero registrar el programa si la edición registrada no ofrece más funcionalidades que la edición gatuita del programa ? Pues una respuesta es que te quitas el mensaje recordatorio que aparece cada cierto tiempo, y la segunda es que con tu contribución estás apoyando la existencia de programas que se adaptan a tus necesidades o a tus gustos.

como incorporar los datos de azeta a cuaderno de bitácora

Este post está dirigido a los usuarios de Azeta que van a recibir la nueva versión de Cuaderno de Bitácora y para usuarios de las dos aplicaciones que con la nueva versión de Cuaderno de Bitácora van a poder gestionar también sus documentos con este programa. Voy a explicar la manera de incorporar los datos de Azeta a Cuaderno de Bitácora.

    1. Copiar los datos de Azeta en una carpeta dentro de la carpeta de Cuaderno de Bitácora. Los datos de Azeta están por defecto en la carpeta c:\azeta\datos y se deben copiar en una carpeta dentro de Cuaderno de Bitácora, por ejemplo c:\bitacora\azeta.
    2. Descargar la nueva versión de Cuaderno de Bitácora y copiar el ejecutable en la carpeta del programa.
    3. Arrancar la aplicación e ir a la configuración del programa, que está en la pestaña ‘Configuración’ e indicar la ruta de las carpeta de datos de Azeta, de ZIP para copias de seguridad de Azeta y de PDF de listados de Azeta. La carpeta datos de Azeta deberá ser la carpeta donde hemos copiado los archivos, en mi caso c:\bitacora\azeta
    4. Configuración de datos de Azeta en Cuaderno de Bitácora.
      Configuración de datos de Azeta en Cuaderno de Bitácora.

    5. A continuación reindexar los ficheros de la aplicación desde la misma pestaña de utilidades. Durante el proceso de instalación el programa adapta los archivos de Azeta para ser usados dentro de Cuaderno de Bitácora.

cuaderno de bitácora 8.0

Se encuentra disponible para descargar la versión 8.00 de Cuaderno de Bitácora, mi organizador personal de libros, discos, vídeos, software y direcciones de internet. Esta versión incorpora la gestión mejorada de documentos que se hacía con Azeta, mi programa de gestión de documentos que pasa a estar descatalogado.

La versión 8.0 de Cuaderno de Bitácora cuenta con una pestaña titulada ‘Documentos’ que engloba las funciones de Azeta:

  • Gestión completa de documentos: nombre del documento, código, materia, tipo de documento, idioma, publicación, número, página inicial, página final, número de páginas, fecha de lectura del documento, autores, palabras clave, ubicación física, ubicación electrónica – sitio web o archivo electrónico -, y resumen.
  • Selección de la materia, tipo de documento, idioma, publicación, autores, palabras clave y ubicación física desde tablas auxiliares para mantener la integridad de los datos. Los autores y palabras clave se gestionan como etiquetas, permitiendo la asignación multiple de ellas a los documentos.
  • Consulta de documentos desde cada uno de los valores de las tablas auxiliares.
  • Multiples listados de cada una de las tablas del programa

 

Cuadern de Bitácora 8.0 - edición de documentos
Cuadern de Bitácora 8.0 – edición de documentos

Para los usuarios registrados de Cuaderno de Bitácora, antes de ejecutar por primera vez la aplicación recomiendo crear las siguientes carpetas: azeta, azetazip y azetapdf dentro de la carpeta donde se encuentre instalado el programa. En caso de no crearlas el programa al arrancar mostrará la ventana de configuración del las carpetas de Azeta.

Configuración de datos de Azeta en Cuaderno de Bitácora.
Configuración de datos de Azeta en Cuaderno de Bitácora.

Para los usuarios de ambos programas que quieran añadir sus documentos de Azeta a Cuaderno de Bitácora lo único que tienen que hacer es copiar los ficheros de datos de C:\Azeta\Datos a C:\Bitacora\Azeta antes de la primera ejecución del nuevo al programa. Al realizar esta primera ejecución del programa este actualiza los ficheros y los adapta a la nueva versión.

azeta se integra en cuaderno de bitácora

Hace tiempo que no actualizaba Azeta, mi programa de gestión de documentos. Así que después de la última actualización de Findemes estuve pensando en actualizar Azeta, y la conclusión a la que llegué era que lo mejor que podía hacer era integrarlo en Cuaderno de Bitácora. La interfaz de Cuaderno de Bitácora permite la integración de Azeta creando una nueva pestaña en la cinta de opciones de la ventana principal con todas las opciones del programa, y así es como lo he hecho.

Avance de Cuaderno de Bitácora 8.0

Además de integrar Azeta como una nueva colección dentro de Cuaderno de Bitácora, he añadido las siguientes funcionalidades a la gestión de documentos:

  • Los iconos de la pestaña de documentos son de la misma colección que el resto del programa, manteniendo el aspecto visual del mismo. También se adopta el mismo estilo de ventana que en Cuaderno de Bitácora.
  • Desaparece el arbol de materias y palabras clave. Las materias están en una tabla y las palabras clave son independientes de las materias. Además las palabras clave se gestionan como etiquetas dentro del documento, como se puede ver en la imagen anterior.

Los archivos de datos de Azeta se mantienen en una carpeta aparte de los de Cuaderno de Bitácora para evitar solapamientos de ficheros y para facilitar la incorporación de datos de una versión anterior de Azeta a Cuaderno de Bitácora.

Espero publicar la actualización del programa en los próximos días.