delphi forms resize

Desactivar la forma de cambiar el tamaño en Delphi



forms resize (3)

¿Hay alguna manera de evitar que el usuario cambie el tamaño del formulario?

Actualmente estoy usando:

Cuando el tamaño de la forma cambió ...

MainForm.Height := 761; MainForm.Width := 777;

Pero esto parece horrible, ya que parpadea cuando el usuario intenta cambiar el tamaño del formulario.


Puede agregar código en Eventos "OnCanResize":

Resize := False;

Ejemplo:

procedure TF_NameForm.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); begin Resize := False; end;


Si desea que su formulario no cambie de tamaño, entonces establecer el estilo del borde del formulario en bsSingle es lo correcto, ya que el cursor del mouse no cambiará a uno de los cursores de tamaño cuando se mueva sobre los bordes del formulario. Es obvio para el usuario que este formulario no puede redimensionarse.

Si desea establecer un tamaño mínimo y / o máximo para el formulario, entonces bsSizeable es el estilo de borde correcto, y puede usar las Constraints del formulario para especificar los límites. Sin embargo, existe el problema de que la propiedad Constraints no impide el cambio de tamaño del formulario, solo hace que los tamaños se ajusten después del hecho para que no se violen los límites. Esto tendrá el efecto secundario negativo de que el tamaño de la forma con el borde izquierdo o superior lo moverá. Para evitar que esto suceda, es necesario evitar el cambio de tamaño en primer lugar. Windows envía el mensaje WM_GETMINMAXINFO para recuperar los tamaños de seguimiento mínimo y máximo para una ventana de nivel superior. Manejar esto y devolver las restricciones correctas soluciona el problema de la forma en movimiento:

type TForm1 = class(TForm) private procedure WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO; end; // ... procedure TForm1.WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo); begin inherited; with AMsg.MinMaxInfo^ do begin ptMinTrackSize := Point(Constraints.MinWidth, Constraints.MinHeight); ptMaxTrackSize := Point(Constraints.MaxWidth, Constraints.MaxHeight); end; end;


Reparar el tamaño es fácil, tienes dos opciones:

  1. Los formularios de Delphi tienen una propiedad BorderStyle y una propiedad BorderIcons . Si configura BorderStyle en bsDialog , y BorderIcons en biSystemMenu solamente, el usuario no puede cambiar el tamaño del formulario.

  2. Puede especificar valor a la propiedad Constraints . Si escribe el mismo número en MinWidth y MaxWidth , el ancho será fijo.

Prevenir el movimiento es más complicado. Solo puedo encontrar estas soluciones ahora:

  1. Establezca BorderStyle en bsNone . Necesitará dibujar el título del formulario usted mismo, si es necesario.

  2. Escriba un manejador de mensajes a WM_NCHITTEST , llame primero al heredado, luego verifique el Message.Result para HTCAPTION . Si es HTCAPTION , HTCLIENT en HTCLIENT en HTCLIENT lugar. De esta manera, engañar a Windows para pensar que el usuario no hizo clic en el título, por lo que no podrá arrastrar. Por favor, intente si el usuario todavía puede mover la ventana abriendo el menú del sistema y seleccionando Mover. Si es así, también tiene que ocultar el menú del sistema ( BorderIcons ).

Respuesta encontrada here .