In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

TImagelist

Foro público de Xailer en español
Responder
Avatar de Usuario
erzeballos
Mensajes: 9
Registrado: Lun Jul 11, 2011 4:41 pm
Ubicación: Cordoba - Argentina
Contactar:

TImagelist

Mensaje por erzeballos »

Hola a Todos
Hay algun modo de extraer iconos almacenados en un archivo de recursos ( guardados en una DLL )
en tiempo de ejecucion para cargarlos en una objeto TImageList mediante el metodo AddIcon ??
Este TImageList pertenece a un objeto TMenu y la idea es customizar los iconos de la Aplicacion solo cambiando la Dll de recursos de acuerdo al perfil del usuario .
Desde ya muchas Gracias
joselalinf
Mensajes: 291
Registrado: Jue Ene 31, 2013 1:10 pm

TImagelist

Mensaje por joselalinf »

Edgardo,
nunca lo he hecho pero imagino que sólo necesitas que cada dll contenga los
mismos nombres para las imágenes.
Si no consigues echarlo a andar, aví­same y lo miramos.
Saludos,
José Lalí­n
Avatar de Usuario
xhermita
Mensajes: 177
Registrado: Vie Feb 18, 2011 10:05 pm
Ubicación: Las Palmas de Gran Canaria
Contactar:

TImagelist

Mensaje por xhermita »

Hola Edgardo;
Nosotros utilizamos una DLL con los recursos de los programas y tenemos
varias versiones con los mismos nombre de recursos pero con versiones
diferentes de los ficheros, por ejemplo tenemos los iconos que
utilizamos en los programas a todo color en uno y en el otro tenemos los
mismo iconos pero a dos colores.
Cuando iniciamos el programa sobrecargamos New() y añadimos la carga de
la DLL con "HB_LibLoad( "Recursos.dll" )"
Espero que te ayude.
Un saludo
Pedro Amaro
El 18/02/2015 a las 23:28, Edgardo Ruben Zeballos escribió:
> Hola a Todos
> Hay algun modo de extraer iconos almacenados en un archivo
> de recursos ( guardados en una DLL ) en tiempo de ejecucion para
> cargarlos en una objeto
> TImageList mediante el metodo AddIcon ??
> Este TImageList pertenece a un objeto TMenu y la idea es
> customizar los iconos de la Aplicacion solo cambiando la Dll
> de recursos de acuerdo al perfil del usuario .
> Desde ya muchas Gracias
Pedro Amaro
2PC Service

Xailer / Néfele / MySQL-MariaDB / SQLServer
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

TImagelist

Mensaje por Carlos Ortiz »

y en modo diseño cuando estas diseñanando un form como asignas los
iconos o imágenes a los controles?
Carlos
El 22/02/2015 a las 10:54, Pedro Amaro escribió:
> Hola Edgardo;
>
> Nosotros utilizamos una DLL con los recursos de los programas y
> tenemos varias versiones con los mismos nombre de recursos pero con
> versiones diferentes de los ficheros, por ejemplo tenemos los iconos
> que utilizamos en los programas a todo color en uno y en el otro
> tenemos los mismo iconos pero a dos colores.
>
> Cuando iniciamos el programa sobrecargamos New() y añadimos la carga
> de la DLL con "HB_LibLoad( "Recursos.dll" )"
>
> Espero que te ayude.
>
> Un saludo
> Pedro Amaro
>
>
> El 18/02/2015 a las 23:28, Edgardo Ruben Zeballos escribió:
>> Hola a Todos
>> Hay algun modo de extraer iconos almacenados en un archivo
>> de recursos ( guardados en una DLL ) en tiempo de ejecucion para
>> cargarlos en una objeto
>> TImageList mediante el metodo AddIcon ??
>> Este TImageList pertenece a un objeto TMenu y la idea es
>> customizar los iconos de la Aplicacion solo cambiando la Dll
>> de recursos de acuerdo al perfil del usuario .
>> Desde ya muchas Gracias
>
Avatar de Usuario
xhermita
Mensajes: 177
Registrado: Vie Feb 18, 2011 10:05 pm
Ubicación: Las Palmas de Gran Canaria
Contactar:

TImagelist

Mensaje por xhermita »

La DLL con los recursos es un proyecto de xailer, por lo que solo tengo
que añadir el proyecto en el Gestor de Proyectos, siempre utilizo una de
las versiones de los recursos, la que tiene los iconos mas me gusta ver
mientras programo.
Tenemos varios proyectos iguales que general la misma DLL, pero cada
proyecto tiene sus propios recursos.
Tienes que tener en cuenta que si modificas el proyecto desde dentro de
tu aplicación, la DLL compilada se queda en la carpeta del proyecto
origen, por lo que tendrás que copiarla a la carpeta de tu aplicación
para que veas los cambios.
PD. Si no lo pillas, podemos quedar y por soporte remoto (uVNC) te lo
explico.
Un saludo.
Pedro Amaro
El 23/02/2015 a las 0:51, Carlos Ortiz escribió:
> y en modo diseño cuando estas diseñanando un form como asignas los
> iconos o imágenes a los controles?
>
> Carlos
>
> El 22/02/2015 a las 10:54, Pedro Amaro escribió:
>> Hola Edgardo;
>>
>> Nosotros utilizamos una DLL con los recursos de los programas y
>> tenemos varias versiones con los mismos nombre de recursos pero con
>> versiones diferentes de los ficheros, por ejemplo tenemos los iconos
>> que utilizamos en los programas a todo color en uno y en el otro
>> tenemos los mismo iconos pero a dos colores.
>>
>> Cuando iniciamos el programa sobrecargamos New() y añadimos la carga
>> de la DLL con "HB_LibLoad( "Recursos.dll" )"
>>
>> Espero que te ayude.
>>
>> Un saludo
>> Pedro Amaro
>>
>>
>> El 18/02/2015 a las 23:28, Edgardo Ruben Zeballos escribió:
>>> Hola a Todos
>>> Hay algun modo de extraer iconos almacenados en un archivo
>>> de recursos ( guardados en una DLL ) en tiempo de ejecucion para
>>> cargarlos en una objeto
>>> TImageList mediante el metodo AddIcon ??
>>> Este TImageList pertenece a un objeto TMenu y la idea es
>>> customizar los iconos de la Aplicacion solo cambiando la Dll
>>> de recursos de acuerdo al perfil del usuario .
>>> Desde ya muchas Gracias
>>
>
Pedro Amaro
2PC Service

Xailer / Néfele / MySQL-MariaDB / SQLServer
Avatar de Usuario
erzeballos
Mensajes: 9
Registrado: Lun Jul 11, 2011 4:41 pm
Ubicación: Cordoba - Argentina
Contactar:

TImagelist

Mensaje por erzeballos »

A ver si puedo explicar brevemente como trabajo.
Los Menus y Botones del Menu Principal de la aplicacion son generados en forma dinamica en el arranque
mediante la lectura desde la capa de Persistencia ( trabajo con modelo MVC ). Los diseños de menus y botones se persisten en tablas ( MARIADB , adjunto estructuras)
y su contenido depende de la Empresa y Usuario logeado. Una vez en memoria mediante colecciones de objetos paso a configurar ambos componentes del siguiente modo
METHOD ShowMenus() CLASS MenuFrm
::alistaMenus := Menu():listar():toarray()
::LoopMenu(::oMenu1,.f.)
::DeleteMenu(::oMenu1,.f.)
RETURN NIL
METHOD LoopMenu(oMenu,lSubMenu) CLASS MenuFrm
static cMenu := ""
local aItems := oMenu:aItems
local oMenuItem
local nReturn := 0
local i := 0
local objMenu
DEFAULT lSubMenu to .f.
For i=1 to Len(aItems)
oMenuItem := aItems
if !lSubMenu
cMenu := Upper(AllTrim(StrTran(oMenuItem:cText,"&","")))
endif
if lSubMenu
nReturn := AScan(::alistaMenus, {|a| a[10]:getmenu()=cMenu .and. a[10]:getitem() = i } )
else
nReturn := AScan(::alistaMenus, {|a| a[10]:getmenu()=cMenu .and. a[10]:getitem()= 0} )
endif
if nReturn > 0
objMenu := ::alistaMenus[nReturn,10]
else
loop
endif
if !objMenu:IsVisible()
IF oMenuItem:lSeparator
oMenuItem:lSeparator := .f.
endif
oMenuItem:cText := 'DEL'
else
oMenuItem:lEnabled := objMenu:IsEnabled()
oMenuItem:lDefault := objMenu:IsDefault()
oMenuItem:lHilited := objMenu:IsHilited()
oMenuItem:lChecked := objMenu:IsChecked()
if lSubMenu
if objMenu:getId_imagen() > 0
oMenuItem:nImage := objMenu:getId_imagen()
endif
oMenuItem:cText := objMenu:getDescripcion()
oMenuItem:cMessage := objMenu:getcargo()
endif
endif
if oMenuItem:oSubMenu <> nil
::LoopMenu(oMenuItem:oSubMenu,.t.) /// RECURRENCIA
endif
Next
RETURN NIL
METHOD DeleteMenu(oMenu,lSubMenu) CLASS MenuFrm
static cMenu := ""
local aItems := oMenu:aItems
local oMenuItem
local i := 0
local objMenu
local lDel := .t.
local nTotdel := 0
DEFAULT lSubMenu to .f.
For i=1 to Len(aItems)
oMenuItem := aItems
IF oMenuItem:cText == 'DEL'
nTotdel += 1
ENDIF
if oMenuItem:oSubMenu <> nil
::DeleteMenu(oMenuItem:oSubMenu,.t.)
endif
Next
i := 1
while nTotdel > 0
if i > Len(aItems)
i := 1
loop
endif
oMenuItem := aItems
if !lSubMenu
cMenu := Upper(AllTrim(StrTran(oMenuItem:cText,"&","")))
endif
IF oMenuItem:cText == 'DEL'
oMenu:Delete(i)
nTotdel := nTotdel - 1
ENDIF
i++
End
RETURN NIL
Como veran el ObjMenu tiene todos los metodos necesarios para realizar esta tarea, y uno de ellos getId_imagen()
me devuelve la Id de la lista de TImageList que deseo asociar al componente Menu.
Pasa que esta TImageList esta cargada mediante el IDE, y como sugiere Pedro la idea era hacerlo en Ejecucion
tal cual lo hace El. Yo lo hago en el Evento Initialize del Form del siguiente modo :
::nHRecur := HB_LibLoad( "Recursos.dll" )
if Empty(::nHRecur)
MsgDebug( 'ERROR EN DLL DE RECURSOS' )
quit
endif
el Proyecto que crea la DLL es un subproyecto del de la aplicacion principal.
Hasta aqui todo genial.... La Dll solo contiene iconos y me interesa solo el orden de los mismos.
Solo me resta encontrar el modo de cargar estos Iconos en el TImageList del oMenu1.
Obviamente la customizacion de los mismos se realiza mendiante una Interface Visual ( Panel de control )
que solo puede operar el Implementador.
Gracias a Todos por el interes puesto en el tema.
Edgardo
/*
SQLyog Ultimate v11.33 (64 bit)
MySQL - 10.0.13-MariaDB
************************************************************ *********
*/
/*!40101 SET NAMES utf8 */;
create table `menus` (
`Id` int (11),
`Empresa` char (9),
`usuario` char (30),
`menu` char (60),
`item` int (11),
`ccargo` char (300),
`descripcion` char (300),
`enabled` tinyint (1),
`visible` tinyint (1),
`hilited` tinyint (1),
`ldefault` tinyint (1),
`checked` tinyint (1),
`id_imagen` int (2)
);
joselalinf
Mensajes: 291
Registrado: Jue Ene 31, 2013 1:10 pm

TImagelist

Mensaje por joselalinf »

Edgardo,
> Solo me resta encontrar el modo de cargar estos Iconos en el
> TImageList del oMenu1.
Cuando creas un objeto TMenu, su método New() automáticamente crea un
objeto TImageList y puedes usarla como cualquier otra TImageList.
oImage:AddIcon( "nombreDelIcono" )
oImage:AddIcon( "nombreDeOtroIcono" )
También puedes crear una TImageList, cargarla y luego asignarla a
TMenu:oImagelist.
Saludos,
José Lalí­n
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

TImagelist

Mensaje por jfgimenez »

Hola a todos,
para mejorar aún más el uso de recursos desde DLLs, hemos añadido una
nueva función:
XA_ResourceSearchOrder( [<nOrder>] ) -> <nPrevOrder>
<nOrder>: 1 = Exe primero, 2 = DLLs primero
Hasta ahora, el orden en que Xailer buscaba los recursos era, primero
dentro del ejecutable, y si no se encontraba, entonces buscaba una a una
en todas las DLLs que se hubieran cargado con XA_LoadLib(). Pues bien,
desde la próxima versión se puede cambiar el orden de búsqueda, de forma
que se busque primero en las DLLs antes que en el ejecutable.
Esto permite utilizar recursos dentro de los ejecutables como vení­a
siendo habitual, y además, si el usuario quiere, puede añadir una DLL
con los recursos (con el mismo nombre, claro está), y estos tendrí­an
precedencia sobre los recursos del ejecutable.
Es más, esto incluso facilita la labor de desarrollo de los programas,
ya que podemos centrarnos en añadir directamente los recursos preferidos
al ejecutable, y después crear DLLs adicionales con los recursos
alternativos. Hasta ahora, la única forma de hacer esto era añadiendo
como subproyecto al menos una DLL de recursos, ya que no podí­amos añadir
dichos recursos al ejecutable porque tení­an precedencia sobre las DLLs.
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Responder