Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Saber pulgadas de un monitor (https://www.clubdelphi.com/foros/showthread.php?t=22675)

serhasae 23-06-2005 01:51:08

Saber pulgadas de un monitor
 
Alguien sabe como saber las pulgadas que tiene el monitor que se este usando en el ordenador, para asi cambiar mas adecuadamente la resolucion a la cual quiero que trabaje mi programa. Saludos.

Casimiro Notevi 23-06-2005 19:02:13

pues no creo que puedas saber desde un programa la medida del monitor, aunque alomejor puedes usar un "truco":
Tienes una "form" que presentas maximizada en pantalla, por ejemplo de medidas 800x600.
Luego mides la altura del canvas de una letra determinada (por ejemplo), y mediante una regla de tres, puedes hace el cálculo para poner la pantalla más grande o pequeña.

mi monitor de 17" con una resolución de 800x600 presenta una altura de canvas de 21 pixels.
Este monitor de xx" con una resolución de 800x600 presenta una altura de canvas de 24 pixels.
Mediante una regla de tres, puede salirte un resultado aproximado a xx", que serían las pulgadas de tamaño del monitor donde se ejecute el programa.

Quizás he dicho una tontería muy grande y resulta que eso no se puede, pero alomejor es posible :p

ContraVeneno 23-06-2005 22:18:29

Yo creo que lo que quieres saber es a cuanta resolución esta configurado el monitor para así saber cuanto espacio diponible tienes en pantalla.

SI ese es el caso, verifica la información en este hilo: Obtener resolución de pantalla

cuando obtienes estos datos puedes hacer algo asi como:
Componente.Witdh:=ResoluciónHorizontal-100;
de esta manera el componete no será mayor al espacio en la pantalla.

Casimiro Notevi 23-06-2005 23:19:54

La resolución sí es facil obtenerla, quizás ha hecho mal la pregunta: "como saber las pulgadas que tiene el monitor" :confused:

serhasae 29-06-2005 23:56:02

No hize mal la pregunta, queria saber el tamaño del monitor, porque no es lo mismo un monitor de 17 a 1024 x 768, que un monitor de 15 a 1024x768, para el de 17, mejor 1024 , para el de 15 mejor 800. No creen?. Saludos.

roman 30-06-2005 00:18:29

Tiene lógica tu pregunta pero creo que todos pensamos en la resolución porque lo usual es adaptar tus formularios a la resolución con la que el usuario quiere ver su monitor y no cambiarle sus preferencias. Dicho de otra forma, lo "correcto" es adaptar tu aplicación al ambiente y no el ambiente a tu aplicación.

No creo que sea posible saber exáctamente las medidas físicas del monitor pero puedes intentar con esto:


Código Delphi [-]
var
  Wnd: HWnd;
  DC: HDC;
  HSize, VSize: Integer;

begin
  Wnd := GetDesktopWindow();
  DC := GetDC(Wnd);

  HSize := GetDeviceCaps(DC, HORZSIZE);
  VSize := GetDeviceCaps(DC, VERTSIZE);

  Caption := Format('%d x %d', [HSize, VSize]);
end;

EDITO

Lo olvidaba: las medidas devueltas se supone que están en milímetros.

// Saludos

Lepe 30-06-2005 11:28:28

¿Me han timado con mi monitor?
Código Delphi [-]
Format('%d x %d %F pulgadas', [HSize, VSize,  SQRT(IntPower(VSize ,2)+ IntPower(HSIZE, 2))/25.4])

Teniendo en cuenta que las pulgadas son en la diagonal de la pantalla, y que Una pulgada son 25.4 milímetros, segun pitagorin me sale 15,60 pulgadas, y yo compré uno de 17'' :confused:

Edito: La diagonal ppal si me da 400 milímetros y medidos con regla es eso, ¿estoy haciendo mal el cálculo?

ContraVeneno 30-06-2005 16:40:48

Pues se supone que yo tengo un monitor de 15 pulgadas (configurado a 1024x768) y me da el mismo resultado: "320x240 15.75 pulgadas". Y según pitagorin parace que esta bien el cálculo.

Por otro lado, por alguna extraña razón no puedo usar la función IntPower me marca "missing operator or semicolon" en la línea:
Diag:=IntPower(VSize,2);

si, agregue la unidad Math.

roman 30-06-2005 16:49:43

¿Has tomado una regla y medido tu monitor? :rolleyes:

No sé en qué se base GetDeviceCaps para tales medidas. Debo aclarar que le referencia donde consulté esto es el clásico libro Programming Windows 95 de Charles Petzold quien indica que las medidas se basan en ciertos estándares y no es algo que proporcione directamente el driver del monitor.

Además las medidas suelen diferir de lo que el comerciante anuncia. En mi caso, mi laptop se anunciaba con un monitor de 15.2 pulgadas y sin embargo su superficie visible era exactamente igual a la del monitor de 17 pulgadas de mi computadora de escritorio.

Si lo que el fabricante anuncia no coincide con la realidad, pues dudo que haya una forma fidedigna de obtener estas medidas.

De cualquier manera, reitero mi opinión muy personal. Si instalo una aplicación que me cambia la resolución de mi monitor, es seguro que la desinstale al momento.

// Saludos

roman 30-06-2005 16:51:48

Cita:

Empezado por ContraVeneno
Por otro lado, por alguna extraña razón no puedo usar la función IntPower me marca "missing operator or semicolon" en la línea:
Diag:=IntPower(VSize,2);

¿Estás seguro de que el operador o punto y coma faltante no es el de la línea anterior? Cuando esto sucede el compilador se detiene en la siguiente línea.

// Saludos

vtdeleon 30-06-2005 17:08:17

Saludos
Código Delphi [-]
Format('%d x %d %F pulgadas', [HSize, VSize,  SQRT(IntPower(VSize ,2)+ IntPower(HSIZE, 2))/25.4])
No funciona bien del todo
Tengo una lapto de 15 pulgadas en:
1024x768 = 270x 203 13.30 pulgadas
800x600 = 211 x 158 10.38 pulgadas

ContraVeneno 30-06-2005 17:17:40

Así es Roman, de hecho estaba pensando que hubiera sido mejor poner:
Código Delphi [-]
  HSize := GetDeviceCaps(DC, HORZSIZE);
  Diag:=IntPower(VSize,2); //Error en esta línea
  VSize := GetDeviceCaps(DC, VERTSIZE);

que haber puesto una sola línea, pero bueno... Muchas veces me he topado con ese error y en muchos lenguajes diferentes y precisamente por ser el error más común fue lo que me pareció más extraño.

serhasae 01-07-2005 18:51:44

A ver el Diag ahi para que lo utilizais, como quedaria la funcion final, veo muchas modificaciones, mmm. Alguna funciona de lujo?. Veo que el tema interesa. Saludos.

ContraVeneno 01-07-2005 18:59:21

Mi último mensaje era solo porque no puedo usar la función IntPower pero es algo que para mi no tiene relevancia porque no lo utilizó, soo que cuando quise hacer el ejemplo me aparecieron esos errores que menciono... pero para la escencia del tema no tiene importancia :D

serhasae 03-07-2005 00:08:03

A ver probando en un monitor de 17 pulgadas de sobremesa, da siempre 320 x 240, y 15.75 pulgadas, tanto a 1024x768, como a 800x600, si aumentas la resolucion ya va variando a 1280 320x192, 14.69. Hacer la prueba con los de 15 a ver que da, no tengo ninguno, lo que pasa es que me doy cuenta que le monitor si es portatil (laptop) creo que va de otra manera. Conseguiremos sacar algo que funcione, dificiil lo veo, jaja. Saludos.

serhasae 03-07-2005 00:33:04

Investigando encontre esto:

Otra característica fundamental es el tamaño del monitor, es decir, la longitud de la diagonal medida en pulgadas, siendo valores habituales: 14 pulgadas (35,4 cm), 15 pulgadas (37,9 cm), 17 pulgadas (43 cm), 20 pulgadas (50,6 cm), 21 pulgadas (53,1 cm), 28 pulgadas (70,8 cm) y 34 pulgadas (86 cm).
Sin embargo, el tamaño del monitor y su AVR (área de visualización real) son completamente diferentes. Al hablar del tamaño del monitor, se hace referencia la diagonal del tubo de imagen, técnicamente llamado tubo de rayos catódicos (CRT). El AVR del monitor hace referencia a la longitud de la diagonal de la pantalla, y dicha medida es variable pues se encuentra en función del fabricante y modelo. El AVR suele encontrarse entre 13,3 y 14 pulgadas (33,7 y 35,5 cm.) en los monitores de 15 pulgadas de tamaño, y de 15,6 a 16,8 pulgadas (39,6 y 42,6 cm.) en los de 17. Esto me es mas coherente lo que no entiendo es porque al cambiar la resoulcion el AVR cambia. Saludos.

Lepe 03-07-2005 01:59:41

Muy interesante esa información, y la verdad es que cuadra con todo lo dicho.

Cita:

Empezado por serhasae
lo que no entiendo es porque al cambiar la resoulcion el AVR cambia.

Al leer esto inmediatamente he pensado en los juegos, pones resolución de 1024 y ocupa toda la pantalla, pones 800 y queda un marco negro a su alrededor, obviamente el área de visualización real ha disminuido. Que conste que es por buscarle una lógica, no quiero decir que tenga razón ;).

Un saludo


La franja horaria es GMT +2. Ahora son las 10:49:32.

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