CLR: .Net / Mono / Boo / Otros CLR > ASP .NET

 Popup Ajustado A Su Contenido

(1/1)

Moy:
Y estaba yo tan contento con una ventana con aspecto de Popup abierta con este código

--- Código: Text --- <script language="JavaScript">function url() {hidden = window.open('ampliacion.aspx','miFoto','edge: Raised; center: Yes; help: No; resizable: No; status: No');}</SCRIPT>  y en cuyo interior había un image declarado tal que así

--- Código: Text --- <asp:image id="Foto" style="Z-INDEX: 101; LEFT: 2px; POSITION: absolute; TOP: 0px" runat="server"></asp:image>  
Cuya imageurl le pasaba gracias a una variable global en el evento Load del formulario

--- Código: Text --- foto.imageurl=Direccion  Con lo que la imagen aparecía con su tamaño original y todos eramos felices.

Entonces me di cuenta de que las imagenes no siempre iban a medir 640x480, pudiendo haber algunas en vertical y que el popup no se adaptaba a ellas si le quitaba el codigo con el que le establecia un tamaño fijo, que por cierto, era:

--- Código: Text --- <script language="JavaScript">self.resizeTo(640,480);</SCRIPT>  
La página principal tambien tiene un self.resize, y si le quito el suyo al popup, aparece con el tamaño de la página principal (que coincide con el tamaño de las fotos en un 0,00000000 % de las veces.

Tengo una ligera idea de como podría solucionar esto, pero me gustaría evitar en todo lo posible las funciones javascript, que me traen por la calle de la amargura.

Tengo varias ideas y no sé como implementar ninguna
1-Si pusiera como imagen de fondo del popup la imagen que ahora le estoy pasando al image "Foto" sin mencionarle por ninguna parte widths ni Heigths... ¿Al cargarse el popup se ajustaría solo al tamaño de su imagen de fondo, o pasaría como ahora, que toma el mismo tamaño de la página que lo ha activado?

2-Si no tuviese mas remedio que usar el javascript con Self Resize podría obtener la altura y el ancho de la imagen con estas funciones:

--- Código: Text --- Function Alto()        Return Foto.Height.Value()    End Function     Function Ancho()        Return Foto.Width.Value    End Function  Pero... ¿podría pasárselos por parametro a una función Resizer tal que así...

--- Código: Text --- <script language="JavaScript">function Resizer(alto,ancho){         self.resizeTo(ancho,alto);}</SCRIPT>  ... y llamarla en alguna parte para que se ejecutase al cargarse la página, sin que me dé problemas porque aun no se halla cargado algun valor y lo que le pase sean valores nulos?

3-Comprobar el tamaño de la imagen en el principal y al abrir el popup especificarselo. Esta me parece la solución más profesional, pero tambien la más jodida, porque me obligaría a estar pasando valores de un script a otro como un poseso (teniendo en cuenta que quiero usar el javascript lo menos posible) o reescribir buena parte de programa.

¿Con cual os quedarias?
-1
-2
-3
-4 (que yo desconozco)
Y... ¿Como se haría la elegida?

Moy:
Buff... No hay forma de sacarlo. :think:

Veamos... Si antes de abrir la nueva ventana, pudiera saber cuales son las dimensiones de la imagen, podría pasarselas en el window.open
¿Hay algun modo de hacerlo en javascript? Porque si es en otro tipo de script luego voy a pasar la pena negra tratando de pasárselo a la funcion Url.

Una cosa que he notado y no me gusta nada es que cuando uso el código Java "self.resize", cualquier página que abra después tendrá ese tamaño. Incluso si abro una página en blanco.
Este efecto secundario me parece espantoso, asi que preferiría no tener que usarlo.

Moy:
¡Ya está solucionado, probado y va de maravilla!

Un tal Maniac había dado con una solución limpia y profesional al problema.

Primero, en la página Html hay que poner un literal de esta manera (aun no sé lo que es un literal, pero funciona)

--- Código: Text --- <div><asp:literal id="PanelLiteral" Runat="server"></asp:literal></div>  
Después crear este pedazo de funcion en la parte Asp

--- Código: Text ---     '-- Esto obtiene las dimensiones de la imagen y ajusta la ventana a ellas    Function getImagePop(ByVal Imagen As String) As String         '-- La clase StringBuilder es para concatenar con más comodidad        '-- Recuerda añadir Imports System.Text si te dice que no está declarada        Dim iStr As New StringBuilder         '-- El Alto de la imagen        Dim iH As Integer = 0         '-- El ancho de la imagen        Dim iW As Integer = 0         '-- La direccion de las imagenes que no estén en tu proyecto        'Dim imagePath As String = ""         '-- Comprobrar si la imagen existe (opcional) y si falla mostrar una imagen de error        'If File.Exists(Server.MapPath(imagePath & imageName)) = False Then imageName = "Error.jpg"         Dim ti As System.Drawing.Image = System.Drawing.Image.FromFile(Server.MapPath(Imagen))         '-- Obtiene la altura y el ancho y le añade un margen        iH = ti.Height + 60        iW = ti.Width + 40         '-- Crea la etiqueta de la imagen y el código de resize en javascript        '-- Nota: Añade + imagePath en la linea 2 antes de Imagen si tus imagenes están en        '-- otra direccion        iStr.Append("<div align=""center"">")        iStr.Append("<img src=" + Chr(34) + Imagen + Chr(34))        iStr.Append(" border=""0""></div>")        iStr.Append("<script language=javascript>" + vbCrLf)        iStr.Append("<!--" + vbCrLf)        iStr.Append("window.resizeTo(" + iW.ToString + "," + iH.ToString + ");" + vbCrLf)        iStr.Append("-->" + vbCrLf)        iStr.Append(Chr(60) + "/script" + Chr(62) + vbCrLf)        'Else        'iStr.Append("No se pudo encontrar la imagen.")        'End If         '-- Convierte el StringBuilder a String y devuelve el valor.        Return iStr.ToString     End Function  
Por ultimo solo hay que poner esto en el load de la página

--- Código: Text --- PanelLiteral.Text = getImagePop(Direccion)  Donde Direccion es la direccion de la imagen a mostrar partiendo del directorio virtual. Es decir, si la direcion completa de tu imagen es http://Localhost/Algarroba/imagenes/Portada.jpg entonces solo tienes que poner imagenes/portada.jpg

Yo usé una variable global para guardar esta direccion, porque no me manejo con los request y la madre que los trajo; pero en el ejemplo lo hacía con request strings y le iba de maravilla (a él, claro está  <_< )

Por si alguien puede darle uso, lo necesario para usar los request es esto:

En la página original poner:

--- Código: Text --- &#60;a href=&#34;ImageWindow.aspx?myImage=MyImage1&#34; target=&#34;_blank&#34; onClick='window.open(&#34;ImageWindow.aspx?MyImage=MyImage1&#34;,&#34;_blank&#34;,&#34;menubar=0,status=0,scrollbars=0,resizable=0,toolbar=0&#34;);return false'&#62;&#60;img src=&#34;MyImage1Thumb.jpg&#34; border=&#34;1&#34;&#62;&#60;/a&#62;  Esto mostraría un boton con la imagen Myimage1Thumb.jpg que al ser pulsado enviaría el nombre de la imagen al formulario Imagewindow.aspx
Aquí da por sentado que sabes de antemano el nombre de la imagen, asi que se lo pasa sin ponerle la terminacion Jpg, que le añade en el load de ImageWindow de esta manera:

--- Código: Text --- dim myimage as string  myImage = Request.QueryString(&#34;myImage&#34;)         If Request.QueryString Is String.Empty Then            '-- no hace nada        Else            PanelLiteral.Text = getImagePop(myImage & &#34;.jpg&#34;)        End If  
Así si que da gusto abrir Popups. Gracias Maniac.

Navegación

[0] Índice de Mensajes

Ir a la versión completa