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:
Los formularios de Delphi tienen una propiedad
BorderStyley una propiedadBorderIcons. Si configuraBorderStyleenbsDialog, yBorderIconsenbiSystemMenusolamente, el usuario no puede cambiar el tamaño del formulario.Puede especificar valor a la propiedad
Constraints. Si escribe el mismo número enMinWidthyMaxWidth, el ancho será fijo.
Prevenir el movimiento es más complicado. Solo puedo encontrar estas soluciones ahora:
Establezca
BorderStyleenbsNone. Necesitará dibujar el título del formulario usted mismo, si es necesario.Escriba un manejador de mensajes a
WM_NCHITTEST, llame primero al heredado, luego verifique elMessage.ResultparaHTCAPTION. Si esHTCAPTION,HTCLIENTenHTCLIENTenHTCLIENTlugar. 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 .