ты мне очень помог мужик !! Теперь мне просто нужно внести некоторые коррективы ...
енил свою форму на форму без полей, я просто изменил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
Я создалхранилище здесь