Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-12-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Fórmula para dividir un ancho

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 al repartir espacios equitativos.

¿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

Código Delphi [-]
d := ( dc - ( nb * a ) ) / ( nb + 1 ); // En este caso d debe ser un valor Double
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.
Responder Con Cita
  #2  
Antiguo 01-12-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Ummm.... ¿una preguntita? ¿Y cómo le haces si dos o más controles de una misma clase tienen medidas diferentes?
Digo, porque esa fórmula asume que todos tienen igual ancho o largo. La fórmula puede usarse en ambas direcciones.

Por como lo veo yo diría que:

d = (DMax - sum(i=1,n)(d_i))/n

Siendo DMax el ancho o largo máximo. En pocas la torta a repartir
sum(i=0,n) es la sumatoria desde i=1 hasta n de (d_i).
d_i es el ancho o largo del control i_ésimo.
Y n es la cantidad de controles.

No se, ya sabes esa es mi idea. Pero tengo otras. Mi cerebro está carburando algunas "mejoras" a la fórmula.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 01-12-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Es válido el aporte... en caso de que los controles no tengan el mismo ancho solo es sumarlos
Responder Con Cita
  #4  
Antiguo 01-12-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola de nuevo,
Estuve haciendo "negocios",
A ver... ¿y si lo complicamos un poquito? ¿Que te parece?

¿Quién no te impide tener en un orden i_ésimo la categoría de controles, y en un orden j_ésimo los diversos controles con sus medidas?
A ver si me explico mejor:

Por ejemplo, podemos asumir que:
i = 1 -> TEdit
i = 2 -> TLabel
i = 3 -> TButton
...
i = n -> TXxxxx

Y ahora, tener algo así:
valor J - Cantidad - Largo/Ancho
-------------------------------
I = 1. TEdit
-------------------------------
j = 1 -> 2 - 43/5
j = 2 -> 5 - 10/6
========================
i = 2. TLabel
-------------------------------
j = 1 -> 20 - 12/10
....

Con un esquema como éste se pueden conseguir cosas muy interesantes. Por ejemplo, podríamos hacer que algunos controles se muestren y oculten a demanda y hacer que los demás se reordenen.

La fórmula vendría a ser algo como esto:

d = (DMax - Sum(i=1,n)(sum(j=1,m_i)(d_ij * c_ij)))/ sum(i=1,n)(sum(j=1,m_i)(c_ij))

Siendo:
m_i: la cantidad máxima de elementos para la categoría i_ésima
d_ij: el ancho o largo del componente j_ésimo de la categoría i_ésima
c_ij: la cantidad de componentes i_ésimo para el tamaño j_ésimo

Espero que se entienda la idea.

A ver si daño algunos cerebros.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 02-12-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Entiendo la idea... la fórmula no ...

La idea con esto no es solo poder posicionarlo a lo ancho sino también a lo alto dependiendo de la cantidad de controles "visibles"
Responder Con Cita
  #6  
Antiguo 02-12-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
d = (DMax - Sum(i=1,n)(sum(j=1,m_i)(d_ij * c_ij)))/ sum(i=1,n)(sum(j=1,m_i)(c_ij))

d: Distancia
DMax: Distancia máxima
i: Para los controles
j: Para los tamaños
m_i: La cantidad máxima de elementos para la categoría i
d_ij: El ancho o largo del componente j de la categoría i
c_ij: La cantidad de componentes i para el tamaño j

Traduciendo un poco ...
Responder Con Cita
  #7  
Antiguo 02-12-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por felipe88 Ver Mensaje
Entiendo la idea... la fórmula no ...

La idea con esto no es solo poder posicionarlo a lo ancho sino también a lo alto dependiendo de la cantidad de controles "visibles"
Disculpa felipe, no se si es por la hora o que, pero necesito preguntarlo. ¿Tu frase es una pregunta o una afirmación?

Pues como dije, es una idea... pero con un enfoque como ese, se puede diseñar un método que permita determinar mostrar u ocultar controles, y al espacio que "sobra" repartirlo en otros controles.
Por ejemplo, supongamos que tenemos grupos de Edits, Labels, Combos... dentro de un form, o incluso, un panel. Si por alguna casualidad de la vida, es viable una funcionalidad como la que describo, una fórmula basada en la que expuse permite que el espacio pueda ser aprovechado. Veamos un ejemplo "gráfico". Digamos que tenemos a disposición 200 de ancho, en total, de ese 200 el total ocupado por un grupo de combos es 70. El resto está ocupado por otros controles. "Ocultando" ese grupo de combos ahora tengo esos 70 más para distribuir el resto de los controles.

¿Me explico ahora? Espero que si, porque sino voy a tener que exprimirme más el cerebro.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 02-12-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Era una pregunta... me trague estos simbolitos ¿?
Ahora, pensando un poco... para hacer eso, creo (No sé si me equivoco) que ya dejaría de ser una simple fórmula para convertirse en algo parecido a un procedimiento... no se que piensas de eso; creo que sería buena una tercera opinión
Responder Con Cita
  #9  
Antiguo 02-12-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por felipe88 Ver Mensaje
Era una pregunta... me trague estos simbolitos ¿?
Ahora, pensando un poco... para hacer eso, creo (No sé si me equivoco) que ya dejaría de ser una simple fórmula para convertirse en algo parecido a un procedimiento... no se que piensas de eso; creo que sería buena una tercera opinión
Y bueno, fórmulas son fórmulas... métodos, son métodos.
No más yo decía Ya sabes... mi brain is...
Si, a ver si un tercero se suma y dice algo. Para ver si desempatamos.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 02-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pero, ¿es usable?

Muchas veces nos centramos en problemas técnicos y no miramos globalmente.

¿Qué diría el usuario cuando los controles cambian de sitio "aleatoriamente"?. Para que un programa sea fácil de usar, debe mantener las cosas en el mismo sitio, de esa forma el usuario, mecánicamante, apunta el ratón a los controles.

Si empezamos a distribuirlos en tiempo de ejecución... malo (al menos a mi parecer).

Esto sí sería muy útil para repartir las mesas en un programa de restaurante. Algo así como tiene Neftali en su web, donde el usuario crea el mapa del restaurante y distribuye las mesas y sillas en el espacio.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 02-12-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Pero, ¿es usable?

Muchas veces nos centramos en problemas técnicos y no miramos globalmente.

¿Qué diría el usuario cuando los controles cambian de sitio "aleatoriamente"?. Para que un programa sea fácil de usar, debe mantener las cosas en el mismo sitio, de esa forma el usuario, mecánicamante, apunta el ratón a los controles.

Si empezamos a distribuirlos en tiempo de ejecución... malo (al menos a mi parecer).

Esto sí sería muy útil para repartir las mesas en un programa de restaurante. Algo así como tiene Neftali en su web, donde el usuario crea el mapa del restaurante y distribuye las mesas y sillas en el espacio.

Saludos
Tienes razón Lepe... solo lo decimos como ejercicio práctico y es un buen ejercicio lógico ... además como mencionas en el ejemplo de Neftali, esta fórmula te serviría hasta para centrar los muebles en tu sala
Responder Con Cita
  #12  
Antiguo 02-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
oye, pero por mí no so cortéis ehhh!!! era sólo una apreciación, pero desde luego es interesante, igual sale una clase de todo esto:
- posibilidad de distribución horizontal, después vertical y al revés.
- lista de objetos que se quieren controlar, con distintos tamaños (como ya habéis comentado).
- etc.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #13  
Antiguo 02-12-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
¡Hey que bueno!¡Ya pescamos a uno felipe!
Uno más para el cacao cerebral, a ver que fórmula sale de todo esto

Buena idea Lepe, quien no quita que surja una clase que nos diga como organizar todo. Propongo que la llamemos Feng Shui

Yo me imagino métodos como:

Código Delphi [-]
 RegisterCategory(AControlClass: TControlClass)
AddControl(Size: integer); overload;
AddControl(Category, Size: integer); overload;
Reorganize;

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 02-12-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Aquí metiendo mi cuchara:

Código Delphi [-]
TFormControlsOrganizer = class
private
  FMargins: TMargins; // Una clase conteniendo propiedades tales como Botton, Top, Left, Right
  FForm: TForm;
public
  constructor Create(AForm: TForm);
  procedure ArrangeControls(AControls: Array of TComponent);
property
  Margin: TMargins read FMargins write SetMargins;
end;

implementation

constructor TFormControlsOrganizer.Create(AForm: TForm);
begin
  inherited Create;
  // Para tener más adelante el alto y ancho de la forma al momento de hacer los cálculos
  FForm := AForm
end;

procedure TFormControlsOrganizer.ArrangeControls(AControls: Array of TComponent);
var
  I: Integer;
  AControl: TComponent;

begin
  for I := 0 to High(AControls) do
  begin
    AControl := AControls[i];
    // Se hacen los calculos para acomodar el control.
  end
end;

// Para organizar tres edits a lo ancho de la forma se haría algo como:
Organizer.ArrangeControls([Edit1, Edit2, Edit3]);

Y bueno, es solo una idea de como quedaría una clase que hiciera algo así...



Saludos...
Responder Con Cita
  #15  
Antiguo 02-12-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Cita:
Empezado por Delphius Ver Mensaje
¡Hey que bueno!¡Ya pescamos a uno felipe!
Uno más para el cacao cerebral, a ver que fórmula sale de todo esto

Buena idea Lepe, quien no quita que surja una clase que nos diga como organizar todo. Propongo que la llamemos Feng Shui

Yo me imagino métodos como:

Código Delphi [-]
RegisterCategory(AControlClass: TControlClass) AddControl(Size: integer); overload; 
AddControl(Category, Size: integer); overload;
Reorganize;

Saludos,
Feng Shiu...

Código Delphi [-]
FengShui.Organizar(Button1);

... aún no se descarta la idea de la clase... pero no quiero pensar en como seria ... prefiero conservar mis neuronas
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Colocar Ancho De columna de un DBGrid dependiendo del ancho del maximo campo guardado gulder Varios 3 08-11-2008 12:27:34
Contolar ancho de banda para la PC neilpl26 Internet 0 01-11-2008 04:32:36
Modificación del .htaccess para evitar el robo de ancho de banda marcoszorrilla La Taberna 4 18-09-2008 16:52:58
TSMDBGRID ¿Cual es la Propiedad para el ancho de Columnas automatico.? JXJ Varios 0 20-09-2006 06:59:21
aplicación para la gestion de ancho de banda de una LAN/WAN hhuillcen Internet 0 22-08-2003 18:27:12


La franja horaria es GMT +2. Ahora son las 14:56:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi