2 Stimmen

NSMenu beginnt nicht mit der Verfolgung

Ich habe eine kleine Kakao-App, die normalerweise im Hintergrund läuft (als Agent). Manchmal möchte ich in der Lage sein, ein Kontextmenü zu öffnen (kein Fenster oder s.th. sichtbar zu dieser Zeit).

Da ich nur Snow Leopard im Visier habe, habe ich dies versucht:

if (windows) {
       NSMenu *theMenu = [[[NSMenu alloc] initWithTitle:@"test"] autorelease];
       [theMenu setShowsStateColumn:NO];
       [theMenu setAutoenablesItems:NO];

           for (id item in windows) {

               NSString *labelText = @"some text";

               NSMenuItem *theMenuItem = [[[NSMenuItem alloc] initWithTitle:labelText
                                             action:@selector(menuItemSelected:)
                                               keyEquivalent:@""] autorelease]; 

               [theMenuItem setTarget:self];
               [theMenuItem setRepresentedObject:item];
               [theMenuItem setEnabled:YES];
               [theMenuItem setImage:icon];
               [theMenu addItem:theMenuItem];
           }

       [theMenu popUpMenuPositioningItem:nil atLocation:[NSEvent mouseLocation] inView:nil];

 }

Das Menü öffnet sich perfekt, aber wenn ich mit dem Mauszeiger über die Elemente fahre, werden sie nicht hervorgehoben und ich kann sie nicht anklicken.

Die Methode menuItemSelected: sieht wie folgt aus:

-(IBAction)menuItemSelected:(id)sender {

}

Irgendeine Idee, was ich falsch mache?

0voto

Adam Preble Punkte 2082

Ich vermute, dass das Fenstersystem Ihre Anwendung nicht als aktiv betrachtet und daher keine Mausereignisse an das von Ihnen erstellte Menü sendet.

Versuchen Sie, ein Dummy-Fenster zu erstellen, bevor Sie das Menü öffnen. Ich würde ein NSPanel möglicherweise mit Stil NSNonActivatingPanelMask . makeKeyAndOrderFront: Ihr Fenster/Panel, dann öffnen Sie das Menü und sehen Sie, was passiert.

Wenn das funktioniert, würde ich bei diesem Ansatz bleiben und das Fenster ausblenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X