Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-02-2010
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Como obtener el ancho del borde de las ventanas de Windows

Después de mucho tiempo vuelvo a saludaros a tod@s !

Y tengo una preguntita : Como puedo obtener en mi programa Delphi el valor del ancho del borde de las ventanas en Windows ?

Resulta que entre Windows XP y Windows 7 (p.ej.), el ancho del borde de las ventanas cambia, y en algunas ocasiones me fastidia en cierta manera ese cambio, por lo que necesitaria saber qué varible de Windows guarda dicho valor, y como obtenerlo desde Delphi.

Gracias como siempre por vuestra ayuda.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 02-02-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, gluglu, no conozco la respuesta a tu pregunta , pero quiero saludarte, tanto tiempo ya, espero que sigas bien y con tu afición tan bonita bajo los mares
Responder Con Cita
  #3  
Antiguo 02-02-2010
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Gracias Casimiro !

Nunca he dejado de consultar por estos lares pero he intentado dedicar el mayor tiempo posible a avanzar en mi aplicación que me está llevando mucho tiempo.

.... y sí, sigo con mi afición que corresponde a mi 'nick' ! ... aunque de momento se note la crisis y no pueda disfrutar de ella tanto como quisiera !!
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 02-02-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por gluglu Ver Mensaje
Después de mucho tiempo vuelvo a saludaros a tod@s !

Y tengo una preguntita : Como puedo obtener en mi programa Delphi el valor del ancho del borde de las ventanas en Windows ?

Resulta que entre Windows XP y Windows 7 (p.ej.), el ancho del borde de las ventanas cambia, y en algunas ocasiones me fastidia en cierta manera ese cambio, por lo que necesitaria saber qué varible de Windows guarda dicho valor, y como obtenerlo desde Delphi.

Gracias como siempre por vuestra ayuda.
No se si sera lo que estas necesitando , pero puedes mirar las propiedades BorderWidth y BorderStyle del formulario ,en especial la segunda ya que te permite cambiar el estilo del borde..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 02-02-2010 a las 14:44:58.
Responder Con Cita
  #5  
Antiguo 02-02-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
API GetWindowRect

Ejemplo Fácil en un formulario simple con un botón: Encontrar el Alto y el Ancho de nuestro formulario:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  WR: TRect;
  Ancho: integer;
  Alto: integer;
begin
  Windows.GetWindowRect(Handle, WR);
  Ancho:= WR.Right - WR.Left;
  Alto:= WR.Bottom - WR.Top;
end;

Saludos.
Responder Con Cita
  #6  
Antiguo 02-02-2010
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
yo uso Height - ClientHeight, Width-ClientWidth. Saludos.
Responder Con Cita
  #7  
Antiguo 02-02-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Te recomiendo investigar la WinApi: GetSystemMetrics, creo que es exactamente lo que buscas.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 02-02-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo utilizo también el método de coso. Usar el Height/Width y las respectivas ClientHeight/ClientWidth.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 03-02-2010
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Muchísimas gracias a todos por vuestra ayuda. Me ha servido mucho.

El problema viene principalmente por el hecho de que mis forms con un borde de ventana tienen un tamaño predefinido por diseño, y utilizo además los 'Constraints' precisos para delimitar el tamaño máximo.

Este hecho, me define como muy bien habeis indicado, el tamaño del 'Client' y con las propiedades que indicais puedo hallar el tamaño del borde de la ventana.

El problema viene, tal y como indiqué, cuando porto la aplicación de Windows Xp a Windows 7.

Resulta entonces que mi tamaño máximo de Form, definido en mis Constraints, es fijo, y dado que Windows 7 me modifica el tamaño del borde de la ventana respecto de Windows XP, entonces el resultado es que el 'Client' se reduce en algunos píxeles, y este es precisamente el hecho que quiero evitar.

No es tanto por el tamaño del 'Client' que se vé reducido, sino este cambio se aprecia sobre todo y considerablemente cuando en determinadas partes del programa tengo que superponer ventanas a un form, tomando como referencia el borde izquierdo del 'Client'. Al ser dos forms diferentes, la referencia que tomaba es la que me daba Windows XP, sin saber que Windows 7 me cambiaría ese ancho de borde. Al cambiarlo, el left del nuevo form con respecto al form inferior, que ahora tiene un borde más ancho, es diferente.

Por eso, y concluyendo, entiendo que aunque con las propiedades Width y ClientWidth puede conocer el ancho del borde, en mi caso, y por las particularidades que indico, debo de uitlizar la función GetSystemMetrics del Api de Windows.

Gracias de nuevo a todos por vuestra ayuda.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #10  
Antiguo 15-12-2010
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
Cita:
Empezado por gluglu Ver Mensaje
Por eso, y concluyendo, entiendo que aunque con las propiedades Width y ClientWidth puede conocer el ancho del borde, en mi caso, y por las particularidades que indico, debo de uitlizar la función GetSystemMetrics del Api de Windows.
Puedo preguntar qué parámetros pasas a GetSystemMetrics para lograr tu objetivo, y cuál sería la diferencia entre, por ejemplo, Width - ClientWidth y GetSystemMetrics(SM_CXBORDER)?
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
  #11  
Antiguo 16-12-2010
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
En su momento, hice varias pruebas, y finalmente deduje que la función GetSystemsMetrics siempre me devolvía (si no mal recuerdo) el valor 1, o un valor raro.

Probando con XP y W7 aparecían incongruencias que no podía controlar.

Lo que entonces decidí fue que la opción que me funcionaba correctamente era Width - ClientWidth, tal y como explicaban algunos compañeros, pero ajustando los Constraints correspondientes posteriormente.

El planteamiento inicial era erroneo. No debía partir de unos valores de altura y anchura de ventana, incluyendo el borde, y después ajustar esos valores dependiendo del S.O.. Lo que tenía que hace era fijar los valores de ancho y alto de mi ventana según el cliente, y después dejar que el S.O. correspondiente fijara el borde que él quisiera, incluso teniendo en cuenta los valores que el usuario hubiera podido haber cambiado en el propio S.O. para todas las demás ventanas.

Lo que pasa es que en diseño, uno se fija más en los valores totales de un Form, que en los valores del Client, por lo menos en mi caso. Y eso me indujo al error cometido.

Ahora lo que hago, es determinar los valores del Client, en ancho y alto, y después de que el S.O. haya creado la ventaja, fijo los valores máximos de constraints :

Código Delphi [-]
ClientHeight          := 547;
ClientWidth           := 925;
Constraints.MaxHeight := Height;
Constraints.MaxWidth  := Width;

Espero que esta aclaración haya servido respecto del problema inicial.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #12  
Antiguo 21-12-2010
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
Excelente, de eso se trata. Voy a probarlo.

Gracias.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tratamiento de relleno de borde en Windows Vista/7 sobre Delphi 7 Nasca API de Windows 3 26-06-2010 19:25:13
como mover un formulario sin borde kurono Varios 4 30-04-2008 07:30:41
Como obtener el ancho de un WebControls.Image selman .NET 0 23-02-2007 02:21:30
Obtener títulos de las ventanas •–[XII]–• Varios 1 02-08-2004 10:23:20
¿Como obtener el titulo de las ventanas que se ban abriendo en windows? jorch_yr Varios 2 15-01-2004 20:17:19


La franja horaria es GMT +2. Ahora son las 14:44:58.


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
Copyright 1996-2007 Club Delphi