Dans XCode, l'ajout de ces méthodes à votre sous-classe NSView peut empêcher la fenêtre de devenir active lorsque vous cliquez dessus:
- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent )theEvent {
return YES;
}
- (BOOL)acceptsFirstMouse:(NSEvent )theEvent {
return YES;
}
- (void)mouseDown:(NSEvent )theEvent {
[[[NSApp]] preventWindowOrdering];
}
Dans la plate-forme Windows, cela se fait par ce code simple:
HWND hWnd = FindWindowW((String("FM") + fmxForm->ClassName()).c_str(),
fmxForm->Caption.c_str());
SetWindowLong(hWnd, GWL_EXSTYLE,
GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
Comment puis-je sous-classer NSView pour éviter que mon FMX TForm ne devienne actif en cliquant dessus?
Comment créer un formulaire " No Activate " dans firemonkey ?
macos
delphi
delphi-xe2
c++builder
firemonkey
mh taqia
la source
la source
Réponses:
Il est possible d'utiliser NSPanel avec l' indicateur NSNonactivatingPanelMask . Le formulaire NSView de fmx doit devenir l'enfant de NSPanel. J'ai écrit une classe d'assistance qui fonctionne pour les plates-formes Windows et Mac ( fonctionne sur XE4 ):
Utilisation de l'unité ci-dessus:
Si frmKeyboard est votre formulaire principal, ne mettez pas le code ci-dessus dans le constructeur de formulaire, il est recommandé de le mettre dans OnShow.
Remarque : WindowHandleToPlatform ne semble pas exister dans XE3, donc cette ligne peut être remplacée par
la source
Vous pouvez désactiver la gestion de la souris des formulaires pour éviter qu'elle ne soit focalisée. En supposant que votre formulaire s'appelle myform:
Il y a un léger problème en ce que cela n'arrête pas un clic droit de la souris. Si c'est un problème, vous devrez répondre à l'événement mousedown dans le formulaire et appeler les formulaires principaux mousedown pour qu'il ne perde pas l'événement souris. Étant donné que le bouton droit de la souris capturera alors les événements de la souris, vous devez également répondre aux événements de déplacement de la souris et de souris vers le haut, en les transférant vers votre formulaire principal. Bien qu'il capture la souris lors d'un clic droit, il ne focalisera toujours pas le formulaire.
Logiciel Dave Peters DP
la source