В XCode добавление этих методов в ваш подкласс NSView может помешать активизации окна при нажатии на него:
- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent )theEvent {
return YES;
}
- (BOOL)acceptsFirstMouse:(NSEvent )theEvent {
return YES;
}
- (void)mouseDown:(NSEvent )theEvent {
[[[NSApp]] preventWindowOrdering];
}
В платформе Windows это делается с помощью простого кода:
HWND hWnd = FindWindowW((String("FM") + fmxForm->ClassName()).c_str(),
fmxForm->Caption.c_str());
SetWindowLong(hWnd, GWL_EXSTYLE,
GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
Как я могу создать подкласс NSView, чтобы предотвратить активацию моей FMX TForm при нажатии на нее?
Как я могу создать форму « без активации » в firemonkey ?
macos
delphi
delphi-xe2
c++builder
firemonkey
MH Taqia
источник
источник
Ответы:
Это возможно, используя NSPanel с флагом NSNonactivatingPanelMask . NSView формы fmx должен стать потомком NSPanel. Я написал вспомогательный класс, который работает для платформ Windows и Mac ( работает на XE4 ):
Использование вышеуказанного блока:
Если frmKeyboard - ваша основная форма, то не помещайте вышеуказанный код в конструктор формы, рекомендуется поместить его в OnShow.
Примечание : WindowHandleToPlatform, по-видимому, не существует в XE3, поэтому строку можно заменить на
источник
Вы можете отключить манипулирование мышью с формами, чтобы оно не фокусировалось. Предполагая, что ваша форма называется myform:
Есть небольшая проблема в том, что она не останавливает щелчок правой кнопкой мыши. Если это проблема, вам придется ответить на событие mousedown в форме и вызвать mousedown основных форм, чтобы оно не потеряло событие мыши. Так как правая мышь вниз захватит события мыши, вам также нужно будет реагировать на события перемещения мыши и мыши вверх - перенаправляя их в основную форму. Хотя он захватывает мышь при щелчке правой кнопкой мыши, он по-прежнему не фокусирует форму.
Программное обеспечение Dave Peters DP
источник