Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Calcular porcentaje de posición de un objeto. (https://www.clubdelphi.com/foros/showthread.php?t=94798)

MaxiDucoli 26-07-2020 00:44:12

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.

Casimiro Notevi 26-07-2020 11:06:25

Creo que es más cómodo usar easysize, mira este hilo.

MaxiDucoli 26-07-2020 15:50:01

Cita:

Empezado por Casimiro Notevi (Mensaje 538079)
Creo que es más cómodo usar easysize, mira este hilo.

Que bárbaro......

Lo que me gustaría saber tanto de programación y más con Delphi, pero tengo como un bloqueo que solo me deja llegar hasta donde sé y a partir de ahí es todo cuesta arriba y no encuentro ningún lugar en donde enseñén.
Pero bueh!!!!!

Esto hace lo que en mi cabeza daba vueltas y necesito.

Te agradezco mucho!!!!

Casimiro Notevi 26-07-2020 18:07:30

¿No encuentras dónde enseñen? Aquí mismo :)


La franja horaria es GMT +2. Ahora son las 09:00:14.

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