• Jueves 14 de Noviembre de 2024, 19:04

Autor Tema:  Popup Ajustado A Su Contenido  (Leído 4286 veces)

Moy

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Popup Ajustado A Su Contenido
« en: Viernes 13 de Mayo de 2005, 13:46 »
0
Y estaba yo tan contento con una ventana con aspecto de Popup abierta con este código
Código: Text
  1.  
  2. <script language="JavaScript">
  3. function url() {
  4. hidden = window.open('ampliacion.aspx','miFoto','edge: Raised; center: Yes; help: No; resizable: No; status: No');
  5. }</SCRIPT>
  6.  
  7.  
y en cuyo interior había un image declarado tal que así
Código: Text
  1.  
  2. <asp:image id="Foto" style="Z-INDEX: 101; LEFT: 2px; POSITION: absolute; TOP: 0px" runat="server"></asp:image>
  3.  
  4.  

Cuya imageurl le pasaba gracias a una variable global en el evento Load del formulario
Código: Text
  1.  
  2. foto.imageurl=Direccion
  3.  
  4.  
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
  1.  
  2. <script language="JavaScript">
  3. self.resizeTo(640,480);
  4. </SCRIPT>
  5.  
  6.  

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
  1.  
  2. Function Alto()
  3.         Return Foto.Height.Value()
  4.     End Function
  5.  
  6.     Function Ancho()
  7.         Return Foto.Width.Value
  8.     End Function
  9.  
  10.  
Pero... ¿podría pasárselos por parametro a una función Resizer tal que así...
Código: Text
  1.  
  2. <script language="JavaScript">
  3. function Resizer(alto,ancho)
  4. {         self.resizeTo(ancho,alto);
  5. }
  6. </SCRIPT>
  7.  
  8.  
... 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

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Popup Ajustado A Su Contenido
« Respuesta #1 en: Lunes 16 de Mayo de 2005, 10:51 »
0
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

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Popup Ajustado A Su Contenido
« Respuesta #2 en: Lunes 16 de Mayo de 2005, 13:14 »
0
¡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
  1.  
  2. <div>
  3. <asp:literal id="PanelLiteral" Runat="server"></asp:literal>
  4. </div>
  5.  
  6.  

Después crear este pedazo de funcion en la parte Asp
Código: Text
  1.  
  2.     '-- Esto obtiene las dimensiones de la imagen y ajusta la ventana a ellas
  3.     Function getImagePop(ByVal Imagen As String) As String
  4.  
  5.         '-- La clase StringBuilder es para concatenar con más comodidad
  6.         '-- Recuerda añadir Imports System.Text si te dice que no está declarada
  7.         Dim iStr As New StringBuilder
  8.  
  9.         '-- El Alto de la imagen
  10.         Dim iH As Integer = 0
  11.  
  12.         '-- El ancho de la imagen
  13.         Dim iW As Integer = 0
  14.  
  15.         '-- La direccion de las imagenes que no estén en tu proyecto
  16.         'Dim imagePath As String = ""
  17.  
  18.         '-- Comprobrar si la imagen existe (opcional) y si falla mostrar una imagen de error
  19.         'If File.Exists(Server.MapPath(imagePath & imageName)) = False Then imageName = "Error.jpg"
  20.  
  21.         Dim ti As System.Drawing.Image = System.Drawing.Image.FromFile(Server.MapPath(Imagen))
  22.  
  23.         '-- Obtiene la altura y el ancho y le añade un margen
  24.         iH = ti.Height + 60
  25.         iW = ti.Width + 40
  26.  
  27.         '-- Crea la etiqueta de la imagen y el código de resize en javascript
  28.         '-- Nota: Añade + imagePath en la linea 2 antes de Imagen si tus imagenes están en
  29.         '-- otra direccion
  30.         iStr.Append("<div align=""center"">")
  31.         iStr.Append("<img src=" + Chr(34) + Imagen + Chr(34))
  32.         iStr.Append(" border=""0""></div>")
  33.         iStr.Append("<script language=javascript>" + vbCrLf)
  34.         iStr.Append("<!--" + vbCrLf)
  35.         iStr.Append("window.resizeTo(" + iW.ToString + "," + iH.ToString + ");" + vbCrLf)
  36.         iStr.Append("-->" + vbCrLf)
  37.         iStr.Append(Chr(60) + "/script" + Chr(62) + vbCrLf)
  38.         'Else
  39.         'iStr.Append("No se pudo encontrar la imagen.")
  40.         'End If
  41.  
  42.         '-- Convierte el StringBuilder a String y devuelve el valor.
  43.         Return iStr.ToString
  44.  
  45.     End Function
  46.  
  47.  

Por ultimo solo hay que poner esto en el load de la página
Código: Text
  1.  
  2. PanelLiteral.Text = getImagePop(Direccion)
  3.  
  4.  
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
  1.  
  2. <a href="ImageWindow.aspx?myImage=MyImage1" target="_blank" onClick='window.open("ImageWindow.aspx?MyImage=MyImage1","_blank","menubar=0,status=0,scrollbars=0,resizable=0,toolbar=0");return false'><img src="MyImage1Thumb.jpg" border="1"></a>
  3.  
  4.  
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
  1.  
  2. dim myimage as string
  3.  
  4.  myImage = Request.QueryString("myImage")
  5.  
  6.         If Request.QueryString Is String.Empty Then
  7.             '-- no hace nada
  8.         Else
  9.             PanelLiteral.Text = getImagePop(myImage & ".jpg")
  10.         End If
  11.  
  12.  

Así si que da gusto abrir Popups. Gracias Maniac.