• Domingo 28 de Abril de 2024, 23:23

Autor Tema:  Shape  (Leído 1951 veces)

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Shape
« en: Lunes 2 de Mayo de 2005, 18:04 »
0
Hola chicos de SoloCodigo, tengo unas cuantas consultas es que estoy un poquito enrredado.

Estoy trabajando con el control shape para unos cortes que le debo hacer a un shape mas largo, el programa consiste asi:

Manejo un control shape de un tamaño grande y otro de tamaños mas pequeños.



En el shape mas grande me deben caber cierta cantidad de los shapes mas pequeños, de acuerdo a esta formula.
Código: Text
  1. 'TxtAlLami es el Height del Shape grande
  2. 'TxtAlCor es el Height del Shape pequeño
  3. 'TxtAnLami es el Width del Shape grande
  4. 'TxtAnCor es el Width del Shape pequeño
  5. x = Val(TxtAlLami.Text) / Val(TxtAlCor.Text)
  6. y = Val(TxtAnLami.Text) / Val(TxtAnCor.Text)
  7. a = x * y
  8.  
Esta formula calcula la cantidad de veces que cabe el shape pequeño en el grande, pero ahora los problemas son:

1.) Acomodar la cantidad de shapes pequeños, que los usos como un array de controles, dentro del grande en la mejor forma, vertical u horizontal, sin pasarme ni del height o el width del grande, uno debajo del otro, y cuando pase el height o el width, seguir al lado de los primeros shapes.

2.) Se pueden dar diferentes tamaños al shape pequeño, y acomodar en diferentes partes del shape grande estos pequeños de la mejor forma, sin gastar espacio para los demas shapes.

PD. sino me entienden me desgloso un poquito mejor
Gracias Chao
[/color]
El pasado son solo recuerdos, el futuro son solo sueños

Soultaker

  • Miembro HIPER activo
  • ****
  • Mensajes: 972
  • Nacionalidad: pe
    • Ver Perfil
Re: Shape
« Respuesta #1 en: Lunes 2 de Mayo de 2005, 22:34 »
0
Pa' empezar las propiedades estas que las usas inversamente, estas que usas la propiedad width en el height del objeto y viceversa, fijate en tus imagenes el largo que le das es mayor al ancho pero las imagenes la muestran al revez.

Una solución a lo que pides es que colocas un shape chico en el grande, al colocarlo.
1ero. Colocar el primer SHAPE chico en el TOP del SHAPE grande.

2do. Colocar el segundo SHAPE chico en el HEIGHT + TOP del primer SHAPE chico. Y seguir haciendo ese procedimiento hasta que pase el height del SHAPE grande.

3ro. Llegas y sobrepasa al HEIGHT del SHAPE grande, ahora como sabes que pasaste el SHAPE grande, fácil sumas el HEIGHT y el TOP del SHAPE grande y también sumas el HEIGHT y el TOP del SHAPE chico y luego verificas si el resultado del SHAPE chico es mayor al del SHAPE grande.

4to. Colocar al costado del primer SHAPE chico, en este caso es igual solo que ahora sumas el WIDTH y el LEFT del SHAPE chico y el TOP de este, en el LEFT del SHAPE chico que va al costado del primer SHAPE chico le colocas la suma del WIDTH y del HEIGHT de este y en el TOP del SHAPE chico que va al costado del primer SHAPE chico le colocas el TOP del primer SHAPE chico.
Bueno espero que me hayas entendido.

Citar
PD. sino me entienden me desgloso un poquito mejor
Yo también  :D  :lol:

 :comp:
http]
foros,programacion, c, c++, java,
linux, videojuegos, directX, .NET,
visual basic,robotica,microprocesadores

Para los nuevos usuarios de este Foro, por favor leerse esta discusión.
Cómo Hacer Preguntas De Forma Inteligente

Ojos que no ven... pisan caquita
Camarón que se duerme... muere electrocutado


<<< Harol Moreyra Bendezú >>>

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Shape
« Respuesta #2 en: Martes 3 de Mayo de 2005, 00:28 »
0
El Width va hacia la derecha y el Height hacia abajo
Ok man, esta muy facil y bonito lo que estas diciendo, es mas lo de colocar debajo del otro es muy facil, pero hay un problema en el que no caes en cuenta, como vistes, se pueden colocar shapes de diferentes tamaños, y aqui es donde entra el problema (POR LO MENOS PARA MI).

¿Como racionar a la perfección el shape grande, para que entren diferentes shapes pequeños?

Mira el codigo tan cochino que tengo para acomodar los shapes dentro del grande, he incluso sigue sin servir.
Código: Text
  1. Private Sub Command2_Click()
  2. On Error Resume Next
  3. Dim vc
  4. Shp(0).Top = Shp1.Top
  5. Shp(0).Left = Shp1.Left
  6. For h = 1 To 19
  7.  vc = h
  8.  Shp(h).Left = Shp1.Left
  9.  Shp(h).Top = Shp(h - 1).Height + Shp(h - 1).Top + 15
  10.  If Shp(h).Top + Shp(h).Height &#62; Shp1.Height Then
  11.   MsgBox &#34;YA PASO EL MAXIMO&#34;
  12.   Exit For
  13. '  Shp(h).Left = Shp(0).Width + 100
  14.  End If
  15. Next
  16. MsgBox vc + 1
  17. Shp(vc + 1).Top = Shp1.Top
  18. 'Aqui 'ta el problema me esta dando 0 el vc, voy a ver como lo arreglo
  19. Shp(vc + 1).Left = Shp(vc - vc).Width + 125
  20. vc = vc + 1
  21. For h = vc + 1 To 19
  22.  vc = h
  23.  Shp(h).Left = Shp(h - vc).Width + 125
  24.  Shp(h).Top = Shp(h - 1).Height + Shp(h - 1).Top + 15
  25.  If Shp(h).Top + Shp(h).Height &#62; Shp1.Height Then
  26.   MsgBox &#34;YA PASO EL MAXIMO&#34;
  27.   Exit For
  28.  End If
  29. Next
  30. MsgBox vc + 1
  31. Shp(vc + 1).Top = Shp1.Top
  32. Shp(vc + 1).Left = Shp(vc - vc).Width + 125
  33. vc = vc + 1
  34. For h = vc + 1 To 19
  35.  vc = h
  36.  Shp(h).Left = Shp(h - vc).Width + 125
  37.  Shp(h).Top = Shp(h - 1).Height + Shp(h - 1).Top + 15
  38.  If Shp(h).Top + Shp(h).Height &#62; Shp1.Height Then
  39.   MsgBox &#34;YA PASO EL MAXIMO&#34;
  40.   Exit For
  41.  End If
  42. Next
  43. End Sub
  44.  
Ojala me entiendas.
Gracias Chao[/color]
El pasado son solo recuerdos, el futuro son solo sueños

Soultaker

  • Miembro HIPER activo
  • ****
  • Mensajes: 972
  • Nacionalidad: pe
    • Ver Perfil
Re: Shape
« Respuesta #3 en: Martes 3 de Mayo de 2005, 22:20 »
0
Aca esta un ejemplo de lo que quieres, pero aqui solo lo pone debajo de cada shape, si quieres cambiale de tamaño al shape grande y siempre lo va poniendo debajo y no se pasa el shape grande, ya te dejo de tarea pa que lo hagas al costado, usa la misma logica.

 :comp:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
http]
foros,programacion, c, c++, java,
linux, videojuegos, directX, .NET,
visual basic,robotica,microprocesadores

Para los nuevos usuarios de este Foro, por favor leerse esta discusión.
Cómo Hacer Preguntas De Forma Inteligente

Ojos que no ven... pisan caquita
Camarón que se duerme... muere electrocutado


<<< Harol Moreyra Bendezú >>>

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Shape
« Respuesta #4 en: Martes 3 de Mayo de 2005, 22:25 »
0
Esto ya lo hice Soultaker, es mas lo del lado ya tambien, pero lo que no trunka es cuando son más de 2 columnas ay viene el chingo problema :( y no lo he podido acomodar.
El pasado son solo recuerdos, el futuro son solo sueños

Soultaker

  • Miembro HIPER activo
  • ****
  • Mensajes: 972
  • Nacionalidad: pe
    • Ver Perfil
Re: Shape
« Respuesta #5 en: Martes 3 de Mayo de 2005, 23:18 »
0
No te entiendo a que te refieres con mas de dos columnas

 :comp:
http]
foros,programacion, c, c++, java,
linux, videojuegos, directX, .NET,
visual basic,robotica,microprocesadores

Para los nuevos usuarios de este Foro, por favor leerse esta discusión.
Cómo Hacer Preguntas De Forma Inteligente

Ojos que no ven... pisan caquita
Camarón que se duerme... muere electrocutado


<<< Harol Moreyra Bendezú >>>

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Shape
« Respuesta #6 en: Miércoles 4 de Mayo de 2005, 16:19 »
0
Hola radical & co.

No sé si he comprendido muy bien (si no, házmelo saber), pero creo que esto debería de servirte:

Código: Text
  1.  
  2. Private Sub Command2_Click()
  3.  
  4.     Dim lRows As Long, lCols As Long
  5.     lRows = Int(Shape1.Height / Shape2(0).Height)
  6.     lCols = Int(Shape1.Width / Shape2(0).Width)
  7.    
  8.     Dim lRow As Long, lCol As Long, lIdx As Long
  9.     Dim iFrom As Integer
  10.    
  11.     Shape2(0).Move Shape1.Left, Shape1.Top
  12.     For lRow = 1 To lRows
  13.         If lRow &#62; 1 Then
  14.             iFrom = 1
  15.         Else
  16.             iFrom = 2
  17.         End If
  18.         For lCol = iFrom To lCols
  19.             lIdx = lIdx + 1
  20.             Load Shape2(lIdx)
  21.             Shape2(lIdx).Move Shape1.Left + Shape2(0).Width * (lCol - 1), Shape1.Top + Shape2(0).Height * (lRow - 1)
  22.             Shape2(lIdx).Visible = True
  23.         Next lCol
  24.     Next lRow
  25.  
  26. End Sub
  27.  
  28.  

Por otro lado, ignoro qué es lo que pretendes hacer, pero piensa en la posibilidad de dibujar rectángulos mediante el método Line, así te ahorrarías cargar el form con tantos controles.

Suerte.