Ver Mensaje Individual
  #1  
Antiguo 26-07-2020
MaxiDucoli MaxiDucoli is offline
Miembro
 
Registrado: feb 2006
Posts: 134
Reputación: 19
MaxiDucoli Va por buen camino
Calcular porcentaje de posición de un objeto.

Buenas tardes.
Ando un poco confundido con algo y quizás estoy errando las cosas básicas y no me estoy arreglando bien con lo que quiero hacer.
Resulta que quiero calcular el porcentaje de el tamaño de ocupación de un control en mi form y el porcentaje de posición en X y en Y del mismo objeto.


Según como se me ocurre a mi y voy a tomar como ejemplo un ListBox, debería hacer para el largo

(Listbox.Heigh * Form.Width) / 100

Para el alto
(Listbox.Heigh * Form.Heigh) / 100

Para la posición X
(Listbox.Position.X * Form.Heigh) / 100

Para la posición Y
(Listbox.Position.Y * Form.Width) / 100

Y esto me debería dar los porcentajes que ocupan en mi Form los objetos que pase por esas funciones.

Pero a la hora de querer dar vuelta esos porcentajes y pasarlos a los valores de tamaño y posicion no me dan los mismo numeros.

Alguien puede darme una mano para hacerlo tanto al derecho como al revés?

La idea de sacar los porcentajes para poder hacer que mi form sea usable en cualquier resolución y mantenga el tamaño de los objetos siempre iguales a la vista de diseño.



Les dejo el código que hice a ver si me pueden dar una mano.

Muchas gracias!!!!!


Código Delphi [-]
unit PosicionYPorcentaje;

interface

uses System.Types;

function calcularPorcentajeAlto(ctrlAlto,frmAlto: single) : single;
function calcularPorcentajeLargo(ctrlLargo,frmLargo: single) : single;
function calcularPorcentajeX(ctrlX,frmX: single) : single;
function calcularPorcentajeY(ctrlY,frmY: single) : single;
function posicionarControl(porcentajeX, porcentajeY, frmX, frmY : single) : Tpoint;

implementation

function calcularPorcentajeAlto(ctrlAlto,frmAlto: single) : single;
begin
result := Round((ctrlAlto / frmAlto) * 100);
end;

function calcularPorcentajeLargo(ctrlLargo,frmLargo: single) : single;
begin
result := Round((ctrlLargo / frmLargo) * 100);
end;

function calcularPorcentajeX(ctrlX,frmX: single) : single;
begin
result := Round((ctrlX  / frmX) * 100);
end;

function calcularPorcentajeY(ctrlY,frmY: single) : single;
begin
result := Round((ctrlY / frmY) * 100);
end;

function posicionarControl(porcentajeX, porcentajeY, frmX, frmY : single) : Tpoint;
//var
//porcentajeEnX, porcentajeEnY : single;
begin

//porcentajeEnX := calcularPorcentajeX(ListBox1.Position.X ,Form1.Height);

  result.X := Round((porcentajeX * 100) / frmX);
  result.Y := Round((porcentajeY * 100) / frmY);
end;


end.
Responder Con Cita