Cambio de tamaño suave en una forma / ventana sin bordes en Delphi

Estoy tratando de cambiar el tamaño de una forma sin bordes, pero cuando aumento el tamaño con el lado derecho / inferior, obtengo un espacio entre el borde y el área del cliente anterior que depende de la velocidad con la que mueva el mouse.

El efecto es más notable cuando cambia el tamaño desde el borde izquierdo o incluso desde la esquina inferior izquierda, es horrible en todas partes (probé con otras aplicaciones comerciales y también sucede). Este efecto también ocurre cuando cambio a un borde considerable, pero no es tan horrible como cuando elimino los bordes del formulario

El diseño del formulario consiste en un panel superior que realiza la función de la barra de título (con algunos tImages y botones), y algunos otros paneles que muestran otra información (como una nota, otros controles, etc.)

Hay un fragmento de mi código en el que capturo el botón del mouse y envío un mensaje a Windows, pero también intenté hacerlo manualmente con resultados similares

Activar el búfer doble para el panel superior evita el parpadeo, pero cambiar el tamaño del panel no se sincroniza con el cambio de tamaño del formulario, por lo que aparece un espacio o parte del panel que desaparece

 procedure TOutputForm.ApplicationEvents1Message( var Msg: tagMSG;
  var Handled: Boolean );
const
  BorderBuffer = 5;
var
  X, Y: Integer;
  ClientPoint: TPoint;
  direction: integer;
begin
  Handled := false;
  case Msg.message of
    WM_LBUTTONDOWN:
      begin
        if fResizable then
        begin
          if fSides = [sTop] then
            direction := 3
          else if fSides = [sLeft] then
            direction := 1
          else if fSides = [sBottom] then
            direction := 6
          else if fSides = [sRight] then
            direction := 2
          else if fSides = [sRight, sTop] then
            direction := 5
          else if fSides = [sLeft, sTop] then
            direction := 4
          else if fSides = [sLeft, sBottom] then
            direction := 7
          else if fSides = [sRight, sBottom] then
            direction := 8;
          ReleaseCapture;
          SendMessage( Handle, WM_SYSCOMMAND, ( 61440 + direction ), 0 );
          Handled := true;
        end;
      end;
    WM_MOUSEMOVE:
      begin
        // Checks the borders and sets fResizable to true if it's in a "border" 
        // ...
      end; // mousemove
  end; // case
end;

¿Cómo podría evitar esa área y / o forzar que las ventanas se vuelvan a dibujar? Estoy usando Delphi pero una solución genérica (o en otro idioma) o incluso una dirección para avanzar estaría bien para mí

Gracias de anteman

Respuestas a la pregunta(4)

Su respuesta a la pregunta