Ir al contenido


Foto

Formula para dividir ancho


  • Por favor identifícate para responder
17 respuestas en este tema

#1 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 29 noviembre 2008 - 10:58

Hola,

No es tanto un truco, ni nada del otro mundo pero quiero compartir con ustedes esta simple fórmula que cree para solucionar cierto problema.

¿De que se trata?

Simple, hay veces que tenemos cierta medida y dentro de esta queremos ubicar partes mas pequeñas, pero ¿como saber el espacio entre ellas para que queden equitativamente?

La solución

                                                  d = dc - ( nb * a)
                                                                nb + 1
Donde:
  d = Distancia o espacio a saber
  dc = Distancia o ancho completo del objeto a dividir
  nd = Numero de partes que serán puestas dentro del objeto (dc)
  a = Ancho de cada parte que será puesta (nd)

En Delphi


delphi
  1. d := ( dc - ( nb * a ) ) / ( nb + 1 ); // En este caso d debe ser un valor Double
  2. d := Round ( ( dc - ( nb * a ) ) / ( nb + 1 ) ); // En este te devuelve un entero



Espero no se confundan con la fórmula y que les sea de utilidad para algo.

Saludos  ;)
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 29 noviembre 2008 - 11:16

Hola Felipe, muy interesante la fórmula, me confundo un poco con ella, imagínate de un novato o aquél que no es Informático como yo, es bueno que dejes un ejemplo de su funcionamiento si no es ninguna molestia ;).

Saludos.
  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 29 noviembre 2008 - 11:18

Hola Felipe,
Interesante "truco". Y no sólo sirve para distribuir x componentes uniformemente espaciados en una dimensión, sino en ambas.

Ahora una preguntita un poco picarona ¿Y como le harías si tus controles no tienen iguales dimensiones? ;)

Saludos,
  • 0

#4 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 29 noviembre 2008 - 11:20

Bueno, esta fórmula aplica hasta en la vida real  :D...

Pero en el mundo de la programación me permite arreglar esto

Imagen Enviada

Como ves en la imagen, las barras estan con espacios diferentes y casi juntas a la izquierda... con esta fórmula podras saber cuanto espacio debe haber entre cada una para que quede bien. ¿Se entiende?  :D
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 29 noviembre 2008 - 11:21

...¿Y como le harías si tus controles no tienen iguales dimensiones? ;)


Me ganaste con esa pregunta, ya casi la iba a hacer :D.

Saludos
  • 0

#6 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 29 noviembre 2008 - 11:22

Hola Felipe,
Interesante "truco". Y no sólo sirve para distribuir x componentes uniformemente espaciados en una dimensión, sino en ambas.

Ahora una preguntita un poco picarona ¿Y como le harías si tus controles no tienen iguales dimensiones? ;)

Saludos,


Fácil... solo suma el ancho total de todos los controles, si lo piensas bien el espacio deberia ser equitativo sin importar lo que quede en el  ;)
  • 0

#7 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 29 noviembre 2008 - 11:24

Siguiendo con la pregunta la distribución sería algo así:

Distancia - Control1 - Distancia - Control2 - Distancia - Control 3


Saludos
  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 29 noviembre 2008 - 11:25

Ok, en este caso, en la imagen, ¿qué controles estás usando?.
  • 0

#9 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 29 noviembre 2008 - 11:30

Ok, en este caso, en la imagen, ¿qué controles estás usando?.

En este caso, cada una de las barras esta dibujada mediante Canvas... para solucionarlo aca tuve que hacer algo asi:



delphi
  1. x1 := x2 + distancia; // X2 se incializa en 0;
  2. x2 := x2 + ancho + distancia;
  3. Imagen.Canvas.Rectangle(x1,y1,x2,y2); // Aca solo se trata de pasarle los valores tanto a y1 como a y2



Algo asi...
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 29 noviembre 2008 - 11:30


Hola Felipe,
Interesante "truco". Y no sólo sirve para distribuir x componentes uniformemente espaciados en una dimensión, sino en ambas.

Ahora una preguntita un poco picarona ¿Y como le harías si tus controles no tienen iguales dimensiones? ;)

Saludos,


Fácil... solo suma el ancho total de todos los controles, si lo piensas bien el espacio deberia ser equitativo sin importar lo que quede en el  ;)

Efectivamente amigo,
Sólo es cuestión de sumar. Si me lo permites, en lo general, tu fórmula puede ser así:

d = (Dmax - Sum(d_i x a_i))/Sum(a_i) + 1

Siendo Dmax el ancho máximo a repartir, d_i el ancho del control i_ésimo, a_i la cantidad de controles que tiene el control i_ésimo, y Sum() la sumatoria.

Saludos,
  • 0

#11 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 29 noviembre 2008 - 11:34

Bueno, yo cree una fórmula base... ya como tu lo planteas incluyes directamene la sumatoria de los componentes, eso es un avance de la misma ;)
  • 0

#12 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 29 noviembre 2008 - 11:50

Y podríamos seguir "refinandola", yo hice el supuesto de que todos los controles de la i_ésima clase tienen el mismo ancho, ¿pero y si no lo fuera?
Por ejemplo, si el control i_ésimo son Edits... y tengo en total 5, pero 2 de ellos tienen distinto ancho, ¿entonces?
La cuestión es que la fórmula que yo hice puede entenderse de dos maneras:

1. Donde i = 1 hasta n, donde n es la cantidad máxima de controles. Y en este caso, a siempre sería 1. Por tanto la ecuación sería:
d = (DMax - (Sum(i=1,n)(d_i)))/n

Donde Sum(i=1,n) significa: sumatoria desde i=1 hasta n...

O bien,
2. Donde i = 1 hasta n, donde n es la cantidad de controles de distintas clases. Y en este caso, a_i sería la cantidad de controles para la clase i_ésima.

Volvamos al ejemplo anterior: si en i = 1, tenemos los Edits... el cálculo sería erroneo... y debería ajustarse. Una opción en este caso, es tener dos sub_índices: i, para las categoría de controles, y un "j" para representar los tamaños de los controles de la categoría i_ésima.

Se que hice más lío. Pero me resulta un ejercicio interesante :D.

Saludos,
  • 0

#13 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 29 noviembre 2008 - 12:24

Hola,

No es tanto un truco, ni nada del otro mundo pero quiero compartir con ustedes esta simple fórmula que cree para solucionar cierto problema.

¿De que se trata?

Simple, hay veces que tenemos cierta medida y dentro de esta queremos ubicar partes mas pequeñas, pero ¿como saber el espacio entre ellas para que queden equitativamente?

La solución

                                                   d = dc - ( nb * a)
                                                                nb + 1
Donde:
  d = Distancia o espacio a saber
  dc = Distancia o ancho completo del objeto a dividir
  nd = Numero de partes que serán puestas dentro del objeto (dc)
  a = Ancho de cada parte que será puesta (nd)

En Delphi


delphi
  1. d := ( dc - ( nb * a ) ) / ( nb + 1 ); // En este caso d debe ser un valor Double
  2. d := Round ( ( dc - ( nb * a ) ) / ( nb + 1 ) ); // En este te devuelve un entero



Espero no se confundan con la fórmula y que les sea de utilidad para algo.

Saludos  ;)


Bueno a mi me sirvio para un dolor de muelas, con el dolor de cabeza que me dio, se me olvido el de la muela. :p

(broma) Un Saludo. (y)

#14 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 29 noviembre 2008 - 01:49

Y podríamos seguir "refinandola", yo hice el supuesto de que todos los controles de la i_ésima clase tienen el mismo ancho, ¿pero y si no lo fuera?
Por ejemplo, si el control i_ésimo son Edits... y tengo en total 5, pero 2 de ellos tienen distinto ancho, ¿entonces?
La cuestión es que la fórmula que yo hice puede entenderse de dos maneras:

1. Donde i = 1 hasta n, donde n es la cantidad máxima de controles. Y en este caso, a siempre sería 1. Por tanto la ecuación sería:
d = (DMax - (Sum(i=1,n)(d_i)))/n

Donde Sum(i=1,n) significa: sumatoria desde i=1 hasta n...

O bien,
2. Donde i = 1 hasta n, donde n es la cantidad de controles de distintas clases. Y en este caso, a_i sería la cantidad de controles para la clase i_ésima.

Volvamos al ejemplo anterior: si en i = 1, tenemos los Edits... el cálculo sería erroneo... y debería ajustarse. Una opción en este caso, es tener dos sub_índices: i, para las categoría de controles, y un "j" para representar los tamaños de los controles de la categoría i_ésima.

Se que hice más lío. Pero me resulta un ejercicio interesante :D.

Saludos,

Si es un buen ejercicio... trato de seguirte la idea, ahora con una restricción  :D

Suponiendo una situación en la que el control principal no permita un tamaño justo para hacer la sumatoria, me explico; donde la sumatoria de los controles supere el tamaño principal o donde el espacio sea muy reducido... podrian suceder dos cosas:
1. Los controles se solapan entre si.
2. Quedan por fuera del control principal.


En este caso ya no hablamos precisamente del espacio, sino de las propiedades y las proporciones de cada control... aunque la idea de la fórmula no busca ajustar el tamaño de los componentes, ¿podria tenerse en cuenta? tal vez... ¿sería posible? quiza... ¿lo haré yo?... no lo creo  :D

Saludos
  • 0

#15 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 29 noviembre 2008 - 02:00

Estuve pensando bien tu idea...

Yo imagine lo siguiente: En la forma como funciona la ecuación, no tuve en cuenta la manera en como se pasaria el ancho de cada componente sin diferenciarlo por su clase, solo pensé en que..."claro es posible"... y es valido lo que dices Delphuis al pretender acerlo asi, pero ¿no complica un poco la cosa? ya que no siempre la fórmula podria requerir eso para determinar el valor... ¿de que otro modo podemos (Tal vez con un bucle *-)) obtener la suma de los componentes totales?
  • 0

#16 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 29 noviembre 2008 - 02:42

Estuve pensando bien tu idea...

Yo imagine lo siguiente: En la forma como funciona la ecuación, no tuve en cuenta la manera en como se pasaria el ancho de cada componente sin diferenciarlo por su clase, solo pensé en que..."claro es posible"... y es valido lo que dices Delphuis al pretender acerlo asi, pero ¿no complica un poco la cosa? ya que no siempre la fórmula podria requerir eso para determinar el valor... ¿de que otro modo podemos (Tal vez con un bucle *-)) obtener la suma de los componentes totales?

Jeje... caíste en mi trampa mental. :D (6) (a)
Bueno la cuestión es que no hay que romperse el bocho (a menos que uno quiera), no más he dicho que lo tomaba como un ejercicio...
Lo más elemental y directo es "recorrer" los controles e ir sumando.
En caso de que la suma supere la capacidad... ummm digo yo ¿Es posible que suceda? Es decir, ¿puede existir mayor cantidad de controles que lo que dimensionalmente acepta un form? ;)
Ahora bien, si por el contrario los controles serán creados y establecidos en tiempo de ejecución, allí si es útil llevar el debido proceso de control. Fuera de ésto, no veo escenario alguno en donde los controles rebasen la capacidad de un form.

Saludos,
  • 0

#17 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 29 noviembre 2008 - 03:10

Hola


Estuve pensando bien tu idea...

Yo imagine lo siguiente: En la forma como funciona la ecuación, no tuve en cuenta la manera en como se pasaria el ancho de cada componente sin diferenciarlo por su clase, solo pensé en que..."claro es posible"... y es valido lo que dices Delphuis al pretender acerlo asi, pero ¿no complica un poco la cosa? ya que no siempre la fórmula podria requerir eso para determinar el valor... ¿de que otro modo podemos (Tal vez con un bucle *-)) obtener la suma de los componentes totales?

Jeje... caíste en mi trampa mental. :D (6) (a)


Jajajaja... :D :D definitivamente tienes que ser loco para salir con algo asi  :p :p

Lo más elemental y directo es "recorrer" los controles e ir sumando.


Es aqui donde trate de enterder según todo lo que digiste... pero ya se me ocurrió como, aunque no lo necesite por ahora ;)

Saludos.
  • 0

#18 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 29 noviembre 2008 - 03:11

Fuera de ésto, no veo escenario alguno en donde los controles rebasen la capacidad de un form.


A menos que fueras un pésimo diseñador  :p :p... jajaja
  • 0