<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Comunidad Gambas-es - Controles/Librerías/Componentes]]></title>
		<link>https://gambas-es.org/</link>
		<description><![CDATA[Comunidad Gambas-es - https://gambas-es.org]]></description>
		<pubDate>Tue, 14 Apr 2026 02:32:19 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Scrolling un ScrollArea]]></title>
			<link>https://gambas-es.org/thread-2000.html</link>
			<pubDate>Mon, 08 Dec 2025 17:29:33 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=4">Shordi</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-2000.html</guid>
			<description><![CDATA[Estoy en estos días rehaciendo mi abandonado proyecto del editor gráfico de bases de datos sqlite. Todo va progresando pero me he atascado con una tontería estética: Si el diseño de la BD es complejo y pinchas y arrastras y sueltas (drag &amp; drop( el objeto fuera del área visible del ScrollArea, ésta amplía su tamaño y te muestra las barras de desplazamiento, pero no consigo que se haga un Scroll dinámico, es decir, que si pincho y arrastro hacia la derecha, digamos, un objeto el scrollArea haga Scroll hacia la derecha siguiendo al que llevo pinchado y desplace hacia la izquierda la vista como si lo hiciésemos con la barra de desplazamiento.<br />
¿Alguien tiene algo hecho en éste sentido? No subo ejemplo porque es muy complejo el tema tal como lo tengo diseñado ahora. Os adjunto la imagen del aspecto del programa. Imaginad que pincháis uno de los cuadros y lo desplazáis a la derecha... pues eso.<br />
<br />
<a href="https://i.imgur.com/3FjnLNr.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/3FjnLNrl.png" loading="lazy"  alt="[Imagen: 3FjnLNrl.png]" class="mycode_img" /></a><br />
<br />
Saludos.]]></description>
			<content:encoded><![CDATA[Estoy en estos días rehaciendo mi abandonado proyecto del editor gráfico de bases de datos sqlite. Todo va progresando pero me he atascado con una tontería estética: Si el diseño de la BD es complejo y pinchas y arrastras y sueltas (drag &amp; drop( el objeto fuera del área visible del ScrollArea, ésta amplía su tamaño y te muestra las barras de desplazamiento, pero no consigo que se haga un Scroll dinámico, es decir, que si pincho y arrastro hacia la derecha, digamos, un objeto el scrollArea haga Scroll hacia la derecha siguiendo al que llevo pinchado y desplace hacia la izquierda la vista como si lo hiciésemos con la barra de desplazamiento.<br />
¿Alguien tiene algo hecho en éste sentido? No subo ejemplo porque es muy complejo el tema tal como lo tengo diseñado ahora. Os adjunto la imagen del aspecto del programa. Imaginad que pincháis uno de los cuadros y lo desplazáis a la derecha... pues eso.<br />
<br />
<a href="https://i.imgur.com/3FjnLNr.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/3FjnLNrl.png" loading="lazy"  alt="[Imagen: 3FjnLNrl.png]" class="mycode_img" /></a><br />
<br />
Saludos.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ultima fila en columnview]]></title>
			<link>https://gambas-es.org/thread-1996.html</link>
			<pubDate>Sat, 08 Nov 2025 20:13:39 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=190">Alberto59</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1996.html</guid>
			<description><![CDATA[Hola shell.<br />
<br />
Por favor como hacer el foco en última fila en columnview,en gambas3.<br />
<br />
Gracias.]]></description>
			<content:encoded><![CDATA[Hola shell.<br />
<br />
Por favor como hacer el foco en última fila en columnview,en gambas3.<br />
<br />
Gracias.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[CMimeTypes: un sustituto para DesktopMime]]></title>
			<link>https://gambas-es.org/thread-1990.html</link>
			<pubDate>Tue, 14 Oct 2025 19:57:59 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=105">Harpo</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1990.html</guid>
			<description><![CDATA[Buenas! <br />
Les traigo un sustituto para <span style="font-style: italic;" class="mycode_i">DeskTopMime</span>. En el último código que subí al foro, <span style="font-style: italic;" class="mycode_i">GCompress</span>, había una clase interna para gestionar mimetypes. Y puliendo esta última le he dado una vuelta: <span style="font-style: italic;" class="mycode_i">CMimeTypes</span>.<br />
<br />
¿Porqué un sustituto de <span style="font-style: italic;" class="mycode_i">DesktopMim</span>e?. <br />
Básicamente, porque, en mi humilde opinión, no está bien resuelto el tema. Utilizando el componente estándar no me devolvía los iconos por defecto del sistema, y si el fichero a buscar tiene una extensión poco común devolvía un icono estándar.<br />
<br />
El mótivo de esto es en cómo hace el proceso de carga de los iconos, y busca el icono asociado a la extensión del fichero, la función <span style="font-style: italic;" class="mycode_i">GetIcon</span>():<br />
<ol type="1" class="mycode_list"><li>Si tiene el icono en el tamaño solicitado en caché lo devuelve.<br />
</li>
<li>Busca en <span style="font-style: italic;" class="mycode_i">Stock</span> (iconos Gambas) si tiene el mimetype y si existe lo devuelve. De ahí que no devuelva iconos del sistema por defecto.<br />
</li>
<li>Busca en el tema <span style="font-style: italic;" class="mycode_i">hicolor</span> si existe el icono. Este tema es el "padre" de prácticamente todos los temas de iconos, es muy completo pero  casi nunca tiene el mismo icono que los otros temas.<br />
</li>
<li>Busca en "<span style="font-style: italic;" class="mycode_i">/usr/share/pixmaps</span>"<br />
</li>
<li>Vuelve a buscar en <span style="font-style: italic;" class="mycode_i">Stock</span>, pero lo hace por el icono genérico asociado al mimetype.<br />
</li>
<li>Por último, si nada de lo anterior ha dado resultado, devuelve un icono genérico.<br />
</li>
</ol>
<br />
Cómo funciona <span style="font-style: italic;" class="mycode_i">CMimeType</span>:<br />
La clase carga la base de datos de mimetypes del sistema, como <span style="font-style: italic;" class="mycode_i">DesktopMime</span>. Además añade la información del mimetype genérico asociado, como <span style="font-style: italic;" class="mycode_i">DesktopMime</span>, pero esta última no lo hace correctamente y se pierde esa información. Por último carga la subclase asociada al mimetype. Y además utiliza una clase auxiliar, <span style="font-style: italic;" class="mycode_i">CTheme</span>, que analiza los temas de iconos del sistema.<br />
<br />
Y busca el icono asociado a la extensión de fichero:<br />
<ol type="1" class="mycode_list"><li>Si tiene el icono en el tamaño solicitado en caché lo devuelve.<br />
</li>
<li>Busca el icono del mimetype en el directorio de iconos por defecto por tamaño y tipo.<br />
</li>
<li>Busca el icono genérico asociado al mimetype.<br />
</li>
<li>Busca el icono genérico asociado a la subclase del mimetype.<br />
</li>
<li>Los temas de iconos tienen "herencia", temas de iconos padre. La clase repite el proceso por todo el arbol de herencia del tema por defecto.<br />
</li>
<li>Por último, si nada de lo anterior ha dado resultado, devuelve un icono genérico. Aquí tengo pendiente añadir la búsqueda en <span style="font-style: italic;" class="mycode_i">Stock</span> por si sonara la flauta.<br />
</li>
</ol>
<br />
Un ejemplo de la información interna que manejan ambas clases para el mismo mimetype:<br />
<br />
<a href="https://i.imgur.com/J0vEms1.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/J0vEms1l.png" loading="lazy"  alt="[Imagen: J0vEms1l.png]" class="mycode_img" /></a><br />
<ul class="mycode_list"><li><span style="text-decoration: underline;" class="mycode_u">Pattern</span> es la extensión de fichero: json.<br />
</li>
<li><span style="text-decoration: underline;" class="mycode_u">Type</span> es el mimetype asociado a json.<br />
</li>
<li><span style="text-decoration: underline;" class="mycode_u">GenericIcon,</span> el icono genérico asociado al mimetype, como comentaba antes <span style="font-style: italic;" class="mycode_i">DesktopMime</span> no lo hace correctamente.<br />
</li>
<li><span style="text-decoration: underline;" class="mycode_u">SubClass,</span> la subclase del mimetype.<br />
</li>
</ul>
<br />
Ventajas de <span style="font-style: italic;" class="mycode_i">DesktopMime</span>: <ul class="mycode_list"><li>Es rápido, tanto en la búsqueda del mimetype asociado al fichero como en la búsqueda del icono, aunque el icono que devuelve en muchos casos es el icono de <span style="font-style: italic;" class="mycode_i">Stock</span>. Si la extensión de fichero es poco habitual, es más lento.<br />
</li>
<li>Cumple su función, permite salir del paso con solvencia.<br />
</li>
</ul>
<br />
Ventajas de <span style="font-style: italic;" class="mycode_i">CMimeType</span>:<ul class="mycode_list"><li>Aunque es mucho más lento hay que ponerlo en contexto: uno son 0,028 msec y el otro 0,059 msec (de media). El proceso de carga completo en mi ordenador, con 22 temas de iconos, tarda 75 msec. Un parpadeo dura 300 msec. Y yo solo he instalado uno de los temas, los demás venían por defecto.   <img src="https://gambas-es.org/images/smilies/angel.png" alt="Angel" title="Angel" class="smilie smilie_10" /><br />
</li>
<li>La tasa de acierto, recuperar el icono del sistema asociado al mimetype, es mucho más alta. Que es lo que yo buscaba.<br />
</li>
<li>Permite cambiar el tema por defecto que se utiliza en las búsquedas. Y de paso visualizar los temas de iconos.<br />
</li>
</ul>
<br />
Hay un par de formularios para probar. Como dato curioso, están embebidos dentro de un control <span style="font-style: italic;" class="mycode_i">Wizard</span>, he descubierto que es muy cómodo para cosas rápidas y de prueba, así me ahorro el añadir el control <span style="font-style: italic;" class="mycode_i">gb.form.mdi</span> y usar un <span style="font-style: italic;" class="mycode_i">WorkSpace</span>. Con los botones de arriba se cambia de formulario y se cierra la aplicación.<br />
<br />
<a href="https://i.imgur.com/OYPdyXw.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/OYPdyXwl.png" loading="lazy"  alt="[Imagen: OYPdyXwl.png]" class="mycode_img" /></a><br />
<br />
Este es el formulario para buscar mimetypes, basta pulsar sobre un fichero y a la derecha salen los iconos que devuelven <span style="font-style: italic;" class="mycode_i">CMimeType</span> y <span style="font-style: italic;" class="mycode_i">DesktopMime</span>. El que devuelve este último es un icono de <span style="font-style: italic;" class="mycode_i">Stock</span>, no del sistema. También se ve que el control <span style="font-style: italic;" class="mycode_i">FileChooser,</span> que usa <span style="font-style: italic;" class="mycode_i">DesktopMim</span>e, no encuentra varios ficheros y devuelve el icono estándar.<br />
<br />
Arriba a la derecha se puede seleccionar el tema de iconos y el tamaño. El botón <span style="font-style: italic;" class="mycode_i">Home</span> vuelve a poner el tema por defecto en el <span style="font-style: italic;" class="mycode_i">ComboBox</span>. Se visualiza el mimetype asociado al fichero, el icono y la descripción asociada al mimetype.<br />
<br />
<a href="https://i.imgur.com/QxWegrA.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/QxWegrAl.png" loading="lazy"  alt="[Imagen: QxWegrAl.png]" class="mycode_img" /></a><br />
<br />
Este es para explorar los temas de iconos que tenemos en el sistema y qué información guarda la clase <span style="font-style: italic;" class="mycode_i">CTheme</span>:<ul class="mycode_list"><li>El directorio donde están los iconos.<br />
</li>
<li>El nombre interno del tema.<br />
</li>
<li>La descripción del tema.<br />
</li>
<li>Si es el tema por defecto del sistema.<br />
</li>
<li>Si está marcado como oculto.<br />
</li>
<li>Si es <span style="font-style: italic;" class="mycode_i">"Dark mode"</span><br />
</li>
<li>La estructura interna de los directorios. Se usa para facilitar la búsqueda, según el tema la estructura puede ser "mimetypes/16" o "16/mimetypes". En la búsqueda se sustituye esta cadena por tamaño y directorio.<br />
</li>
<li>El formato del directorio de tamaños. Algunos son "16x16" y otros, como la imagen, solo "16".<br />
</li>
<li>El directorio por defecto donde el tema almacena los mimetypes.<br />
</li>
<li>La extensión por defecto de los ficheros en ese tema, suele ser svg o png.<br />
</li>
<li>Y por último la herencia, que ya he comentado antes. Estos son los temas de los que hereda el tema seleccionado. Si la clase no encuentra el icono en el tema por defecto lo búscara en toda su cadena de herencia.<br />
</li>
</ul>
<br />
Y nada más, como siempre son bienvenidos los comentarios y las sugerencias.<br />
Un saludo, Harpo.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://gambas-es.org/images/attachtypes/tar.png" title="GZIP Compressed File" style="height: 16px; width: 16px" border="0" alt=".gz" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=572" target="_blank" title="">CMimetypes-1.0.tar.gz</a> (Tamaño: <span class="text-dark">27.18 KB</span> Descargas: <span class="text-dark">2)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Buenas! <br />
Les traigo un sustituto para <span style="font-style: italic;" class="mycode_i">DeskTopMime</span>. En el último código que subí al foro, <span style="font-style: italic;" class="mycode_i">GCompress</span>, había una clase interna para gestionar mimetypes. Y puliendo esta última le he dado una vuelta: <span style="font-style: italic;" class="mycode_i">CMimeTypes</span>.<br />
<br />
¿Porqué un sustituto de <span style="font-style: italic;" class="mycode_i">DesktopMim</span>e?. <br />
Básicamente, porque, en mi humilde opinión, no está bien resuelto el tema. Utilizando el componente estándar no me devolvía los iconos por defecto del sistema, y si el fichero a buscar tiene una extensión poco común devolvía un icono estándar.<br />
<br />
El mótivo de esto es en cómo hace el proceso de carga de los iconos, y busca el icono asociado a la extensión del fichero, la función <span style="font-style: italic;" class="mycode_i">GetIcon</span>():<br />
<ol type="1" class="mycode_list"><li>Si tiene el icono en el tamaño solicitado en caché lo devuelve.<br />
</li>
<li>Busca en <span style="font-style: italic;" class="mycode_i">Stock</span> (iconos Gambas) si tiene el mimetype y si existe lo devuelve. De ahí que no devuelva iconos del sistema por defecto.<br />
</li>
<li>Busca en el tema <span style="font-style: italic;" class="mycode_i">hicolor</span> si existe el icono. Este tema es el "padre" de prácticamente todos los temas de iconos, es muy completo pero  casi nunca tiene el mismo icono que los otros temas.<br />
</li>
<li>Busca en "<span style="font-style: italic;" class="mycode_i">/usr/share/pixmaps</span>"<br />
</li>
<li>Vuelve a buscar en <span style="font-style: italic;" class="mycode_i">Stock</span>, pero lo hace por el icono genérico asociado al mimetype.<br />
</li>
<li>Por último, si nada de lo anterior ha dado resultado, devuelve un icono genérico.<br />
</li>
</ol>
<br />
Cómo funciona <span style="font-style: italic;" class="mycode_i">CMimeType</span>:<br />
La clase carga la base de datos de mimetypes del sistema, como <span style="font-style: italic;" class="mycode_i">DesktopMime</span>. Además añade la información del mimetype genérico asociado, como <span style="font-style: italic;" class="mycode_i">DesktopMime</span>, pero esta última no lo hace correctamente y se pierde esa información. Por último carga la subclase asociada al mimetype. Y además utiliza una clase auxiliar, <span style="font-style: italic;" class="mycode_i">CTheme</span>, que analiza los temas de iconos del sistema.<br />
<br />
Y busca el icono asociado a la extensión de fichero:<br />
<ol type="1" class="mycode_list"><li>Si tiene el icono en el tamaño solicitado en caché lo devuelve.<br />
</li>
<li>Busca el icono del mimetype en el directorio de iconos por defecto por tamaño y tipo.<br />
</li>
<li>Busca el icono genérico asociado al mimetype.<br />
</li>
<li>Busca el icono genérico asociado a la subclase del mimetype.<br />
</li>
<li>Los temas de iconos tienen "herencia", temas de iconos padre. La clase repite el proceso por todo el arbol de herencia del tema por defecto.<br />
</li>
<li>Por último, si nada de lo anterior ha dado resultado, devuelve un icono genérico. Aquí tengo pendiente añadir la búsqueda en <span style="font-style: italic;" class="mycode_i">Stock</span> por si sonara la flauta.<br />
</li>
</ol>
<br />
Un ejemplo de la información interna que manejan ambas clases para el mismo mimetype:<br />
<br />
<a href="https://i.imgur.com/J0vEms1.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/J0vEms1l.png" loading="lazy"  alt="[Imagen: J0vEms1l.png]" class="mycode_img" /></a><br />
<ul class="mycode_list"><li><span style="text-decoration: underline;" class="mycode_u">Pattern</span> es la extensión de fichero: json.<br />
</li>
<li><span style="text-decoration: underline;" class="mycode_u">Type</span> es el mimetype asociado a json.<br />
</li>
<li><span style="text-decoration: underline;" class="mycode_u">GenericIcon,</span> el icono genérico asociado al mimetype, como comentaba antes <span style="font-style: italic;" class="mycode_i">DesktopMime</span> no lo hace correctamente.<br />
</li>
<li><span style="text-decoration: underline;" class="mycode_u">SubClass,</span> la subclase del mimetype.<br />
</li>
</ul>
<br />
Ventajas de <span style="font-style: italic;" class="mycode_i">DesktopMime</span>: <ul class="mycode_list"><li>Es rápido, tanto en la búsqueda del mimetype asociado al fichero como en la búsqueda del icono, aunque el icono que devuelve en muchos casos es el icono de <span style="font-style: italic;" class="mycode_i">Stock</span>. Si la extensión de fichero es poco habitual, es más lento.<br />
</li>
<li>Cumple su función, permite salir del paso con solvencia.<br />
</li>
</ul>
<br />
Ventajas de <span style="font-style: italic;" class="mycode_i">CMimeType</span>:<ul class="mycode_list"><li>Aunque es mucho más lento hay que ponerlo en contexto: uno son 0,028 msec y el otro 0,059 msec (de media). El proceso de carga completo en mi ordenador, con 22 temas de iconos, tarda 75 msec. Un parpadeo dura 300 msec. Y yo solo he instalado uno de los temas, los demás venían por defecto.   <img src="https://gambas-es.org/images/smilies/angel.png" alt="Angel" title="Angel" class="smilie smilie_10" /><br />
</li>
<li>La tasa de acierto, recuperar el icono del sistema asociado al mimetype, es mucho más alta. Que es lo que yo buscaba.<br />
</li>
<li>Permite cambiar el tema por defecto que se utiliza en las búsquedas. Y de paso visualizar los temas de iconos.<br />
</li>
</ul>
<br />
Hay un par de formularios para probar. Como dato curioso, están embebidos dentro de un control <span style="font-style: italic;" class="mycode_i">Wizard</span>, he descubierto que es muy cómodo para cosas rápidas y de prueba, así me ahorro el añadir el control <span style="font-style: italic;" class="mycode_i">gb.form.mdi</span> y usar un <span style="font-style: italic;" class="mycode_i">WorkSpace</span>. Con los botones de arriba se cambia de formulario y se cierra la aplicación.<br />
<br />
<a href="https://i.imgur.com/OYPdyXw.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/OYPdyXwl.png" loading="lazy"  alt="[Imagen: OYPdyXwl.png]" class="mycode_img" /></a><br />
<br />
Este es el formulario para buscar mimetypes, basta pulsar sobre un fichero y a la derecha salen los iconos que devuelven <span style="font-style: italic;" class="mycode_i">CMimeType</span> y <span style="font-style: italic;" class="mycode_i">DesktopMime</span>. El que devuelve este último es un icono de <span style="font-style: italic;" class="mycode_i">Stock</span>, no del sistema. También se ve que el control <span style="font-style: italic;" class="mycode_i">FileChooser,</span> que usa <span style="font-style: italic;" class="mycode_i">DesktopMim</span>e, no encuentra varios ficheros y devuelve el icono estándar.<br />
<br />
Arriba a la derecha se puede seleccionar el tema de iconos y el tamaño. El botón <span style="font-style: italic;" class="mycode_i">Home</span> vuelve a poner el tema por defecto en el <span style="font-style: italic;" class="mycode_i">ComboBox</span>. Se visualiza el mimetype asociado al fichero, el icono y la descripción asociada al mimetype.<br />
<br />
<a href="https://i.imgur.com/QxWegrA.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/QxWegrAl.png" loading="lazy"  alt="[Imagen: QxWegrAl.png]" class="mycode_img" /></a><br />
<br />
Este es para explorar los temas de iconos que tenemos en el sistema y qué información guarda la clase <span style="font-style: italic;" class="mycode_i">CTheme</span>:<ul class="mycode_list"><li>El directorio donde están los iconos.<br />
</li>
<li>El nombre interno del tema.<br />
</li>
<li>La descripción del tema.<br />
</li>
<li>Si es el tema por defecto del sistema.<br />
</li>
<li>Si está marcado como oculto.<br />
</li>
<li>Si es <span style="font-style: italic;" class="mycode_i">"Dark mode"</span><br />
</li>
<li>La estructura interna de los directorios. Se usa para facilitar la búsqueda, según el tema la estructura puede ser "mimetypes/16" o "16/mimetypes". En la búsqueda se sustituye esta cadena por tamaño y directorio.<br />
</li>
<li>El formato del directorio de tamaños. Algunos son "16x16" y otros, como la imagen, solo "16".<br />
</li>
<li>El directorio por defecto donde el tema almacena los mimetypes.<br />
</li>
<li>La extensión por defecto de los ficheros en ese tema, suele ser svg o png.<br />
</li>
<li>Y por último la herencia, que ya he comentado antes. Estos son los temas de los que hereda el tema seleccionado. Si la clase no encuentra el icono en el tema por defecto lo búscara en toda su cadena de herencia.<br />
</li>
</ul>
<br />
Y nada más, como siempre son bienvenidos los comentarios y las sugerencias.<br />
Un saludo, Harpo.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://gambas-es.org/images/attachtypes/tar.png" title="GZIP Compressed File" style="height: 16px; width: 16px" border="0" alt=".gz" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=572" target="_blank" title="">CMimetypes-1.0.tar.gz</a> (Tamaño: <span class="text-dark">27.18 KB</span> Descargas: <span class="text-dark">2)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Libarchive para Gambas]]></title>
			<link>https://gambas-es.org/thread-1987.html</link>
			<pubDate>Fri, 26 Sep 2025 18:06:41 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=105">Harpo</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1987.html</guid>
			<description><![CDATA[Saludos!<br />
Después de un tiempo alejado del teclado he retomado los proyectos personales que tenía abandonados. El primero ha sido la aplicación para gestionar cómics, y por fin tengo un compresor/descompresor de archivos: <a href="https://www.libarchive.org/" target="_blank" rel="noopener" class="mycode_url">Libarchive</a> .<br />
<br />
Cómo ya sabrán es una librería para leer, escribir y comprimir distintos formatos de fichero, según la página web de la libreria:<ul class="mycode_list"><li>tar (read and write, including GNU extensions)<br />
</li>
<li>pax (read and write, including GNU and star extensions)<br />
</li>
<li>cpio (read and write, including odc, newc, and afio variants)<br />
</li>
<li><a href="https://github.com/libarchive/libarchive/wiki/FormatISO9660" target="_blank" rel="noopener" class="mycode_url">ISO9660</a> (read and write, including Joliet and Rockridge extensions, with some limitations)<br />
</li>
<li><a href="https://github.com/libarchive/libarchive/wiki/FormatZip" target="_blank" rel="noopener" class="mycode_url">zip</a> (read and write, with some limitations, uses zlib)<br />
</li>
<li>mtree (read and write, uses separate libraries for creating and verifying cryptographic hashes)<br />
</li>
<li>shar (write only)<br />
</li>
<li>ar (read and write, including BSD and GNU/SysV variants)<br />
</li>
<li><a href="https://github.com/libarchive/libarchive/wiki/FormatEmpty" target="_blank" rel="noopener" class="mycode_url">empty</a> (read only; in particular, note that no other format will accept an empty file)<br />
</li>
<li><a href="https://github.com/libarchive/libarchive/wiki/FormatRaw" target="_blank" rel="noopener" class="mycode_url">raw</a> (read and write)<br />
</li>
<li>xar (read and write)<br />
</li>
<li>lha/lzh (read only)<br />
</li>
<li>rar (read only, original and RAR v5 format)<br />
</li>
<li>Microsoft CAB format (read only)<br />
</li>
<li>7-Zip (read and write)<br />
</li>
<li>WARC (ISO 28500:2009, read and write)<br />
</li>
</ul>
<br />
La librería trata los ficheros como un <span style="font-style: italic;" class="mycode_i">stream</span>, un conjunto de elementos empaquetados juntos. La definición de las funciones internas está dividida en dos partes: <span style="font-weight: bold;" class="mycode_b">CArchive</span> para las funciones propias del archivo y <span style="font-weight: bold;" class="mycode_b">CEntry</span> para los elementos dentro del archivo, entradas. Además hay un módulo, <span style="font-weight: bold;" class="mycode_b">MArchive</span>, para funciones auxiliares y definición de constantes internas de la librería. No todas las funciones internas de la librería están definidas, todavía queda pulir, limpiar, optimizar y completar. Queda trabajo.<br />
<br />
Las clases en Gambas son:<ul class="mycode_list"><li>GCompress: para gestionar los ficheros. Comprimir, descomprimir, leer, extraer ficheros, hacer backup de directorios.<br />
</li>
<li>GEntry: para gestionar los elementos dentro GCompress. Ficheros, directorios, enlaces simbólicos.<br />
</li>
<li>Clases de apoyo para manejar opciones de compresión y lectura, flags para descomprimir ficheros.<br />
</li>
</ul>
<br />
Para quién se decida a probar la librería, Libarchive tiene dos conceptos importantes, FORMAT y FILTER. El primero hace referencia al formato del fichero, el segundo a formatos de compresión. Y existen formatos de fichero que además son compresores, compresores que pueden que lo sean o no, se pueden mezclar formatos y compresores, se pueden usar varios compresores dentro de un formato. Además los formatos y compresores tienen distintas opciones de empaquetado, compresión y encriptación. Puede haber ficheros (entradas) con la cabecera encriptada pero no los datos, con los datos encriptados pero no la cabecera ... un lio enorme.<br />
<br />
Dentro del proyecto hay una aplicación para jugar con la librería, es un desastre a nivel de código, con mucha basura, pero funcional. Básicamente una prueba de concepto. Y la última pestaña, "Rebuild - Extract file" no es funcional, permite hacerlo todo pero el botón "Rebuild" todavía no hace nada.   <img src="https://gambas-es.org/images/smilies/rolleyes.png" alt="Rolleyes" title="Rolleyes" class="smilie smilie_6" /> <br />
<br />
<a href="https://i.imgur.com/stYBDiN.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/stYBDiNl.png" loading="lazy"  alt="[Imagen: stYBDiNl.png]" class="mycode_img" /></a><br />
<br />
<a href="https://i.imgur.com/8eTLM6q.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/8eTLM6ql.png" loading="lazy"  alt="[Imagen: 8eTLM6ql.png]" class="mycode_img" /></a><br />
<br />
Si alguien se decide a probarla y encuentra algún problema o tiene alguna sugerencia se agradecería el comentario.<br />
Un saludo, Harpo<br />
<br />
<!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://gambas-es.org/images/attachtypes/tar.png" title="GZIP Compressed File" style="height: 16px; width: 16px" border="0" alt=".gz" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=571" target="_blank" title="">GCompress.tar.gz</a> (Tamaño: <span class="text-dark">80.65 KB</span> Descargas: <span class="text-dark">2)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Saludos!<br />
Después de un tiempo alejado del teclado he retomado los proyectos personales que tenía abandonados. El primero ha sido la aplicación para gestionar cómics, y por fin tengo un compresor/descompresor de archivos: <a href="https://www.libarchive.org/" target="_blank" rel="noopener" class="mycode_url">Libarchive</a> .<br />
<br />
Cómo ya sabrán es una librería para leer, escribir y comprimir distintos formatos de fichero, según la página web de la libreria:<ul class="mycode_list"><li>tar (read and write, including GNU extensions)<br />
</li>
<li>pax (read and write, including GNU and star extensions)<br />
</li>
<li>cpio (read and write, including odc, newc, and afio variants)<br />
</li>
<li><a href="https://github.com/libarchive/libarchive/wiki/FormatISO9660" target="_blank" rel="noopener" class="mycode_url">ISO9660</a> (read and write, including Joliet and Rockridge extensions, with some limitations)<br />
</li>
<li><a href="https://github.com/libarchive/libarchive/wiki/FormatZip" target="_blank" rel="noopener" class="mycode_url">zip</a> (read and write, with some limitations, uses zlib)<br />
</li>
<li>mtree (read and write, uses separate libraries for creating and verifying cryptographic hashes)<br />
</li>
<li>shar (write only)<br />
</li>
<li>ar (read and write, including BSD and GNU/SysV variants)<br />
</li>
<li><a href="https://github.com/libarchive/libarchive/wiki/FormatEmpty" target="_blank" rel="noopener" class="mycode_url">empty</a> (read only; in particular, note that no other format will accept an empty file)<br />
</li>
<li><a href="https://github.com/libarchive/libarchive/wiki/FormatRaw" target="_blank" rel="noopener" class="mycode_url">raw</a> (read and write)<br />
</li>
<li>xar (read and write)<br />
</li>
<li>lha/lzh (read only)<br />
</li>
<li>rar (read only, original and RAR v5 format)<br />
</li>
<li>Microsoft CAB format (read only)<br />
</li>
<li>7-Zip (read and write)<br />
</li>
<li>WARC (ISO 28500:2009, read and write)<br />
</li>
</ul>
<br />
La librería trata los ficheros como un <span style="font-style: italic;" class="mycode_i">stream</span>, un conjunto de elementos empaquetados juntos. La definición de las funciones internas está dividida en dos partes: <span style="font-weight: bold;" class="mycode_b">CArchive</span> para las funciones propias del archivo y <span style="font-weight: bold;" class="mycode_b">CEntry</span> para los elementos dentro del archivo, entradas. Además hay un módulo, <span style="font-weight: bold;" class="mycode_b">MArchive</span>, para funciones auxiliares y definición de constantes internas de la librería. No todas las funciones internas de la librería están definidas, todavía queda pulir, limpiar, optimizar y completar. Queda trabajo.<br />
<br />
Las clases en Gambas son:<ul class="mycode_list"><li>GCompress: para gestionar los ficheros. Comprimir, descomprimir, leer, extraer ficheros, hacer backup de directorios.<br />
</li>
<li>GEntry: para gestionar los elementos dentro GCompress. Ficheros, directorios, enlaces simbólicos.<br />
</li>
<li>Clases de apoyo para manejar opciones de compresión y lectura, flags para descomprimir ficheros.<br />
</li>
</ul>
<br />
Para quién se decida a probar la librería, Libarchive tiene dos conceptos importantes, FORMAT y FILTER. El primero hace referencia al formato del fichero, el segundo a formatos de compresión. Y existen formatos de fichero que además son compresores, compresores que pueden que lo sean o no, se pueden mezclar formatos y compresores, se pueden usar varios compresores dentro de un formato. Además los formatos y compresores tienen distintas opciones de empaquetado, compresión y encriptación. Puede haber ficheros (entradas) con la cabecera encriptada pero no los datos, con los datos encriptados pero no la cabecera ... un lio enorme.<br />
<br />
Dentro del proyecto hay una aplicación para jugar con la librería, es un desastre a nivel de código, con mucha basura, pero funcional. Básicamente una prueba de concepto. Y la última pestaña, "Rebuild - Extract file" no es funcional, permite hacerlo todo pero el botón "Rebuild" todavía no hace nada.   <img src="https://gambas-es.org/images/smilies/rolleyes.png" alt="Rolleyes" title="Rolleyes" class="smilie smilie_6" /> <br />
<br />
<a href="https://i.imgur.com/stYBDiN.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/stYBDiNl.png" loading="lazy"  alt="[Imagen: stYBDiNl.png]" class="mycode_img" /></a><br />
<br />
<a href="https://i.imgur.com/8eTLM6q.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/8eTLM6ql.png" loading="lazy"  alt="[Imagen: 8eTLM6ql.png]" class="mycode_img" /></a><br />
<br />
Si alguien se decide a probarla y encuentra algún problema o tiene alguna sugerencia se agradecería el comentario.<br />
Un saludo, Harpo<br />
<br />
<!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://gambas-es.org/images/attachtypes/tar.png" title="GZIP Compressed File" style="height: 16px; width: 16px" border="0" alt=".gz" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=571" target="_blank" title="">GCompress.tar.gz</a> (Tamaño: <span class="text-dark">80.65 KB</span> Descargas: <span class="text-dark">2)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Error al generar paquete para Arch desde Linux Mint]]></title>
			<link>https://gambas-es.org/thread-1983.html</link>
			<pubDate>Thu, 18 Sep 2025 11:24:12 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=41">alberto-moyano</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1983.html</guid>
			<description><![CDATA[Hola gente, pues el problema que tengo ya lo aclara el título del tema, estoy teniendo un error al intentar generar el empaquetado para Arch, para el resto de las distro, todo bien. Estoy usando Linux Mint 22.2, estaba usando la versión por default de gambas 3.19.0 y encontré un reporte de bugs sobre este tema donde dicen que se resolvió en 3.19.4, entonces migré gambas a una versión aún mayor, ahora trabajo con 3.20.4, pero el error persiste, ¿alguien está generando paquetes para Arch desde Mint?<br />
<br />
Gracias de antemano]]></description>
			<content:encoded><![CDATA[Hola gente, pues el problema que tengo ya lo aclara el título del tema, estoy teniendo un error al intentar generar el empaquetado para Arch, para el resto de las distro, todo bien. Estoy usando Linux Mint 22.2, estaba usando la versión por default de gambas 3.19.0 y encontré un reporte de bugs sobre este tema donde dicen que se resolvió en 3.19.4, entonces migré gambas a una versión aún mayor, ahora trabajo con 3.20.4, pero el error persiste, ¿alguien está generando paquetes para Arch desde Mint?<br />
<br />
Gracias de antemano]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nuevo componente gb.qt6.webkit]]></title>
			<link>https://gambas-es.org/thread-1953.html</link>
			<pubDate>Thu, 08 May 2025 18:46:46 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=41">alberto-moyano</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1953.html</guid>
			<description><![CDATA[Hola gente, tengo en mi aplicación el uso del componente gb.qt5.webkit, la info de Gambas dice que el componente está deprecated y sugiere utilizar gb.qt5.WebView, pero al mismo tiempo se anuncia que está (o estará) disponible gb.qt6.webkit, en linux mint (con la versión 3.19.x) todavía no se sabe nada de este último, ¿alguien con la versión 3.20.x sabe si ya está disponible?<br />
<br />
Si bien gb.qt5.WebView es más moderno, más rápido (realmente muy poco), no tiene soporte para el método .eval (que permite evaluar expresiones JavaScript), que sí existe en gb.qt5.webkit, la wiki de gambas sugiere una técnica para poder hacer evaluaciones, pero es demasiado farragoso y es mucho el código que debería modificar.<br />
<br />
Es solo para saber como prepararme ante el futuro incierto que sugiere la expresión deprecated.<br />
<br />
Saludos]]></description>
			<content:encoded><![CDATA[Hola gente, tengo en mi aplicación el uso del componente gb.qt5.webkit, la info de Gambas dice que el componente está deprecated y sugiere utilizar gb.qt5.WebView, pero al mismo tiempo se anuncia que está (o estará) disponible gb.qt6.webkit, en linux mint (con la versión 3.19.x) todavía no se sabe nada de este último, ¿alguien con la versión 3.20.x sabe si ya está disponible?<br />
<br />
Si bien gb.qt5.WebView es más moderno, más rápido (realmente muy poco), no tiene soporte para el método .eval (que permite evaluar expresiones JavaScript), que sí existe en gb.qt5.webkit, la wiki de gambas sugiere una técnica para poder hacer evaluaciones, pero es demasiado farragoso y es mucho el código que debería modificar.<br />
<br />
Es solo para saber como prepararme ante el futuro incierto que sugiere la expresión deprecated.<br />
<br />
Saludos]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nuevo Control TableZoom]]></title>
			<link>https://gambas-es.org/thread-1912.html</link>
			<pubDate>Mon, 31 Mar 2025 17:10:52 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=4">Shordi</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1912.html</guid>
			<description><![CDATA[TableZoom es un TableView que permite, haciendo Doble Click en el editor, hacer un zoom sobre el contenido de la celda para poder editar y/o ver dicho contenido.<br />
<br />
<iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/GjLH8WkJzi8" frameborder="0" allowfullscreen="true"></iframe>]]></description>
			<content:encoded><![CDATA[TableZoom es un TableView que permite, haciendo Doble Click en el editor, hacer un zoom sobre el contenido de la celda para poder editar y/o ver dicho contenido.<br />
<br />
<iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/GjLH8WkJzi8" frameborder="0" allowfullscreen="true"></iframe>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Refrescar un DirView y un ListView]]></title>
			<link>https://gambas-es.org/thread-1903.html</link>
			<pubDate>Tue, 25 Mar 2025 22:42:14 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=41">alberto-moyano</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1903.html</guid>
			<description><![CDATA[Hola gente, en un formulario de mi aplicación tengo un DirView y un FileView que se posicionan sobre el directorio raiz de mi proyecto (un libro) y me permiten ver la evolución de crear/borrar carpetas y archivos, el tema es que la compilación de archivos de LaTeX que manejen varios índices, glosarios y muchas referencias se hace en varias pasadas, por lo general 5 en la que se generan varios archivos auxiliares, muchos de ellos se generan como resultado de otros archivos auxiliares, en fin, una lista muy grande de crear, modificar y borrar archivos de texto plano. Los componentes muestran/actualizan el desarrollo, pero a veces --y acá viene el problema-- los componentes muestran los iconos de los archivos con un candado amarillo (en mi linux mint) que significa que el archivo esta borrado, y es tal cual, si voy via filemanager a ver la carpeta del proyecto, no hay errores en cuanto a que archivos tengo realmente.<br />
<br />
Estoy aplicando un refresh y un reload a los componentes, pero ni modo, de manera totalmente aleatoria cada tanto pasa lo comentado anteriormente, si cierro la aplicación al reabrirla se soluciona el problema.<br />
<br />
Pregunta: ¿es una limitación del componente la velocidad de refresco?, digo, son muchisimos archivos todos muuuy pequeños, o es un error de como estoy aplicando el refresco, lo hago con este código (además de hacer un refresh y un reload despúes de compilar) al final de cada funcion de compilación.<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>' Evento que se ejecuta cuando se detecta un cambio en el directorio<br />
Public Sub Watcher_Change()<br />
<br />
  DirViewRuta.Root = File.Dir(TextBox1.Text)' reforzamos la indicación de la ruta<br />
  DirViewRuta.Refresh<br />
  DirView.Reload<br />
<br />
End</code></div></div><br />
<br />
Gracias de antemano por cualquier sugerencia]]></description>
			<content:encoded><![CDATA[Hola gente, en un formulario de mi aplicación tengo un DirView y un FileView que se posicionan sobre el directorio raiz de mi proyecto (un libro) y me permiten ver la evolución de crear/borrar carpetas y archivos, el tema es que la compilación de archivos de LaTeX que manejen varios índices, glosarios y muchas referencias se hace en varias pasadas, por lo general 5 en la que se generan varios archivos auxiliares, muchos de ellos se generan como resultado de otros archivos auxiliares, en fin, una lista muy grande de crear, modificar y borrar archivos de texto plano. Los componentes muestran/actualizan el desarrollo, pero a veces --y acá viene el problema-- los componentes muestran los iconos de los archivos con un candado amarillo (en mi linux mint) que significa que el archivo esta borrado, y es tal cual, si voy via filemanager a ver la carpeta del proyecto, no hay errores en cuanto a que archivos tengo realmente.<br />
<br />
Estoy aplicando un refresh y un reload a los componentes, pero ni modo, de manera totalmente aleatoria cada tanto pasa lo comentado anteriormente, si cierro la aplicación al reabrirla se soluciona el problema.<br />
<br />
Pregunta: ¿es una limitación del componente la velocidad de refresco?, digo, son muchisimos archivos todos muuuy pequeños, o es un error de como estoy aplicando el refresco, lo hago con este código (además de hacer un refresh y un reload despúes de compilar) al final de cada funcion de compilación.<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>' Evento que se ejecuta cuando se detecta un cambio en el directorio<br />
Public Sub Watcher_Change()<br />
<br />
  DirViewRuta.Root = File.Dir(TextBox1.Text)' reforzamos la indicación de la ruta<br />
  DirViewRuta.Refresh<br />
  DirView.Reload<br />
<br />
End</code></div></div><br />
<br />
Gracias de antemano por cualquier sugerencia]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nuevo control: «Doble Lista»]]></title>
			<link>https://gambas-es.org/thread-1898.html</link>
			<pubDate>Wed, 19 Mar 2025 20:13:48 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=62">Grandamakulo</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1898.html</guid>
			<description><![CDATA[<div style="text-align: justify;" class="mycode_align">Bueno, compañeros, gracias a las inestimables enseñanzas del <span style="font-style: italic;" class="mycode_i">Magister Draconis Venator</span>, <span style="color: #008e02;" class="mycode_color">@Shordi</span>, me he atrevido a montar mi primer control. Por supuesto, soy yo. No podía hacer uno sencillito, no: empezar por lo fácil es de pobres.<br />
En fin, se trata de un gestor de doble lista, sobre el que se puede crear y eliminar elementos, pasar elementos de una lista a otra, ordenar cada lista según varios criterios y obtener un «<span style="color: #c10300;" class="mycode_color"><span style="font-family: Courier New;" class="mycode_font">Text</span></span>» utilizable como , por ejemplo, editor en un <span style="color: #c10300;" class="mycode_color"><span style="font-family: Courier New;" class="mycode_font">Tableview</span></span>. ¿Que para qué vale? Pues... seleccionar instrumentos para adecuar una plantilla de orquesta, banda o cámara; para seleccionar una lista de personajes para un capítulo de una novela de todos los existentes; para gestionar las plantas que se llevan del semillero al huerto; objetos del espacio profundo a observar una noche por un astrónomo... Ahí queda eso.<br />
<br />
<a href="https://i.imgur.com/EoZayVw.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/EoZayVwl.png" loading="lazy"  alt="[Imagen: EoZayVwl.png]" class="mycode_img" /></a><br />
<a href="https://i.imgur.com/3LZFYCZ.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/3LZFYCZl.png" loading="lazy"  alt="[Imagen: 3LZFYCZl.png]" class="mycode_img" /></a><br />
<br />
<span style="text-decoration: line-through;" class="mycode_s">Aún le quedan flecos como:<br />
¿Cómo narices se levanta un evento «<span style="color: #c10300;" class="mycode_color"><span style="font-family: Courier New;" class="mycode_font">Cambiar</span></span>» similar al «<span style="color: #c10300;" class="mycode_color"><span style="font-family: Courier New;" class="mycode_font">Change</span></span>» desde el formulario cada vez que se pulsa un grupo de botones?<br />
¿Y cómo se crea un evento «<span style="color: #c10300;" class="mycode_color"><span style="font-family: Courier New;" class="mycode_font">Enter</span></span>» similar al de <span style="color: #c10300;" class="mycode_color">Texbox</span>?<br />
¿Cómo releñes se puede usar una propiedad de la clase en el formulario?<br />
Estas tres preguntas, creo, se contestan probablemente planteando de otra manera el código del control, esto es, llevando a la clase la gestión de algunos elementos del formulario.</span><br />
En fin, se admiten comentarios, consejos y críticas destructivas.</div><br /><!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://gambas-es.org/images/attachtypes/tar.png" title="GZIP Compressed File" style="height: 16px; width: 16px" border="0" alt=".gz" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=543" target="_blank" title="">DobleLista_02.tar.gz</a> (Tamaño: <span class="text-dark">31.89 KB</span> Descargas: <span class="text-dark">1)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;" class="mycode_align">Bueno, compañeros, gracias a las inestimables enseñanzas del <span style="font-style: italic;" class="mycode_i">Magister Draconis Venator</span>, <span style="color: #008e02;" class="mycode_color">@Shordi</span>, me he atrevido a montar mi primer control. Por supuesto, soy yo. No podía hacer uno sencillito, no: empezar por lo fácil es de pobres.<br />
En fin, se trata de un gestor de doble lista, sobre el que se puede crear y eliminar elementos, pasar elementos de una lista a otra, ordenar cada lista según varios criterios y obtener un «<span style="color: #c10300;" class="mycode_color"><span style="font-family: Courier New;" class="mycode_font">Text</span></span>» utilizable como , por ejemplo, editor en un <span style="color: #c10300;" class="mycode_color"><span style="font-family: Courier New;" class="mycode_font">Tableview</span></span>. ¿Que para qué vale? Pues... seleccionar instrumentos para adecuar una plantilla de orquesta, banda o cámara; para seleccionar una lista de personajes para un capítulo de una novela de todos los existentes; para gestionar las plantas que se llevan del semillero al huerto; objetos del espacio profundo a observar una noche por un astrónomo... Ahí queda eso.<br />
<br />
<a href="https://i.imgur.com/EoZayVw.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/EoZayVwl.png" loading="lazy"  alt="[Imagen: EoZayVwl.png]" class="mycode_img" /></a><br />
<a href="https://i.imgur.com/3LZFYCZ.png" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.imgur.com/3LZFYCZl.png" loading="lazy"  alt="[Imagen: 3LZFYCZl.png]" class="mycode_img" /></a><br />
<br />
<span style="text-decoration: line-through;" class="mycode_s">Aún le quedan flecos como:<br />
¿Cómo narices se levanta un evento «<span style="color: #c10300;" class="mycode_color"><span style="font-family: Courier New;" class="mycode_font">Cambiar</span></span>» similar al «<span style="color: #c10300;" class="mycode_color"><span style="font-family: Courier New;" class="mycode_font">Change</span></span>» desde el formulario cada vez que se pulsa un grupo de botones?<br />
¿Y cómo se crea un evento «<span style="color: #c10300;" class="mycode_color"><span style="font-family: Courier New;" class="mycode_font">Enter</span></span>» similar al de <span style="color: #c10300;" class="mycode_color">Texbox</span>?<br />
¿Cómo releñes se puede usar una propiedad de la clase en el formulario?<br />
Estas tres preguntas, creo, se contestan probablemente planteando de otra manera el código del control, esto es, llevando a la clase la gestión de algunos elementos del formulario.</span><br />
En fin, se admiten comentarios, consejos y críticas destructivas.</div><br /><!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://gambas-es.org/images/attachtypes/tar.png" title="GZIP Compressed File" style="height: 16px; width: 16px" border="0" alt=".gz" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=543" target="_blank" title="">DobleLista_02.tar.gz</a> (Tamaño: <span class="text-dark">31.89 KB</span> Descargas: <span class="text-dark">1)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ejemplos de uso del componente gb.net]]></title>
			<link>https://gambas-es.org/thread-1891.html</link>
			<pubDate>Fri, 14 Mar 2025 01:31:06 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=41">alberto-moyano</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1891.html</guid>
			<description><![CDATA[Hola gente, la consulta es la siguiente, estoy usando bastante la AI de DeepSeek para asistirme [1] y pensé en implementarlo en el formulario de mi aplicación, basicamente puse un webview (para ver la respuesta), un textarea (para usarlo como prompt), un textbox (para poner mi APIkey personal) y un boton (para enviar la consulta).<br />
<br />
Lo primero que hice, fue preguntarle al propio DeepSeek si esto era posible y que limitaciones tengo. En la versión gratuita el limite está en la cantidad de tokens de los que se dispone, la cantidad que ofrece me alcanzan, ya que es lo que uso hoy y no tengo problemas.<br />
<br />
Este es el código de una que me sugirio (tuve que agregar los componentes gb.webview y gb.net<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>' En el evento Click del botón "Enviar"<br />
Public Sub btnSENDai_Click()<br />
<br />
  ' Obtén el texto del TextArea<br />
  Dim sPrompt As String = txtPROMPT.Text<br />
<br />
  ' URL de la API de DeepSeek<br />
  Dim sUrl As String = "https://api.deepseek.com/v1/chat/completions"<br />
<br />
  ' Tu clave de API de DeepSeek<br />
  Dim sApiKey As String = txtAPIKEY.Text<br />
<br />
  ' Crea el JSON para la solicitud<br />
  Dim sJson As String = "{ &#92;"model&#92;": &#92;"deepseek-chat&#92;", &#92;"messages&#92;": [{&#92;"role&#92;": &#92;"user&#92;", &#92;"content&#92;": &#92;"" &amp; sPrompt &amp; "&#92;"}] }"<br />
<br />
  ' Configura la solicitud HTTP<br />
  Dim hClient As NetClient<br />
<br />
  hClient = New NetClient As "NetClient"<br />
<br />
  ' Configura los encabezados<br />
  hClient.RequestHeaders["Content-Type"] = "application/json"<br />
  hClient.RequestHeaders["Authorization"] = "Bearer " &amp; sApiKey<br />
<br />
  ' Envía la solicitud POST<br />
  hClient.Post(sUrl, sJson)<br />
<br />
End<br />
<br />
' En el evento Complete del NetClient<br />
Public Sub hClient_Complete()<br />
<br />
  ' Obtén la respuesta<br />
  Dim sResponse As String = hClient.ResponseText<br />
<br />
  ' Parsea la respuesta JSON (puedes usar una librería JSON para esto)<br />
  Dim sMessage As String = ParseJsonResponse(sResponse)<br />
<br />
  ' Muestra la respuesta en el componente WebKit<br />
  WebViewAI.Text = sMessage<br />
<br />
End<br />
<br />
' Función para parsear la respuesta JSON (ejemplo básico)<br />
Public Function ParseJsonResponse(sJson As String) As String<br />
<br />
  ' Aquí debes implementar la lógica para extraer el mensaje de la respuesta JSON<br />
  ' Este es un ejemplo básico:<br />
  Dim sMessage As String<br />
  Dim iStart As Integer = InStr(sJson, "&#92;"content&#92;":&#92;"") + 11<br />
  Dim iEnd As Integer = InStr(iStart, sJson, "&#92;"")<br />
<br />
  If iStart &gt; 0 And iEnd &gt; 0 Then<br />
    sMessage = Mid(sJson, iStart, iEnd - iStart)<br />
  Else<br />
    sMessage = "Error: No se pudo parsear la respuesta JSON."<br />
  Endif<br />
<br />
  Return sMessage<br />
<br />
End</code></div></div><br />
Por supuesto, como es de esperar (ya anunciado por Shordi en algún hilo, por ahí) no funciona, pero la idea del proceso a desarrollar es clara.<br />
<br />
Mi pregunta es si alguien del foro tiene experiencia (y tiempo) para explicar como funciona gb.net.<br />
<br />
Saludos y gracias de antemano.<br />
<br />
[1] en el proceso de edición de libros, utilizo DeepSeek para automatizar tareas, tales como hacer la traducción de diferentes metadatos que inyecto dentro de los libros a 3 idiomas (inglés, francés y portugues), otro uso muy repetido es que me busqué info faltante en las referencias bibliograficas y que me las pase directamente formateadas en biblatex.]]></description>
			<content:encoded><![CDATA[Hola gente, la consulta es la siguiente, estoy usando bastante la AI de DeepSeek para asistirme [1] y pensé en implementarlo en el formulario de mi aplicación, basicamente puse un webview (para ver la respuesta), un textarea (para usarlo como prompt), un textbox (para poner mi APIkey personal) y un boton (para enviar la consulta).<br />
<br />
Lo primero que hice, fue preguntarle al propio DeepSeek si esto era posible y que limitaciones tengo. En la versión gratuita el limite está en la cantidad de tokens de los que se dispone, la cantidad que ofrece me alcanzan, ya que es lo que uso hoy y no tengo problemas.<br />
<br />
Este es el código de una que me sugirio (tuve que agregar los componentes gb.webview y gb.net<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>' En el evento Click del botón "Enviar"<br />
Public Sub btnSENDai_Click()<br />
<br />
  ' Obtén el texto del TextArea<br />
  Dim sPrompt As String = txtPROMPT.Text<br />
<br />
  ' URL de la API de DeepSeek<br />
  Dim sUrl As String = "https://api.deepseek.com/v1/chat/completions"<br />
<br />
  ' Tu clave de API de DeepSeek<br />
  Dim sApiKey As String = txtAPIKEY.Text<br />
<br />
  ' Crea el JSON para la solicitud<br />
  Dim sJson As String = "{ &#92;"model&#92;": &#92;"deepseek-chat&#92;", &#92;"messages&#92;": [{&#92;"role&#92;": &#92;"user&#92;", &#92;"content&#92;": &#92;"" &amp; sPrompt &amp; "&#92;"}] }"<br />
<br />
  ' Configura la solicitud HTTP<br />
  Dim hClient As NetClient<br />
<br />
  hClient = New NetClient As "NetClient"<br />
<br />
  ' Configura los encabezados<br />
  hClient.RequestHeaders["Content-Type"] = "application/json"<br />
  hClient.RequestHeaders["Authorization"] = "Bearer " &amp; sApiKey<br />
<br />
  ' Envía la solicitud POST<br />
  hClient.Post(sUrl, sJson)<br />
<br />
End<br />
<br />
' En el evento Complete del NetClient<br />
Public Sub hClient_Complete()<br />
<br />
  ' Obtén la respuesta<br />
  Dim sResponse As String = hClient.ResponseText<br />
<br />
  ' Parsea la respuesta JSON (puedes usar una librería JSON para esto)<br />
  Dim sMessage As String = ParseJsonResponse(sResponse)<br />
<br />
  ' Muestra la respuesta en el componente WebKit<br />
  WebViewAI.Text = sMessage<br />
<br />
End<br />
<br />
' Función para parsear la respuesta JSON (ejemplo básico)<br />
Public Function ParseJsonResponse(sJson As String) As String<br />
<br />
  ' Aquí debes implementar la lógica para extraer el mensaje de la respuesta JSON<br />
  ' Este es un ejemplo básico:<br />
  Dim sMessage As String<br />
  Dim iStart As Integer = InStr(sJson, "&#92;"content&#92;":&#92;"") + 11<br />
  Dim iEnd As Integer = InStr(iStart, sJson, "&#92;"")<br />
<br />
  If iStart &gt; 0 And iEnd &gt; 0 Then<br />
    sMessage = Mid(sJson, iStart, iEnd - iStart)<br />
  Else<br />
    sMessage = "Error: No se pudo parsear la respuesta JSON."<br />
  Endif<br />
<br />
  Return sMessage<br />
<br />
End</code></div></div><br />
Por supuesto, como es de esperar (ya anunciado por Shordi en algún hilo, por ahí) no funciona, pero la idea del proceso a desarrollar es clara.<br />
<br />
Mi pregunta es si alguien del foro tiene experiencia (y tiempo) para explicar como funciona gb.net.<br />
<br />
Saludos y gracias de antemano.<br />
<br />
[1] en el proceso de edición de libros, utilizo DeepSeek para automatizar tareas, tales como hacer la traducción de diferentes metadatos que inyecto dentro de los libros a 3 idiomas (inglés, francés y portugues), otro uso muy repetido es que me busqué info faltante en las referencias bibliograficas y que me las pase directamente formateadas en biblatex.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[CUnarr - descomprimir con libreria externa]]></title>
			<link>https://gambas-es.org/thread-1777.html</link>
			<pubDate>Tue, 03 Sep 2024 18:51:40 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=105">Harpo</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1777.html</guid>
			<description><![CDATA[Saludos,<br />
<br />
Cómo les comenté en otro mensaje, estoy buscando una solución para gestionar ficheros comprimidos en los formatos Zip, Rar, Tar y 7z, necesito poder descomprimirlos, comprimirlos y listar su contenido. Después de probar 4 soluciones distintas les traigo la cuarta y última, de momento. <img src="https://gambas-es.org/images/smilies/biggrin.png" alt="Big Grin" title="Big Grin" class="smilie smilie_4" /><br />
<br />
Para los interesados en las distintas pruebas:<br />
<ol type="1" class="mycode_list"><li>Probé el componente <span style="font-style: italic;" class="mycode_i">gb.Compress</span>, no me sirve ya que solo trabaja con ficheros, no con directorios, y además no soporta todos los formatos.<br />
</li>
<li>La segunda probé utilidades de consola y el comando <span style="font-style: italic;" class="mycode_i">Shell</span> de Gambas. Concretamente Zip/Unzip, Rar/Unrar y bsdtar. Aunque funcionan bien todas es complicado, cada una tiene su sintaxis y sus formatos de salida. Iba a ser complejo de desarrollar y mantener.<br />
</li>
<li>La tercera fue probar 7z, en teoría soporta todos los formatos y cubre toda la operativa, en la realidad da problemas con el formato Rar. Es un formato propietario y con ese tipo de ficheros da errores al descomprimir y listar. Y no comprime en Rar. Al final usé 7z con Rar/Unrar con buenos resultados aunque volvía al problema de distintas sintaxis y formatos de salida.<br />
</li>
<li>La última ha sido con una librería externa: <a href="https://github.com/selmf/unarr" target="_blank" rel="noopener" class="mycode_url">libunarr</a>. Y sobre esta he desarrollado una clase Gambas para descomprimir y extraer información de ficheros comprimidos en los formatos que necesito.<br />
</li>
</ol>
Sobre la librería comentar que:<ul class="mycode_list"><li>Es una librería diseñada para trabajar con cómics y es utilizada por varias aplicaciones de esa naturaleza.<br />
</li>
<li>No comprime, solo descomprime y lee ficheros comprimidos. Tampoco soporta protección por password ni CRC ni Rar5.<br />
</li>
<li>Necesita tener instaladas libbz2, liblzma y zlib.<br />
</li>
</ul>
Un apunte, la aplicación que he subido lleva embebida la librería, dentro de un directorio "library". Y en la clase que la utiliza:<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>Library "./library/libunarr"</code></div></div>Aunque no suele estar instalada yo la tenía en mi ordenador, supongo que instalada junto a alguna de las aplicaciones que uso para gestionar o leer comics. En las primeras pruebas funcionaba correctamente y en un momento dejó de hacerlo, fallaba con el formato 7z. Al final opté por incluirla dentro del programa hasta saber exactamente que ha pasado.<br />
<br />
Lo que he subido es una primerísima versión. Descomprime y lee todos los formatos mencionados, la he probado también con ficheros tipo ePub, xlsx, ods y odt.<br />
A tener en cuenta que es mi primera experiencia con <span style="font-style: italic;" class="mycode_i">Extern</span>, me he debido leer todos los mensajes sobre el tema de todos los foros de Gambas más la Wiki italiana. El maestro Vuott ha sido mi guía. <img src="https://gambas-es.org/images/smilies/biggrin.png" alt="Big Grin" title="Big Grin" class="smilie smilie_4" /><br />
<br />
Lo que falta:<ul class="mycode_list"><li>Comprobar que el sistema tiene instaladas las librerías necesarias. En esto ando perdido de momento.<br />
</li>
<li>Un control de errores que no hay, y definir códigos de retorno para ampliar la información que devuelve la clase. Por ejemplo cuando intento descomprimir un fichero en Rar5, la librería da un mensaje de "formato no soportado", que se captura en la consola de depuración del IDE. He mirado el código del IDE para ver como lo implementa pero no lo encuentro, si alguien sabe cómo se agradece la ayuda.<br />
</li>
<li>Opción al descomprimir de mantener o sobreescribir los ficheros de salida. O actualizar los más antiguos.<br />
</li>
<li>Filtrar al descomprimir por extensión de ficheros o nombre.<br />
</li>
</ul>
Y no les aburro más, si alguien se decide a probarla se aceptan sugerencias.<br />
Un saludo, Harpo.<br />
<br />
<img src="https://i.imgur.com/R0ZnazL.gif" loading="lazy"  alt="[Imagen: R0ZnazL.gif]" class="mycode_img" /><br /><!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://gambas-es.org/images/attachtypes/tar.png" title="GZIP Compressed File" style="height: 16px; width: 16px" border="0" alt=".gz" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=507" target="_blank" title="">TestUnarr-0.0.1.tar.gz</a> (Tamaño: <span class="text-dark">748.38 KB</span> Descargas: <span class="text-dark">4)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Saludos,<br />
<br />
Cómo les comenté en otro mensaje, estoy buscando una solución para gestionar ficheros comprimidos en los formatos Zip, Rar, Tar y 7z, necesito poder descomprimirlos, comprimirlos y listar su contenido. Después de probar 4 soluciones distintas les traigo la cuarta y última, de momento. <img src="https://gambas-es.org/images/smilies/biggrin.png" alt="Big Grin" title="Big Grin" class="smilie smilie_4" /><br />
<br />
Para los interesados en las distintas pruebas:<br />
<ol type="1" class="mycode_list"><li>Probé el componente <span style="font-style: italic;" class="mycode_i">gb.Compress</span>, no me sirve ya que solo trabaja con ficheros, no con directorios, y además no soporta todos los formatos.<br />
</li>
<li>La segunda probé utilidades de consola y el comando <span style="font-style: italic;" class="mycode_i">Shell</span> de Gambas. Concretamente Zip/Unzip, Rar/Unrar y bsdtar. Aunque funcionan bien todas es complicado, cada una tiene su sintaxis y sus formatos de salida. Iba a ser complejo de desarrollar y mantener.<br />
</li>
<li>La tercera fue probar 7z, en teoría soporta todos los formatos y cubre toda la operativa, en la realidad da problemas con el formato Rar. Es un formato propietario y con ese tipo de ficheros da errores al descomprimir y listar. Y no comprime en Rar. Al final usé 7z con Rar/Unrar con buenos resultados aunque volvía al problema de distintas sintaxis y formatos de salida.<br />
</li>
<li>La última ha sido con una librería externa: <a href="https://github.com/selmf/unarr" target="_blank" rel="noopener" class="mycode_url">libunarr</a>. Y sobre esta he desarrollado una clase Gambas para descomprimir y extraer información de ficheros comprimidos en los formatos que necesito.<br />
</li>
</ol>
Sobre la librería comentar que:<ul class="mycode_list"><li>Es una librería diseñada para trabajar con cómics y es utilizada por varias aplicaciones de esa naturaleza.<br />
</li>
<li>No comprime, solo descomprime y lee ficheros comprimidos. Tampoco soporta protección por password ni CRC ni Rar5.<br />
</li>
<li>Necesita tener instaladas libbz2, liblzma y zlib.<br />
</li>
</ul>
Un apunte, la aplicación que he subido lleva embebida la librería, dentro de un directorio "library". Y en la clase que la utiliza:<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>Library "./library/libunarr"</code></div></div>Aunque no suele estar instalada yo la tenía en mi ordenador, supongo que instalada junto a alguna de las aplicaciones que uso para gestionar o leer comics. En las primeras pruebas funcionaba correctamente y en un momento dejó de hacerlo, fallaba con el formato 7z. Al final opté por incluirla dentro del programa hasta saber exactamente que ha pasado.<br />
<br />
Lo que he subido es una primerísima versión. Descomprime y lee todos los formatos mencionados, la he probado también con ficheros tipo ePub, xlsx, ods y odt.<br />
A tener en cuenta que es mi primera experiencia con <span style="font-style: italic;" class="mycode_i">Extern</span>, me he debido leer todos los mensajes sobre el tema de todos los foros de Gambas más la Wiki italiana. El maestro Vuott ha sido mi guía. <img src="https://gambas-es.org/images/smilies/biggrin.png" alt="Big Grin" title="Big Grin" class="smilie smilie_4" /><br />
<br />
Lo que falta:<ul class="mycode_list"><li>Comprobar que el sistema tiene instaladas las librerías necesarias. En esto ando perdido de momento.<br />
</li>
<li>Un control de errores que no hay, y definir códigos de retorno para ampliar la información que devuelve la clase. Por ejemplo cuando intento descomprimir un fichero en Rar5, la librería da un mensaje de "formato no soportado", que se captura en la consola de depuración del IDE. He mirado el código del IDE para ver como lo implementa pero no lo encuentro, si alguien sabe cómo se agradece la ayuda.<br />
</li>
<li>Opción al descomprimir de mantener o sobreescribir los ficheros de salida. O actualizar los más antiguos.<br />
</li>
<li>Filtrar al descomprimir por extensión de ficheros o nombre.<br />
</li>
</ul>
Y no les aburro más, si alguien se decide a probarla se aceptan sugerencias.<br />
Un saludo, Harpo.<br />
<br />
<img src="https://i.imgur.com/R0ZnazL.gif" loading="lazy"  alt="[Imagen: R0ZnazL.gif]" class="mycode_img" /><br /><!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://gambas-es.org/images/attachtypes/tar.png" title="GZIP Compressed File" style="height: 16px; width: 16px" border="0" alt=".gz" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=507" target="_blank" title="">TestUnarr-0.0.1.tar.gz</a> (Tamaño: <span class="text-dark">748.38 KB</span> Descargas: <span class="text-dark">4)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[CDbf - Lector ficheros DBF - DBT]]></title>
			<link>https://gambas-es.org/thread-1730.html</link>
			<pubDate>Tue, 09 Jul 2024 16:20:57 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=105">Harpo</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1730.html</guid>
			<description><![CDATA[Saludos, tenía pendiente subir al foro la clase para leer ficheros DBF que desarrollé hace unos meses.<br />
Para quien quiera usarla, a tener en cuenta:<ul class="mycode_list"><li>Aunque la he utilizado en un proyecto real de integración de datos, y la he testado con distintos DBF, es una versión muy básica, sin optimizar y prácticamente solo la he utilizado con ficheros que venían de un único cliente. Así que es muy posible que dependiendo de la versión y el origen del DBF pueda fallar.<br />
</li>
<li>Solo funciona como lector, no tiene capacidad de actualizar o escribir ese formato de ficheros.<br />
</li>
<li>Devuelve todos los registros del fichero sin tener en cuenta si el registro está marcado para borrado o no.<br />
</li>
</ul>
Dentro del fuente hay un par de ficheros de prueba y un TXT con las especificaciones de la estructura de este tipo de ficheros.<br />
Para más información:<br />
<a href="https://www.clicketyclick.dk/databases/xbase/format/index.html" target="_blank" rel="noopener" class="mycode_url">Xbase File Format Description</a><br />
<a href="http://independent-software.com/dbase-dbf-dbt-file-format.html" target="_blank" rel="noopener" class="mycode_url">DBF AND DBT/FPT FILE STRUCTURE</a><br />
<a href="https://docs.fileformat.com/es/database/dbf/" target="_blank" rel="noopener" class="mycode_url">Formato de archivo DBF</a><br />
<br />
Para probarlo basta con ejecutar en el IDE, seleccionar el DBF para mostrar la estructura y con el botón "Cargar" se rellena el GridView con los datos.<br />
<br />
<img src="https://i.imgur.com/LHEckzy.png" loading="lazy"  alt="[Imagen: LHEckzy.png]" class="mycode_img" /><br />
<img src="https://i.imgur.com/jwmUiHL.png" loading="lazy"  alt="[Imagen: jwmUiHL.png]" class="mycode_img" /><br />
<br />
Un saludo, Harpo.<br /><!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://gambas-es.org/images/attachtypes/tar.png" title="GZIP Compressed File" style="height: 16px; width: 16px" border="0" alt=".gz" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=500" target="_blank" title="">DbfFiles-0.0.1.tar.gz</a> (Tamaño: <span class="text-dark">26.4 KB</span> Descargas: <span class="text-dark">8)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Saludos, tenía pendiente subir al foro la clase para leer ficheros DBF que desarrollé hace unos meses.<br />
Para quien quiera usarla, a tener en cuenta:<ul class="mycode_list"><li>Aunque la he utilizado en un proyecto real de integración de datos, y la he testado con distintos DBF, es una versión muy básica, sin optimizar y prácticamente solo la he utilizado con ficheros que venían de un único cliente. Así que es muy posible que dependiendo de la versión y el origen del DBF pueda fallar.<br />
</li>
<li>Solo funciona como lector, no tiene capacidad de actualizar o escribir ese formato de ficheros.<br />
</li>
<li>Devuelve todos los registros del fichero sin tener en cuenta si el registro está marcado para borrado o no.<br />
</li>
</ul>
Dentro del fuente hay un par de ficheros de prueba y un TXT con las especificaciones de la estructura de este tipo de ficheros.<br />
Para más información:<br />
<a href="https://www.clicketyclick.dk/databases/xbase/format/index.html" target="_blank" rel="noopener" class="mycode_url">Xbase File Format Description</a><br />
<a href="http://independent-software.com/dbase-dbf-dbt-file-format.html" target="_blank" rel="noopener" class="mycode_url">DBF AND DBT/FPT FILE STRUCTURE</a><br />
<a href="https://docs.fileformat.com/es/database/dbf/" target="_blank" rel="noopener" class="mycode_url">Formato de archivo DBF</a><br />
<br />
Para probarlo basta con ejecutar en el IDE, seleccionar el DBF para mostrar la estructura y con el botón "Cargar" se rellena el GridView con los datos.<br />
<br />
<img src="https://i.imgur.com/LHEckzy.png" loading="lazy"  alt="[Imagen: LHEckzy.png]" class="mycode_img" /><br />
<img src="https://i.imgur.com/jwmUiHL.png" loading="lazy"  alt="[Imagen: jwmUiHL.png]" class="mycode_img" /><br />
<br />
Un saludo, Harpo.<br /><!-- start: postbit_attachments_attachment -->
<div class="row mt-2 g-1 text-muted">
	<div class="col-auto align-self-center">

<!-- start: attachment_icon -->
<img src="https://gambas-es.org/images/attachtypes/tar.png" title="GZIP Compressed File" style="height: 16px; width: 16px" border="0" alt=".gz" />
<!-- end: attachment_icon -->
		
	</div>
	<div class="col align-self-center">
		<a href="attachment.php?aid=500" target="_blank" title="">DbfFiles-0.0.1.tar.gz</a> (Tamaño: <span class="text-dark">26.4 KB</span> Descargas: <span class="text-dark">8)</span>
	</div>
</div>
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ResultTree, un control que muestra una result en forma de árbol.]]></title>
			<link>https://gambas-es.org/thread-1728.html</link>
			<pubDate>Mon, 08 Jul 2024 10:49:31 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=4">Shordi</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1728.html</guid>
			<description><![CDATA[Hace años hice el sqlTree o dbSqlTree... no recuerdo muy bien, que era un control bastante complejo que hacía eso mismo que pone en el título... con añadiduras, como la capacidad de poner iconos en los items del treeview y más cosas que no recuerdo.<br />
Ayer, en el vídeo explico por qué, se me planteó ese problema otra vez y decidí hacer uno más simple, de hecho <span style="font-style: italic;" class="mycode_i">Muy</span> simple, que hiciese eso y que fuese fácil de entender y de incluir en los programas de ejemplo que estoy haciendo para youtube. El resultado es ResutTree.<br />
<br />
<iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/rKZE6kA3t2Y" frameborder="0" allowfullscreen="true"></iframe><br />
<br />
El código lo he adjuntado al vídeo, por si a alguien le interesa.<br />
<br />
Saludos]]></description>
			<content:encoded><![CDATA[Hace años hice el sqlTree o dbSqlTree... no recuerdo muy bien, que era un control bastante complejo que hacía eso mismo que pone en el título... con añadiduras, como la capacidad de poner iconos en los items del treeview y más cosas que no recuerdo.<br />
Ayer, en el vídeo explico por qué, se me planteó ese problema otra vez y decidí hacer uno más simple, de hecho <span style="font-style: italic;" class="mycode_i">Muy</span> simple, que hiciese eso y que fuese fácil de entender y de incluir en los programas de ejemplo que estoy haciendo para youtube. El resultado es ResutTree.<br />
<br />
<iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/rKZE6kA3t2Y" frameborder="0" allowfullscreen="true"></iframe><br />
<br />
El código lo he adjuntado al vídeo, por si a alguien le interesa.<br />
<br />
Saludos]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[¿Por qué no se disparan los eventos KeyPress o KeyRelease en Qt?]]></title>
			<link>https://gambas-es.org/thread-1727.html</link>
			<pubDate>Fri, 05 Jul 2024 19:27:40 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=62">Grandamakulo</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1727.html</guid>
			<description><![CDATA[Pues eso, compañeros. En un TextArea en GTK se disparan ambos eventos, pero con el mismo control en Qt no hay manera. ¿Alguien sabe cómo solucionarlo?<br />
Mil gracias de antemano.<br />
<br />
<br />
SOLUCIONADO al actualizar Linux Mint, por lo que obviamente no era cosa de Gambas3 <img src="https://gambas-es.org/images/smilies/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" />]]></description>
			<content:encoded><![CDATA[Pues eso, compañeros. En un TextArea en GTK se disparan ambos eventos, pero con el mismo control en Qt no hay manera. ¿Alguien sabe cómo solucionarlo?<br />
Mil gracias de antemano.<br />
<br />
<br />
SOLUCIONADO al actualizar Linux Mint, por lo que obviamente no era cosa de Gambas3 <img src="https://gambas-es.org/images/smilies/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Change password control]]></title>
			<link>https://gambas-es.org/thread-1721.html</link>
			<pubDate>Tue, 02 Jul 2024 13:43:07 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://gambas-es.org/member.php?action=profile&uid=12">tincho</a>]]></dc:creator>
			<guid isPermaLink="false">https://gambas-es.org/thread-1721.html</guid>
			<description><![CDATA[Hola, necesito un control para cambiar passwords y antes de ponerme a hacerlo quería saber si alguien tiene algo hecho ya.<br />
El control debería trabajar con un hash, es decir con una cadena de texto que no es la password pero que solo puede generarse indicando la password.<br />
para ello viene perfecto el componente gb.crypt<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>Crypt.SHA512(sPasswd, sSecret)</code></div></div>]]></description>
			<content:encoded><![CDATA[Hola, necesito un control para cambiar passwords y antes de ponerme a hacerlo quería saber si alguien tiene algo hecho ya.<br />
El control debería trabajar con un hash, es decir con una cadena de texto que no es la password pero que solo puede generarse indicando la password.<br />
para ello viene perfecto el componente gb.crypt<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>Crypt.SHA512(sPasswd, sSecret)</code></div></div>]]></content:encoded>
		</item>
	</channel>
</rss>