Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Resolución de la pantalla (https://www.clubdelphi.com/foros/showthread.php?t=75842)

washiloo 22-09-2011 15:24:08

Resolución de la pantalla
 
Hola a todos, tengo una consulta respecto a la visualización de un formulario creado con el C++ Builder.

Supongamos que en una PC creo un formulario y lo lleno de objetos (Edits, Labels, Buttons, etc.). Con el propio C++ Builder les doy a cada uno el tamaño que desee, siendo la proporción entre estos tamaños lo que en realidad me interesa (y no el tamaño absoluto en sí).

Ahora bien, cuando compilo el programa y lo llevo a otra PC, que tenga o bien un monitor de tamaño diferente (no sé si esto influye) o una resolución gráfica diferente, entonces ocurre que la proporción se pierde y en consecuencia no se logra una visualización adecuada.

Mi idea es lograr que, para la resolución gráfica que estoy utilizando, la combinación de tamaños de los diferentes objetos en mi programa sea constante y relativa a la misma. Es decir, si la resolución de mi pantalla es A x B pixels, cada objeto "i" tendrá un tamaño a(i) x b(i), donde a(i) es una fracción constante de A y b(i) una fracción constante de B.

La pregunta concreta es: existe algún método estandarizado para lograr esto? Si no es así, no importa, lo trataré de descubrir por mí mismo, pero entonces tengo otra pregunta: cuál es el comando que devuelve la resolución actual en píxeles?

Muchas gracias de antemano!

F.E.G.

ecfisa 22-09-2011 16:15:56

Hola.

Probá lo siguiente:
Código:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
int  Ancho=1024, Alto=768; /* Resolución en que compilás la aplicación */

  if(Screen->PixelsPerInch == 96){
    Height = Height * Screen->Height / Alto;
    Width =  Width * Screen->Width / Ancho;
    ScaleBy(Screen->Width, Ancho);
  }
  else if(Screen->PixelsPerInch == 120){
    Height = Height * Screen->Height / Alto;
    Height = Height + ((Height*15) / 100);
    Width = Width * Screen->Width / Ancho;
    Width = Width + ((Width*15) / 100);
    ScaleBy(Screen->Width, Ancho);
    Top = Top - 70;
    Left = Left - 70;
  }
  else {
    Height = Height * Screen->Height / Alto;
    Width = Width * Screen->Width / Ancho;
    ScaleBy(Screen->Width, Ancho);
  }
}

Saludos.

washiloo 23-09-2011 12:03:45

Cita:

Empezado por ecfisa (Mensaje 413016)
Hola.

Probá lo siguiente:
Código:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
int  Ancho=1024, Alto=768; /* Resolución en que compilás la aplicación */
 
  if(Screen->PixelsPerInch == 96){
    Height = Height * Screen->Height / Alto;
    Width =  Width * Screen->Width / Ancho;
  }
  else if(Screen->PixelsPerInch == 120){
    Height = Height * Screen->Height / Alto;
    Height = Height + ((Height*15) / 100);
    Width = Width * Screen->Width / Ancho;
    Width = Width + ((Width*15) / 100);
    ScaleBy(Screen->Width, Ancho);
    Top = Top - 70;
    Left = Left - 70;
  }
  else {
    Height = Height * Screen->Height / Alto;
    Width = Width * Screen->Width / Ancho;
    ScaleBy(Screen->Width, Ancho);
  }
}

Saludos.

Muchas gracias por tu respuesta. Tendría que hacer esto con la altura y ancho de cada objeto de mi formulario?

ecfisa 23-09-2011 18:20:40

Cita:

Tendría que hacer esto con la altura y ancho de cada objeto de mi formulario?
Hola washiloo.

No, sólo en el form principal.

Un saludo.


La franja horaria es GMT +2. Ahora son las 18:03:52.

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