Vcl Style Utils - избавиться от значка формы по умолчанию

Я уже разместил это как проблему в библиотеке RRUZ Vcl Style Utils на GitHub. Тем не менее, я думал, что смогу получить помощь и здесь.

Я использую стили VCL для создания пользовательского интерфейса Windows 10, в частности, используя стиль "Windows 10 Dark". Я также использую VCL Style Utils, чтобы иметь возможность добавлять кнопки в не-клиентскую область в строке заголовка. Я пытаюсь полностью игнорировать значок формы и его функциональность по умолчанию в пользу кнопки "Назад", как это делают большинство новых приложений Windows 10.

Я пытаюсь поместить кнопку в дальний верхний левый угол формы, используя TNCControls компонент в Vcl.Styles.NC, Однако, когда я размещаю кнопку над значком формы, кнопка не может быть нажата в области значка. Несмотря на то, что я могу перекрывать значок, нажатие в этой конкретной области строки заголовка всегда открывает системное меню формы, а не нажатие кнопки, которую я там разместил.

Я не хочу, чтобы это меню появлялось при нажатии на него:

Системное меню формы

Как я сейчас создаю эту кнопку:

procedure TfrmTestMain.SetupTitleBar;
var
  B: TNCButton;
begin
  FNCControls:= TNCControls.Create(Self);
  B:= FNCControls.ButtonsList.Add;
  B.Style := TNCButton.TNCButtonStyle.nsTranparent;
  B.BoundsRect := Rect(0, 0, 45, 32);
  B.UseFontAwesome:= True;
  B.Caption := '';
  B.ImageAlignment:= TImageAlignment.iaCenter;
  B.ImageStyle:= TNCButton.TNCImageStyle.isNormal;
  B.ImageIndex:= fa_chevron_left;
end;

Что я пробовал до сих пор:

  1. Заменил иконку формы на совершенно пустой.ico файл.

  2. Изменение стиля формы на bsSizeToolWin, но строка заголовка становится слишком маленькой, и я теряю кнопки сворачивания / сворачивания.

  3. Изменив стиль формы на bsDialog, но я получаю тот же эффект, что и № 2 выше, а также не могу изменить размер формы.

  4. Убедитесь, что стиль кнопки - nsPushButton, и хотя он закрывает значок формы, при щелчке по области все еще щелкает значок, который, в свою очередь, показывает системное меню по умолчанию.

  5. Следите за всем в этой теме, но вывод таков: Windows заставляет вас иметь этот значок.

  6. Удалены biSystemMenu из формы BorderIcons свойство, но это также удаляет кнопки по умолчанию в правом верхнем углу формы, заставляя меня размещать свои собственные системные кнопки там.

Как полностью исключить значок формы и функции по умолчанию в пользу моей кнопки "Назад" в стиле Windows 10?

1 ответ

Решение

TNCControls компонент включает в себя ShowSystemMenu имущество. Если вы установите значение false, то системное меню не будет отображаться.

Попробуй это

uses
 Vcl.Styles.Utils.Graphics;

procedure TfrmTestMain.FormCreate(Sender: TObject);
begin
 SetupTitleBar;
end;

procedure TfrmTestMain.NCClick(Sender: TObject);
begin
  ShowMessage('Hello');
end;

procedure TfrmTestMain.SetupTitleBar;
var
  B: TNCButton;
begin
  FNCControls:= TNCControls.Create(Self);
  FNCControls.ShowSystemMenu := False; //Disable the system menu.

  B := FNCControls.ButtonsList.Add;
  B.Style := TNCButton.TNCButtonStyle.nsTranparent;
  B.BoundsRect := Rect(0, 0, 45, 32);
  B.UseFontAwesome:= True;
  B.Caption := '';
  B.ImageAlignment:= TImageAlignment.iaCenter;
  B.ImageStyle:= TNCButton.TNCImageStyle.isNormal;
  B.ImageIndex:= fa_chevron_left;
  B.OnClick := NCClick;
end;
Другие вопросы по тегам