Delphi XE - действия TRibbon всегда направляют фокус в MainForm

StackOverflow https://stackoverflow.com/questions/8403323

Вопрос

Когда я помещаю элемент управления TRibbon в форму, которая не является MainForm приложения, действия TRibbon (например, Cut, Paste) всегда возвращают фокус в MainForm после выполнения действия.

Это происходит, даже если TForm, содержащий TRibbon, не является дочерним по отношению к MainForm.

Я использую 64-разрядную версию Windows 7, Embarcadero RAD Studio XE версии 15.0.3953.35171.

Я неправильно использую элемент управления TRibbon или это проблема TRibbon?

Это было полезно?

Решение

Очевидно, это сделано специально. Пример фрагмента кода из "tapeactnctrls.pas":

родовое слово

Как видите, не проверены условия, которые помогли бы нам избежать звонка. Тот же код также используется в обработчиках выбора пунктов меню и нажатия клавиш.


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

В качестве альтернативы вы можете вернуть фокус обратно в форму после того, как она переключится на основную форму. Предположим, что ActionList1 - это TActionList, который содержит стандартные действия в не основной форме:

родовое слово

Однако это приведет к тому, что основная форма будет кратковременно мигать при каждом выполнении действия. Если вы этого не хотите, вы можете изменить дизайн, чтобы основная форма знала, когда она получает нежелательный фокус, и имитировала, что она не сфокусирована.

В unit1:

родовое слово

in unit2:

родовое слово


Однако этого недостаточно, если в исходном коде проекта не установлен параметр «MainFormOnTaskBar», поскольку в этом случае основная форма не только получит фокус, но и будет выведена на передний план. В этом случае обе формы могут отреагировать на нежелательное изменение / активацию фокуса, заморозив свои z-порядки. Тогда код станет для unit1:

родовое слово

и для unit2:

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top