Leandro Ascierto

Visual Basic

 
ucImage y ucImageList

ucImage y ucImageList

 

Se trata de dos controles de usuario realizados por Cobein los cuales me han gustado mucho y con su permiso los publico aquí, como sus nombres bien lo dicen uno es para mostrar imágenes de todo tipo PNG, ICO, GIF, JPG, Etc. inclusive darle efectos de brillo, rotación en todos los sentidos, transparencia, escala de grises, contraste. Y el otro es un ImageList (para los que no saben de que se tratan los ImageList, son controles donde se almacenan una lista de imágenes para luego poder aplicarlas en otro control), este también tiene soporte para todos los tipos de imágenes antes mencionadas.
Para los que ya conocían este control se ha solucionado el problema que tenía en el incremento progresivo del uso de la memoria. También le he agregado una propiedad para reconocer las regiones de la imágen (Créditos a LaVolpe) y una función para poder mostrar imágenes desde la web (incluye progreso de carga).



ucImage y ucImageList

Descargar ucImage y ucImageList.zip
846 Kb
Descargado 203 veces



0/5 puntos (0 voto)


Bookmark and Share

16 Comentarios

  1.  

    yo usaba este control y cuando me di cuenta que incrementaba el uso de la memoria deje de usarlo, pero ahora parece que los haz solucionado gracias por el aporte ^^

  2.  

    Nueva actualización, que corrige un error inseperado. (almenos creo que se soluciono)

  3.  

    Mis créditos a Cobein, Lavolpe y Ascierto por semejante código. Felicitaciones de verdad. La última corrección del problema de incremento de memoria 10 puntos!!. Pero ahora me surge otro error y no sé que puede llegar a ser. De bien de estar se cuelga y me sale un error que dice:

    " La instrucción en '0x4eba71cf' hace referencia a la memoria en '0x056e037c' . La memoria no se puede 'read'. "

    Y me da la opcion de Aceptar o Cancelar. Si acepto, se sale del programa y si cancelo, me lleva a VB c++ (al debugger) donde aparece otro cartel que dice:

    " Unhandled exception in VB6.exe (GDIPLUS.DLL): 0xc0000005: Access Violation."

    Y ACEPTAR es la única opcion. Después de aceptar... afuera!

    Leandro, si el problema que te planteo considerás que es inherente a UcImage y está dentro de tus posibilidades echarle una ojeada al código para corregirlo, desde ya muy agradecido.

  4.  

    @Lucho por las dudas el Lunes 16 de Noviembre de 2009, subi una nueva actualizacion, pero bien por lo que veo el error que marca es de GDIPLUS.DLL y no lo que corregi, la verdad no se que pueda estar causando esto. dame algunos datos como si en tiempo de diseño o cuando cargas alguna imagen.
    cualquier cosa pasamos la consulta al foro para expresarnos mejor.

    Saludos.

  5.  

    Leandro, gracias por responder la consulta. Esa actualización del 16/11 ya la bajé pero no pasa nada.
    El problema se me plantea tanto en diseño como en ejecución. Creo que identifiqué el foco del problema, esto es:
    Estoy usando varias imágenes PNG y superpuesta a cada una de ellas un Image Control normal de VB6 para aprovechar la
    propiedad MouseIcon. Luego en el evento Mouse_Move de este control va el código que simula "encender" la imagan PNG de abajo usando la propiedad brightness=15 (genial esa propiedad). Pero ahí es que, aleatoria, NO sistemáticamente, cuando paso o intento pasar el mouse por encima de cualquiera de esos controles para que se active el evento "encender imagen" con brightness=15... es cuando se cuelga y salta el error!. Ya bajé varios gdiplus.dll de diferentes url's para probarlos y en todos me pasa lo mismo. También probé sacando los Ctrl Image de VB y dejando sólo los de UcImage (obvié el MouseIcon) y tampoco funciona. Gracias por el aguante. Saludos

  6.  

    Lucho, la verdad no me ocurre en mi pc pero puede que no este recreando bien tu situación, porque no mejor pasamos al foro y subis un ejemplo a rapidshare o megaupload para probarlo mejor. tambien decime que sistema operativo tenes.

    Saludos.

  7.  

    EUREKA!!! SOLUCIONÉ el PROBLEMA!.
    Leandro, te pido disculpas pero te había planteado a medias el problema. De cualquier manera te mando la solución que
    encontré por si alguien está peleando con el mismo problema. Tal vez le sea útil. Estoy programando en VB6 sobre Win XP SP2.

    Pasaba ésto: cuando en el Fprincipal "encendía" la imagen (desde el Mouse_Move) y hacía click, esa acción mostraba un nuevo formulario -modal- para interactuar (Form2.Show 1). Hasta ahí todo ok.
    Ahora, antes de DESCARGARLO con UNLOAD Me, en el código hay un ciclo for que dice:

    For i=1 to Num_PNG
    'vuelvo las imágenes que había "encendido" a su estado natural
    FPrincipal.PNG_ON(i).Brightness = 0
    Next i

    Unload Me

    Entonces, se descargaba el Form2 y volvía al FPrincipal... y acá es donde al intentar pasar el mouse por encima de las PNG saltaba el famoso ERROR (a la 1º vez, 2º, 3º o cuando se le ocurriera... siempre antes de la 8º) ¿?

    Lo que

  8.  

    me cortó el mensaje a la mitad ¿? ... aca te mando el resto

    Lo que hice finalmente fue reemplazar el UNLOAD ME por ME.HIDE y FUNCIONÓ!... NO SE COLGÓ MÁS!? AHORA TODO FUNCIONA A FULL!.
    Igual sigo sin comprender el porqué!?, y si UcImage tiene que ver o no con este problema. Seguramente ésta no es la solución óptima ya que salgo de una para meterme en otra que es el mayor consumo de memoria creo, pero por ahora parece andar todo muy bien, pues no se colgó más.

    En fin, si alguien tiene el mismo problema, espero que esta ayuda "casera" le sirva y le funcione como a mí. Si se llega a colgar de nuevo te aviso. Gracias por tu tiempo. Saludos

  9.  

    Ahora si veo el error, si es un problema del Api SetTimer y KillTimer ya que usa todo un complejo codigo para poder hacerlas funcionar dentro del UC, pero bueno buscarle una solución a eso es muy complicado asi que lo que hice fue remplazar las apis por un Control timer asi se evita todo tipo de crash ineperado, por lo que vi el Control Timer no produce ningun consumo extra en la memoria asi que ahora esta mas estable.

    Descargalo nuevamente y decime si ahora funciona todo bien.
    despues cualquier cosa le agrego la propiedad Mouse Pointer y Mouse Icon.

  10.  

    Bajé la nueva actualización y no pasó nada, sigue el error. Volví al atajo del Me.Hide y todo volvió a funcionar a FULL. ¿?
    Sería muy útil el agregado de las propiedades Mouse Pointer y Mouse Icon. Igual, así como está es excelente. Saludos.

  11.  

    Leandro estaba probando este control de usuario el ucImage (no el imagelist) y cuadno lo agregas a un proyecto nuevo por ejemplo al agregar el control, despues al agregar la pagina de propiedades saltan unos errores en la misma,. como si el control de usuario no tuviera alguna spropiedades que la esta usando la pagina de propiedades...fijate proba agregarlo en un proyecto nuevo desde 0...¿¿sera un ctl viejo ?? saludos.

  12.  

    deja ya esta corregido, por alguna raon me tira errores al agregarlo, y el control ucImage1 de la pagina de propiedades se me transforma en un picturebox, eso ocurre cuando no puede cargar el control por errores, pero despues borro el picture e ingreso un control ucImage y anda perfecto, ni idea que puede ser...pero ya esta...

  13.  

    Leandro, te molesto de nuevo por otro problema con el UCimage. Estoy usando VB6 en WinXP SP3.
    Tengo 10 imagenes de distintos tamaños cargadas en un control ucImageList y un control ucImage donde las voy mostrando de a una. El problema es que cuando carga una imagen y la quiero CENTRAR respecto al ancho de un picture (es un picture con un Height=400 que uso para mostrar info que está siempre visible en la parte superior de la pantalla y que ocupa todo su ancho) NO LO HACE BIEN porque no registra el ancho de la nueva imagen cargada sino que se
    mantiene el ancho de la anterior y obviamente la muestra descentrada. Probé con las propiedad .Refresh antes y despues de la .Visible pero no pasa nada. Será que es un problema del ucImage!?. Desde ya muy agradecido.

  14.  

    Fijate que tiene una propiedad ScaleMode, creo que para tu neseidad tendrias que utilizar la 3 - eScale

    Saludos.

  15.  

    Nada, no pasa nada con ningún ModeScale, sigue manteniendo el ancho y alto de la imagen "descargada" y a pesar de mostrar la imagen "nueva" (recien cargada) trabaja con las propiedades de la "descargada" ???.

  16.  

    SOLUCIÓN CASERA: cuando cargo el Form, en el evento Load cargo un Arry_HEIGHT() y un Arry_WIDTH() con las medidas de cada imágen obtenidas en tiempo de diseño, cargando para eso una por una en el control ucImage y tomando de allí las propiedades Height y Width y asignándoselas a cada array. Todo esto utilizando la propiedad ScaleMode = eActualSize.
    Entonces, cuando en tiempo de ejecución cambia la imágen, automáticamente la identifico y busco en los Array_H() y Array_W() el Index correspondiente y trabajo con ESOS DATOS para alinearlo con el Picture_Info, NO CON LOS DATOS DEL CONTROL que tiene la imágen que acaba de cargar PORQUE NO SON LOS REALES. Bueno, así lo hice y así parece funcionar al 100%. En fin. Espero que esta solución también le sirva a quien esté teniendo este mismo problema. Saludos.

Deja tu comentario

Todos los campos son requeridos excepto el de la web

Tu Nombre o Nick

Tu Email (no ser publicado)

Pgina Web (opcional)

Comentario


Cdigo de seguridad