W XCode dodanie tych metod do podklasy NSView może zapobiec aktywowaniu okna po jego kliknięciu:
- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent )theEvent {
return YES;
}
- (BOOL)acceptsFirstMouse:(NSEvent )theEvent {
return YES;
}
- (void)mouseDown:(NSEvent )theEvent {
[[[NSApp]] preventWindowOrdering];
}
Na platformie Windows odbywa się to za pomocą prostego kodu:
HWND hWnd = FindWindowW((String("FM") + fmxForm->ClassName()).c_str(),
fmxForm->Caption.c_str());
SetWindowLong(hWnd, GWL_EXSTYLE,
GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
Jak mogę podklasować NSView, aby zapobiec aktywowaniu mojego FMX TForm po kliknięciu na niego?
Jak mogę utworzyć formularz „ Nie aktywuj ” w programie firemonkey ?
macos
delphi
delphi-xe2
c++builder
firemonkey
mh taqia
źródło
źródło
Odpowiedzi:
Jest to możliwe przy użyciu NSPanel z flagą NSNonactivatingPanelMask . NSView formularza fmx powinno stać się elementem potomnym NSPanel. Napisałem pomocniczą klasę, która działa na platformach Windows i Mac ( działa na XE4 ):
Wykorzystanie powyższej jednostki:
Jeśli frmKeyboard jest twoim głównym formularzem, nie umieszczaj powyższego kodu w konstruktorze formularza, zaleca się umieszczenie go w OnShow.
Uwaga : Wygląda na to, że WindowHandleToPlatform nie istnieje w XE3, więc wiersz można zastąpić
źródło
Możesz wyłączyć obsługę myszy w formularzach, aby zapobiec jej skupieniu. Zakładając, że twój formularz nazywa się myform:
Istnieje niewielki problem polegający na tym, że nie zatrzymuje kliknięcia prawym przyciskiem myszy. Jeśli to jest problem, będziesz musiał odpowiedzieć na zdarzenie myszy w formularzu i wywołać główne formularze, aby nie utracić zdarzenia myszy. Ponieważ prawy przycisk myszy w dół przechwytuje zdarzenia myszy, musisz również reagować na zdarzenia ruchu myszy i myszy w górę - przesyłając je do formularza głównego. Chociaż przechwytuje mysz po kliknięciu prawym przyciskiem myszy, nadal nie skupia się na formularzu.
Oprogramowanie Dave Peters DP
źródło