Стиль VCL с высоким разрешением предотвращает правильный размер полосы прокрутки. Как заставить полосу прокрутки перерисовываться?

Использование Delphi 12.1 Афины:

  • Создайте новое приложение VCL MDI для 32-разрядной версии Windows (Файл — Создать — Другое, слева выберите Delphi — Windows, затем выберите приложение MDI и нажмите «ОК»).
  • Выберите стиль «Полярное сияние Windows 11» в меню «Проект» — «Параметры» — «Внешний вид».
  • Добавьте выровненную панель alTop
  • Добавьте кнопку на панель и назовите ее NewBtn.
  • Добавьте событие OnClick к каждому компоненту и добавьте код, показанный ниже.
  • Запустите программу.
  • Нажмите NewBtn, чтобы создать одну или несколько дочерних форм.
  • Переместите дочернюю форму так, чтобы была видна вертикальная полоса прокрутки.
  • Щелкните компонент панели. Высота должна измениться, но полоса прокрутки не будет перерисовываться.

Это было признано дефектом, но я не получил никаких советов по обходному пути. Я думал, что могу просто изменить размер главного окна, и это работает, если только окно не развернуто на максимум, что делают многие мои пользователи. Я попробовал просто вызвать метод Resize(), но это не дало никакого эффекта. Я попытался отследить код VCL, но не смог найти ничего, что имело бы для меня смысл.

object MainForm: TMainForm
  Left = 194
  Top = 111
  Caption = 'MDI Application'
  ClientHeight = 535
  ClientWidth = 610
  Color = clAppWorkSpace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clBlack
  Font.Height = -11
  Font.Name = 'Default'
  Font.Style = []
  FormStyle = fsMDIForm
  VisualManager = FormTabsBar1
  Position = poDefault
  TextHeight = 13
  object StatusBar: TStatusBar
    Left = 0
    Top = 516
    Width = 610
    Height = 19
    Margins.Left = 2
    Margins.Top = 2
    Margins.Right = 2
    Margins.Bottom = 2
    AutoHint = True
    Panels = <>
    SimplePanel = True
  end
  object FormTabsBar1: TFormTabsBar
    Left = 0
    Top = 486
    Width = 610
    Height = 30
    Align = alBottom
    ParentColor = False
    TabOptions.ShowFormIcon = True
    TabOptions.ShowFormSystemMenu = True
    TabOptions.ShowCloseButton = True
    TabOptions.ShowHintForTruncatedCaption = True
    TabMinWidth = 100
    TabMaxWidth = 250
    Visible = False
    ShowTabsMenuButton = True
  end
  object Panel1: TPanel
    Left = 0
    Top = 0
    Width = 610
    Height = 97
    Align = alTop
    Caption = 'Panel1'
    TabOrder = 2
    OnClick = Panel1Click
    object NewBtn: TButton
      Left = 20
      Top = 28
      Width = 75
      Height = 25
      Caption = 'NewBtn'
      TabOrder = 0
      OnClick = NewBtnClick
    end
  end
  object OpenDialog: TOpenDialog
    Filter = 'All files (*.*)|*.*'
    Left = 16
    Top = 272
  end
  ... Image data removed...
end
procedure TMainForm.Panel1Click(Sender: TObject);
begin
  if Panel1.Height > 100 then
    Panel1.Height := Panel1.Height - 20
  else
    Panel1.Height := Panel1.Height + 20;
end;
    
procedure TMainForm.NewBtnClick(Sender: TObject);
begin
  FileNew1Execute(nil);
end;
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать этот обходной путь внутри обработчика событий Panel1Click и включить Vcl.Themes в список использования:

SendMessage(Handle, WM_MDICHILDMOVE, 0, 0);

Работает как шарм!

Koot33 31.07.2024 22:31

Другие вопросы по теме