Estoy usando la función DrawThemeBackground
para dibujar algunos elementos del sistema en un lienzo, y necesito dibujar los botones de título de un formulario, la única parte que perdí es cómo puedo obtener los tamaños default
de los botones de título. Exist any Uxtheme function to get that info?
¿Qué función Uxtheme debo usar para obtener el tamaño predeterminado de los botones minimizar, maximizar y cerrar?
Respuesta
Parece que esto es más difícil de lo que parece.
Primero está GetThemeMetric
o GetThemeInt
. Pero verá muchas referencias que estas funciones devuelven un 0x8007490
, un "elemento no encontrado", cuando intenta recuperar las propiedades de los botones de leyenda.
Luego está GetThemePartSize
. Este parece funcionar un poco. Eso es, funciona bien, por ejemplo, para WP_CLOSEBUTTON
, pero devuelve sin sentido por ejemplo para WP_MINBUTTON
. No recomendaría el uso de esta función de todos modos, ya que recupera las dimensiones predeterminadas del botón. Si el usuario ha cambiado el tamaño del título, por ejemplo, no obtendrá los valores correctos. De todos modos, podría ser llamado como esto:
uses
uxtheme, themes;
...
var
Err: HRESULT;
Size: TSize;
begin
Err := GetThemePartSize(ThemeServices.Theme[teWindow], 0,
WP_CLOSEBUTTON, CBS_NORMAL, nil, TS_TRUE, Size);
no tengo ni idea de lo volverían las dos funciones anteriores si trabajaban (las dimensiones de botones para el tamaño de la barra de título actual o el tamaño de la barra de título por defecto).
La única forma posible de obtener un resultado preciso parece ser usar el mensaje WM_GETTITLEBARINFOEX
. Pero hay un inconveniente; funciona solo para Vista y arriba. Es posible que necesite definir el mensaje y la estructura que usa dependiendo de la versión de Delphi que use (D2007 aquí).
const
CCHILDREN_TITLEBAR = 5;
WM_GETTITLEBARINFOEX = $033F;
type
tagTITLEBARINFOEX = record
cbSize: DWORD;
rcTitleBar: TRect;
rgstate: array[0..CCHILDREN_TITLEBAR] of DWORD;
rgrect: array [0..CCHILDREN_TITLEBAR] of TRect;
end;
TITLEBARINFOEX = tagTITLEBARINFOEX;
TTitleBarInfoEx = tagTITLEBARINFOEX;
PTitleBarInfoEx = ^TTitleBarInfoEx;
...
var
TitleInfo: TTitleBarInfoEx;
begin
SendMessage(Handle, WM_GETTITLEBARINFOEX, 0, NativeInt(@TitleInfo));
Entonces, se puede obtener el tamaño para el botón de cierre de la rect TitleInfo.rgrect[5]
. Consulte "TITLEBARINFOEX structure" para más detalles. Observe que los valores están en coordenadas de pantalla.
Si necesita apoyar XP y/o por debajo, le sugiero que utilice el buen viejo GetSystemMetrics(SM_CXSIZE)
y GetSystemMetrics(SM_CYSIZE)
("El ancho de un botón en un título de la ventana o barra de título, en píxeles"). Tendría que entrenar algunas aproximaciones dependiendo de si los temas están habilitados, si aero está habilitado, etc.
creo SystemParametersInfo con SPI_GETNONCLIENTMETRICS
es lo que estás buscando. Supongo que los botones minimizar y maximizar utilizan NONCLIENTMETRICS. iSmCaptionWidth
mientras que cerca usa iCaptionWidth
para determinar el ancho.
- 1. Qt ocultar minimizar, maximizar y cerrar botones
- 2. Eliminación de minimizar/maximizar botones en Tkinter
- 3. ¿Cómo elimino los botones maximizar y minimizar de un JFrame?
- 4. Eclipse Juno rojo minimizar y maximizar botones en Linux
- 5. Cómo obtener el tamaño y la posición de los botones de título de ventana (minimizar, restaurar, cerrar)
- 6. ¿Cómo eliminar el borde de la ventana (que contiene los botones minimizar, maximizar y cerrar) desde un widget Qt?
- 7. Anula texto de información sobre herramientas para los botones de la barra de título (Cerrar, Maximizar, Minimizar, Ayuda)
- 8. ¿Cómo ocultar los botones minimizar/maximizar y cerrar por defecto en la ventana de JFrame en Java?
- 9. ¿Cuándo debo usar los botones de radio?
- 10. Añadir botón de ayuda, pero mantener maximizar y minimizar
- 11. Deshabilitar Minimizar y maximizar en WinForm?
- 12. Cómo minimizar/maximizar el diálogo de jQuery?
- 13. ¿Cómo elimino minimizar y maximizar desde una ventana de tamaño variable en WPF?
- 14. Cómo detectar la ventana de JFrame minimizar y maximizar los eventos?
- 15. Habilitar maximizar, minimizar y restaurar la ventana en WPF (cambio de tamaño manual es deshabilitar)
- 16. Cómo dibujar controles de ventana personalizados (cerrar, minimizar y ampliar botones)
- 17. VIsual Studio 2010, ¿maximizar/minimizar fácilmente el editor?
- 18. Maximizar el tamaño del texto del botón de Android
- 19. Accesos directos de PuTTY para minimizar, maximizar, restaurar y mover la ventana
- 20. ¿Debo usar Fragmentos para obtener un LoaderManager?
- 21. Interfaz gráfica de usuario basado en SWT obtener negro al maximizar desde minimizar staus en tamaño completo
- 22. Cómo detectar el navegador minimizar y maximizar el estado en javascript
- 23. ¿Qué debo cerrar primero, PreparedStatement o Connection?
- 24. .NET Minimizar en la bandeja Y Minimizar los recursos necesarios
- 25. ¿Debo cerrar los enchufes de ambos extremos?
- 26. Minimizar el tamaño de distribución de python
- 27. ¿Debo cerrar FileInputStream?
- 28. ¿Para qué debo usar los dedos de Clojure?
- 29. Android: ¿Qué formato de imagen debo usar y por qué?
- 30. "x" Para minimizar WinForm, ContextMenu para cerrar WinForm?
Dudo que sea esto. Eso dará valores para windows classic seguramente. –