ты мне очень помог мужик !! Теперь мне просто нужно внести некоторые коррективы ...

енил свою форму на форму без полей, я просто изменилBorderStyle собственность наbsNone, но теперь мое приложение теряет привязку окна и некоторые команды, такие как

WIN + ↑ (выровнять форму клиента)
WIN + ↓ (свернуть форму)
WIN + → (выровнять форму справа)
WIN + ← (выровнять форму слева)

Я пытался установитьBorderStyle: bsSizeable и используйте приведенный ниже код внутриFormCreate, но это не сработало:

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;

Этот результат:

Изображение выше - то, что я хочу, но команды Windows, которые я уже упоминал, не работают

Есть ли способ установитьBorderStyle: bsNone и не потеряете эти команды?

РЕДАКТИРОВАНИЕ

Если я используюWS_THICKFRAME моя форма возвращает небольшую верхнюю границу, и команды windows работают хорошо, но я не хочу эту верхнюю границу.

Отредактировано 2

Я получил очень близко к ожидаемому результату, но у меня есть небольшая проблема ...

Я положил это на мойFormCreate

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

И я создаю метод

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

а потом

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;

Я получил этот методВот

Теперь граница исчезла, но когда моя Форма теряет фокус, верхняя / нижняя граница снова отображается ....

Как я могу избежать этого?

РЕШИТЬ

Я покинул границу какBorderStyle: bsSizeableтогда я сделал это:

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;

Решение на GitHUB

Я создалхранилище здесь

Ответы на вопрос(1)

Ваш ответ на вопрос