Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Resolucion de pantalla (https://www.clubdelphi.com/foros/showthread.php?t=65074)

Willer 18-11-2009 17:10:43

Resolucion de pantalla
 
Hola, como estan todos.

Soy principiante en delphi y me gustaria que me ayuden con un problema que tengo con la resolucion de pantalla.

El problema es el siguiente:
He creado una aplicacion en mi laptop donde tengo una resolucion de 1280x798, pero cuando ejecuto la aplicacion en otra pc la cual tiene una de 1024x768 y la aplicacion se muestra muy exajerada. Me gustaria saber si hay alguna forma con el cual yo puedo obtener la resolucion de la targeta de video. Le agradesco su ayuda. gracias

radenf 18-11-2009 19:20:53

Estimado Willer :

El problema que describes es un problema de todos.
Nos gustaría que nuestras aplicaciones se adaptaran a las innumerables resoluciones y tamaños de pantallas, sin deformarse y que lucieran igual como las vemos en el monitor en que programamos.
Yo desarrollé un programa que utiliza múltiples DBEdits, botones, paneles y dbgrids y para evitar que se deformara o alguna parte del programa no se mostrara, lo hize en versiones desktop de 1280x1024 y laptop de 1280x800. Por supuesto no sirven en la resolución de monitor que señalas y se ven ridículos en monitores widescreen.
Obtener la resolución de la tarjeta de video no sé si solucionará el problema, ya que deberías en base a esa información modificar la resolución de vídeo del Pc donde ejecutes tu programa, cosa que no siempre es posible e igual se deformaría tu aplicación.
Una opción es hacer programas con tamaños que no puedan modificarse, definiendo valores en las propiedades constraints del form principal, tan pequeños que quepan en cualquier monitor y a la vez lo suficientemente grandes para que contengan los elementos que quieras mostrar.
Otra opción es desarrollar tu programa en base a un panel contenedor con propiedad align alnone, que contenga elementos con esta propiedad definida alclient, que hará que se expandan para ocupar toda la pantalla, al encontrarse maximizados, debiendo anclar con la propiedad anchor,ya sea a la derecha, izquierda, arriba o abajo y dimensionar con la propiedad size, los botones , edits, etc.

Salu2

fidel 18-11-2009 19:51:58

Con esto puedes saber la resolución y cambiarla, adaptalo a tus necesidades

En este código se mira si es 800, 660 en cuyo caso se sube a 1024, 768 y después al terminar se deja como estaba

No se lo que ocurre si la tarjeta no soporta la resolución nueva, prueba tu mismo.

Código Delphi [-]
    { Public declarations }
  end;

var
  FMenu: TFMenu;
  W, H : integer;  //para coger resolución
  spCambioResolucion: string;  //para cambiar resolución

implementation

Uses UDM;

{$R *.dfm}

function NuevaRes(XRes, YRes: DWord): Integer;
var
  lpDevMode : TDeviceMode;
begin
  EnumDisplaySettings (nil, 0, lpDevMode);
  lpDevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
  lpDevMode.dmPelsWidth := XRes;
  lpDevMode.dmPelsHeight := YRes;
  NuevaRes := ChangeDisplaySettings (lpDevMode, 0)
end;


En OnCreate para cambiarla
Código Delphi [-]
procedure TFMenu.FormCreate(Sender: TObject);
begin
  //coger resolución de pantalla
  W := Screen.Width;
  H := Screen.Height;
  spCambioResolucion := 'No';
  //si es 800 por 600 se cambia a 1024 por 768 y se anota el cambio
  if (W = 800) and (H = 600) then
    begin
      NuevaRes(1024, 768);
      spCambioResolucion := 'Si';
    end;
end;

En OnClose para dejarlo como estaba
Código Delphi [-]
procedure TFMenu.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //si se cambio la resolución que había de 800 por 600 volver a poner 800 por 600
  if spCambioResolucion = 'Si' then
    NuevaRes(800, 600);
end;

Lepe 18-11-2009 21:14:29

¿Quien somos nosotros para decirle al usuario cómo ha de ver las cosas?

Esa es mi modesta opinión. Eso sin entrar en detalles de minúsvalías físicas.

En resumen, lo ya dicho, hacer las pantallas a un mínimo de tamaño que juzguemos oportuno según nuestros clientes, (hoy día uso 800x600 o 1024x768) con aligns, anchors y constraints. Una vez se maximiza, el usuario verá otra cosa.

También podemos dar la posibilidad al usuario de ocultar o mostrar más paneles (usando dock/frames). Si usa una pantalla ancha puede añadir más paneles verticales. El programa recuerda los paneles adosados y los muestra siempre al crear la ventana.

Casimiro Notevi 18-11-2009 22:29:32

Cita:

Empezado por Lepe (Mensaje 346950)
¿Quien somos nosotros para decirle al usuario cómo ha de ver las cosas?[..]

Estoy de acuerdo con eso, si instalo un programa que me modifique la resolución de mi pantalla... lo desinstalo al momento.

fidel 20-11-2009 17:47:01

>>>>¿Quien somos nosotros para decirle al usuario cómo ha de ver las cosas?

Cuando no haces un programa a medida, siempre es el programador el que decide todo: color, aspecto, botones, etc, etc, etc.

Los usuarios estamos siempre supeditados a lo que nos hagan, y si no intenta por ejemplo comprar hoy en día un monitor o portatil que no tenga la pantalla panorámica, verás que dificil es, y dentro de poco será imposible.

Además puede haber casos particulares en que viene bien cambiarla, por ejemplo yo uso dos o tres aplicaciones personales en el lápiz que a veces pincho en ordenadores con resolución 800 x 600, lo detectan cambian la resolución a mi gusto, y lo vuelvo a dejar como estaba.

mamcx 20-11-2009 20:54:00

Si te quieres ahorrar el trabajo, mira a http://www.devexpress.com/Products/VCL/ExLayoutControl/. Es lo mejor que conozco para estos menesteres.

De lo contrario, ahi codigo por ahi que re-dimensiona los controles de acuerdo a la resolucion. En las versiones nuevas de delphi (Delphi 2007+) esta el layout manager que es la version del pobre de lo de DevExpress, pero nada parecido en la facilidad de uso.

hackcgm 30-04-2010 01:42:22

Cita:

Empezado por radenf (Mensaje 346942)
Estimado Willer :

El problema que describes es un problema de todos.
Nos gustaría que nuestras aplicaciones se adaptaran a las innumerables resoluciones y tamaños de pantallas, sin deformarse y que lucieran igual como las vemos en el monitor en que programamos.
Yo desarrollé un programa que utiliza múltiples DBEdits, botones, paneles y dbgrids y para evitar que se deformara o alguna parte del programa no se mostrara, lo hize en versiones desktop de 1280x1024 y laptop de 1280x800. Por supuesto no sirven en la resolución de monitor que señalas y se ven ridículos en monitores widescreen.
Obtener la resolución de la tarjeta de video no sé si solucionará el problema, ya que deberías en base a esa información modificar la resolución de vídeo del Pc donde ejecutes tu programa, cosa que no siempre es posible e igual se deformaría tu aplicación.
Una opción es hacer programas con tamaños que no puedan modificarse, definiendo valores en las propiedades constraints del form principal, tan pequeños que quepan en cualquier monitor y a la vez lo suficientemente grandes para que contengan los elementos que quieras mostrar.
Otra opción es desarrollar tu programa en base a un panel contenedor con propiedad align alnone, que contenga elementos con esta propiedad definida alclient, que hará que se expandan para ocupar toda la pantalla, al encontrarse maximizados, debiendo anclar con la propiedad anchor,ya sea a la derecha, izquierda, arriba o abajo y dimensionar con la propiedad size, los botones , edits, etc.

Salu2


hola tengo un problema parecido, esq necesito obtener las coordenadas del raton para crear objetos en donde se da el click y hago esto:

x:= mouse.CursorPos.X-450;
y:=mouse.CursorPos.Y-250;

pero cuando muevo el formulario las coordenadas cambian y el objeto se crea en otro lado y no donde se dio el click, igual por eso queria q cuando se ejecuta el programa saliera maximizado, pero hay pantallas en las q el formulario no cabe y algunos objetos no se ven.
pensaba en evitar q el formulario de pueda mover, pero no se que propiedad es, espero me puedan ayudar

gracias


La franja horaria es GMT +2. Ahora son las 11:01:10.

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