Crie um formulário sem bordas sem perder os comandos do Windows

Alterei meu formulário para um formulário sem borda, apenas alterei oBorderStyle propriedade parabsNone, mas agora meu aplicativo perde a âncora do Windows e alguns comandos como

WIN + ↑ (Alinha o formulário Cliente)
WIN + ↓ (Minimize o formulário)
WIN + → (Alinhar o formulário à direita)
WIN + ← (Alinhar o formulário à esquerda)

Eu tentei definirBorderStyle: bsSizeable e use o código abaixo dentro doFormCreate, mas isso não funcionou:

procedure TfrmBase.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle
               ,GWL_STYLE
               ,GetWindowLong(Handle, GWL_STYLE)
                AND (NOT WS_CAPTION)
                AND (NOT WS_THICKFRAME)
               );


  Refresh;
  FormColor := oLauncher.oCor;
end;

Este resultado:

A imagem acima é o que eu quero, mas os comandos do Windows que eu já mencionei não funcionam

Tem alguma maneira de definir oBorderStyle: bsNone e não perca esses comandos?

EDITAD

Se eu usar oWS_THICKFRAME meu formulário retorna uma pequena borda superior e os comandos do Windows funcionam bem, mas não quero essa borda superio

EDITED 2

Cheguei muito perto do resultado esperado, mas ainda tenho um pequeno problema ...

Coloquei isso no meuFormCreate

SetWindowLong(Handle
             ,GWL_STYLE
             ,GetWindowLong(Handle, GWL_STYLE)
              AND (NOT WS_CAPTION)
              );

E eu crio o método

private
   procedure WmNCCalcSize(var Msg: TWMNCCalcSize); message WM_NCCALCSIZE;

e depoi

procedure TfrmBase.WmNCCalcSize(var Msg: TWMNCCalcSize);
begin
  inherited;
  if Msg.CalcValidRects then
  begin
    InflateRect(Msg.CalcSize_Params.rgrc[0], 0, 6);
    Msg.Result := 0;
  end;
end;

Eu tenho esse métodoAqu

Agora a borda desapareceu, mas quando meu Form perde o foco, a borda superior / inferior é mostrada novamente ....

Como posso evitar isso

RESOLVIDO

Eu deixei a fronteira comoBorderStyle: bsSizeable, então eu fiz:

private
  procedure WmNCCalcSize(var Msg: TWMNCCalcSize); message WM_NCCALCSIZE;
[...]
procedure TfrmBase.WmNCCalcSize(var Msg: TWMNCCalcSize);
var
  R: TRect;
begin
  if not Msg.CalcValidRects then
    R := PRect(Msg.CalcSize_Params)^;
  inherited;
  if Msg.CalcValidRects then
    Msg.CalcSize_Params.rgrc0 := Msg.CalcSize_Params.rgrc1
  else
    PRect(Msg.CalcSize_Params)^ := R;

  Msg.Result := 0;
end;

procedure TfrmBase.FormCreate(Sender: TObject);
begin
  BorderStyle := bsNone;
  SetWindowLong(Handle
               ,GWL_STYLE
               ,WS_CLIPCHILDREN or WS_OVERLAPPEDWINDOW
               );
end;

procedure TfrmBase.FormShow(Sender: TObject);
begin
  Width := (Width - 1);
end;

Solução no GitHUB

Eu criei umrepository here

questionAnswers(1)

yourAnswerToTheQuestion