ventanas quitar puedo net minimizar maximizar los funcionan formulario deshabilitar cerrar botones boton aparecen delphi vcl windows-10 delphi-xe6

delphi - puedo - quitar botones cerrar minimizar maximizar vb net



¿Cómo se comportan los movimientos de Minimizar, Maximizar y Cerrar? (1)

La alta DPI es el disparador y conduce a la solución.

Las aplicaciones que exhiben el problema no son conscientes de alta DPI. La solución al problema de estacionario es informarles o activar el modo de compatibilidad asociado utilizando una de las soluciones en 1, 2 o 3.

Nota: si el resto de la aplicación se comportará correctamente cuando se activa el reconocimiento de DPI alto es otro problema y será diferente de la aplicación a la aplicación.

  1. En el modo de compatibilidad, marque "Desactivar escalado de pantalla en configuraciones de PPP altas"

  2. Llame a SetProcessDPIAware como la primera llamada en el archivo .dpr , según lo notado por Ian Boyd, llamando a esta función puede pasar al estado de carrera y la forma preferida es usar el manifiesto. SetProcessDPIAware

  3. Use el manifiesto personalizado con la configuración true o true/PM (el manifiesto predeterminado de Delphi incluido con "Habilitar los temas de tiempo de ejecución" no es muy sensible a DPI)

Las versiones actuales de los frameworks Delphi VCL y FMX carecen de soporte para el reconocimiento de DPI por monitor, por lo tanto, use el manifiesto true/PM solo si usted está manejando el DPI por monitor usted mismo. Reportado a QP como VCL y FireMonkey carecen de compatibilidad DPI por monitor para Windows 8.1 (y Windows 10)

<asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> </asmv3:windowsSettings> </asmv3:application>

o

<asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true/PM</dpiAware> </asmv3:windowsSettings> </asmv3:application>

Actualizar:

Delphi VCL es una fuente de comportamiento TForm , específicamente el problema está en algún lugar de la clase TForm o sus antepasados. Cuando se usa Windows API directo, las ventanas resultantes se comportan normalmente.

Código API de Windows que se comporta correctamente:

MessageBox(0, ''Correct'', ''Caption'', MB_OK); ShowMessage(''Correct''); // if themes are enabled -> Windows Task dialog is used

Aplicación de ejemplo completa de Delphi que crea la ventana principal sin usar VCL - se comporta correctamente

program win; {$R *.res} uses Windows, Messages, SysUtils; var Msg: TMSG; LWndClass: TWndClass; hMainHandle: HWND; function WindowProc(HWND, Msg: Longint; wParam: wParam; lParam: lParam): Longint; stdcall; begin if Msg = WM_DESTROY then PostQuitMessage(0); Result := DefWindowProc(HWND, Msg, wParam, lParam); end; begin LWndClass.hInstance := hInstance; with LWndClass do begin lpszClassName := ''WinApiWnd''; Style := CS_PARENTDC or CS_BYTEALIGNCLIENT; hIcon := LoadIcon(hInstance, ''MAINICON''); lpfnWndProc := @WindowProc; hbrBackground := COLOR_BTNFACE + 1; hCursor := LoadCursor(0, IDC_ARROW); end; RegisterClass(LWndClass); hMainHandle := CreateWindow(LWndClass.lpszClassName, ''Window Title'', WS_CAPTION or WS_MINIMIZEBOX or WS_SYSMENU or WS_VISIBLE, 0, 0, 360, 200, 0, 0, hInstance, nil); while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; end.

Formas de VCL mal comportamiento:

var f: TForm; f := CreateMessageDialog(''Broken'', mtWarning, mbOKCancel, mbOk); f.ShowModal; f.Free; f := TForm.Create(nil); f.ShowModal; f.Free;

En una aplicación Delphi, al pasar el mouse sobre un icono de borde, por ejemplo:

  • Minimizar
  • Maximizar
  • Restaurar

no se comporta correctamente

Compare con una aplicación que se comporta correctamente:

Paso para reproducir

  1. Haga clic en Archivo , Nuevo , Solicitud de formularios VCL - Delphi
  2. Haga clic en Ejecutar (F9)
  3. Desplácese sobre los botones Minimizar, Maximizar o Cerrar.

¿Como arreglar?

  • Windows 10, 64-bit (se ejecuta de forma nativa en la PC de escritorio)
  • Delphi XE6

Editar - También falla con Delphi 7:

y en Delphi 5:

y en Delphi 4:

Supuse (es decir, tenía miedo) que fue causado por el motor de ThemeServices; donde podrían haber pensado que era genial no respetar las preferencias del usuario. Pero parece que es algo más fundamental.

Modos de compatibilidad

  • ninguno : falla
  • Windows 8 : falla
  • Windows 7 : falla
  • Windows Vista (Service Pack 2) : falla
  • Windows Vista (Service Pack 2) : falla
  • Windows Vista : falla
  • Windows XP (Service Pack 3) (la desactivación del área no cliente): funciona
  • Windows XP (Service Pack 2) (la desactivación del área no cliente está desactivada): funciona
  • Windows 98 / Windows Me (tema no relacionado con el cliente desactivado): funciona
  • Windows 95 (tema no relacionado con el cliente desactivado): funciona

Skype

También falla en Skype; también escrito en Delphi:

Alto DPI es el disparador

Finalmente descubrí por qué falla en cada máquina con Windows 10 que he usado; pero no para todos Alto dpi.

Establezca sus ppp en 97 (101%) o superior.

Suficientemente cerca

Las soluciones de Dalija funcionan:

Ignoraremos el problema con la información sobre herramientas y viviremos para luchar otro día.

También se debe tener en cuenta que Windows 10 sugerirá que deba cerrar sesión y volver a iniciar sesión para que algunas aplicaciones funcionen correctamente después de cambiar el DPI. Esto definitivamente es cierto para Delphi.

También se debe tener en cuenta que Delphi no tolera que el DPI cambie a sus espaldas de esta manera. Esto incluye ajustar el control deslizante del zoom . Esto también incluiría colocar la aplicación en cualquier monitor además del monitor principal.

Y nunca descubrimos cuál es el problema; solo lo impulsó en el futuro para usuarios que usan múltiples monitores.

Informe de error de QC

Porque Bor ... Impr ... CodeG ... Embarca ... El sitio de QC de Idera está detrás de un muro de pago, aquí hay una copia del informe de error:

Como puede ver: a nadie le importa.