Wenn Sie in XCode diese Methoden zu Ihrer NSView-Unterklasse hinzufügen, kann verhindert werden, dass das Fenster beim Klicken aktiv wird:
- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent )theEvent {
return YES;
}
- (BOOL)acceptsFirstMouse:(NSEvent )theEvent {
return YES;
}
- (void)mouseDown:(NSEvent )theEvent {
[[[NSApp]] preventWindowOrdering];
}
In der Windows-Plattform Dies geschieht mit diesem einfachen Code:
HWND hWnd = FindWindowW((String("FM") + fmxForm->ClassName()).c_str(),
fmxForm->Caption.c_str());
SetWindowLong(hWnd, GWL_EXSTYLE,
GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
Wie kann ich NSView unterordnen, um zu verhindern, dass mein FMX TForm beim Klicken aktiv wird?
Wie kann ich in firemonkey das Formular " No Activate " erstellen ?
macos
delphi
delphi-xe2
c++builder
firemonkey
mh taqia
quelle
quelle
Antworten:
Es ist möglich, NSPanel mit dem Flag NSNonactivatingPanelMask zu verwenden. Das NSView von fmx form sollte ein Kind von NSPanel werden. Ich habe eine Hilfsklasse geschrieben, die sowohl für Windows- als auch für Mac-Plattformen funktioniert ( funktioniert unter XE4 ):
Verwendung der oben genannten Einheit:
Wenn frmKeyboard Ihr Hauptformular ist, fügen Sie den obigen Code nicht in den Formularkonstruktor ein. Es wird empfohlen, ihn in OnShow einzufügen.
Hinweis : WindowHandleToPlatform scheint in XE3 nicht vorhanden zu sein, sodass diese Zeile durch ersetzt werden kann
quelle
Sie können die Handhabung der Formularmaus deaktivieren, um zu verhindern, dass sie fokussiert wird. Angenommen, Ihr Formular heißt myform:
Es gibt ein kleines Problem darin, dass ein Rechtsklick nicht gestoppt wird. Wenn dies ein Problem ist, müssen Sie auf das Mousedown-Ereignis im Formular reagieren und die Mousedown-Funktion der Hauptformulare aufrufen, damit das Mausereignis nicht verloren geht. Da die rechte Maustaste dann die Mausereignisse erfasst, müssen Sie auch auf Ereignisse zum Bewegen der Maus und zum Hochfahren der Maus reagieren und diese an Ihr Hauptformular weiterleiten. Obwohl die Maus beim Klicken mit der rechten Maustaste erfasst wird, wird das Formular dennoch nicht fokussiert.
Dave Peters DP Software
quelle